Я создаю игру в MATLAB, используя руководство для школьного проекта, и я сталкиваюсь с препятствием при реализации кнопок. Я знаю, что решение простое, но я его не понимаю...
Вот предпосылка игры (она основана на игре GBA «Advance Wars»): я использую сетку 10x15 маленьких квадратных осей для отображения «Карты». Каждая ось загружается с изображением, основанным на рельефе карты, юните, занимающем пространство, и независимо от того, выделена ли панель «курсором» (я создал изображение для каждой возможной ситуации, и все, что нужно сделать скрипту, это отображать правильное изображение).
Я успешно сделал функцию, которая меняет изображение указанных осей. Используя эту функцию, я могу заставить курсор «мигать» в указанных осях, изменив изображение этой оси на его выделенный вариант, приостановив, а затем вернув его к исходному изображению.
Пользователь должен иметь возможность перемещать курсор на соседние оси, нажимая одну из четырех кнопок: «Влево», «Вправо», «Вверх» и «Вниз».
К сожалению, здесь у меня проблемы. Курсор просто продолжает мигать в одном и том же месте, хотя я нажимаю кнопки.
Если кто-то может помочь, я был бы очень благодарен!
Вот скрипт в моем графическом интерфейсе OpeningFcn после того, как я инициализировал изображение по каждой оси:
% Begin Game
% Values of important game variables initialized:
% Player 1 has the first turn
Turn = 'P1';
% Cursor location initialized to upper left hand corner
handles.C_Loc = [1,1];
% Game set initially to continue
handles.game_cont = 1;
% Player turn initially set to continue
handles.turn_cont = 1;
%
% Cursor movement initially set to zero
handles.C_Move_H = 0;
handles.C_Move_V = 0;
%
% Until the game conditions are met, the following loop will execute:
while (handles.game_cont == 1)
% Reset cursor location based on which player's turn it is
switch Turn
case ('P1')
handles.C_Loc = [7,3];
case ('P2')
handles.C_Loc = [3,13];
end
% Until the player ends their turn, the following loop will execute:
while (handles.turn_cont == 1)
% Cursor location should be changed based on button pushes:
handles.C_Loc(1) = handles.C_Loc(1) + handles.C_Move_V;
handles.C_Loc(2) = handles.C_Loc(2) + handles.C_Move_H;
% Movement should be reset to avoid continuous movement:
handles.C_Move_V = 0;
handles.C_Move_H = 0;
% Current map is a cell array with the same dimensions as map.
% Each cell holds a string used to decide which image to load.
Old_Im = Current_Map{handles.C_Loc(1),handles.C_Loc(2)};
% Highlighted image is designated by adding "H" to string
New_Im = strcat(Old_Im,'H');
% User-defined function changes axes to highlighted image
Image_Change(handles.C_Loc(1),handles.C_Loc(2), New_Im, handles)
pause(0.75)
% User-defined function changes axes back to original image
Image_Change(handles.C_Loc(1),handles.C_Loc(2), Old_Im, handles)
end
switch Turn
case ('P1')
Turn = 'P2';
case ('P2')
Turn = 'P1';
end
end
end
Вот один из моих обратных вызовов кнопки (для кнопки «ВВЕРХ»):
handles.C_Move_V = 1;
guidata(hObject, handles);
ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?! Пожалуйста помоги...