MATLAB GUI: как использовать кнопки для увеличения переменной в функции открытия? (движение курсора)

Я создаю игру в 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);

ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?! Пожалуйста помоги...


person user2329916    schedule 28.04.2013    source источник


Ответы (1)


опоздать на вечеринку:

можешь попробовать:

drawnow

если это не поможет, вы можете попробовать добавить

guidata(hObject, handles);

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

person Lucius II.    schedule 30.07.2013