MATLAB GUI: Как использовать кнопки для увеличения переменной в функции открытия? (движение курсора)
Я создаю игру в MATLAB, используя руководство для школьного проекта, и нахожусь на дорожном блоке, реализующем кнопки. Я знаю, что решение простое, но я не получаю его...
Вот предпосылка игры (она основана на игре GBA "Advance Wars"): я использую сетку маленьких квадратных осей 10x15 для отображения "карты". Каждая ось загружается изображением, основанным на рельефе карты, единице, занимающей пространство, и на том, подсвечивается ли панель "курсором" (я создал изображение для каждой возможной ситуации, и все, что нужно сделать сценарию, это отобразить правильное изображение).
Я успешно сделал функцию, которая изменяет изображение указанной оси. Используя эту функцию, я могу заставить курсор "мигать" в указанных осях, изменив изображение этой оси на выделенный вариант, приостановив и затем вернув его к исходному изображению.
Пользователь должен иметь возможность перемещать курсор к смежным осям, нажимая одну из четырех кнопок: "Влево", "Вправо", "Вверх" и "Вниз".
К сожалению, здесь у меня проблемы. Курсор продолжает мигать в том же положении, даже если я нажимаю кнопки.
Если бы кто-то мог помочь, я был бы чрезвычайно благодарен!
Вот скрипт в моем GUI 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);
ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?! Пожалуйста помоги...
1 ответ
Опаздываю на вечеринку:
ты можешь попробовать:
drawnow
если это не поможет, вы можете попробовать добавить
guidata(hObject, handles);
... хотя я думаю, что вы никогда не увидите это:(. Я надеюсь, что иногда это поможет кому-то еще...