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);

... хотя я думаю, что вы никогда не увидите это:(. Я надеюсь, что иногда это поможет кому-то еще...

Другие вопросы по тегам