0

matlabでゲームSimonのバージョンを作成しようとしています。ボタンを押した後、ボタンを元の色に戻したいのですが、ボタンは新しい色のままです。私が使用しているコードは次のとおりです。

clc, clf, clear
h1=figure(1);
button1=uicontrol(h1, 'Style','Pushbutton', 'Units','Normalized','Position',...
[0.1 0.1 0.2 0.2],'Backgroundcolor', [1 0 0],...
'Callback',['value1=get(button1,''Value''); if value1==1',...
'set(button1,''Backgroundcolor'',[0 1 0]); else ,',...
'set(button1, ''BackgroundColor'',''r''), end,value2=get(button1,''Value'')']);

実行すると、色が緑のままであることがわかります。自動的に赤に戻すにはどうすればよいですか?

4

1 に答える 1

2

コードの主な問題は、ボタンを押すとのValueプロパティのみがチェックbutton1され、今後のプレスでは変更されないことです。したがって、Valueofbutton1は常に0と評価され、その結果、ボタンの色が変わることはありません。

次の動作するコードは、あなたが望むことをしているようです:

clc, clf, clear
h1 = figure(1);
button1_state = 1;
button1_callback = ...
   ['if (button1_state == 1), set(button1, ''Backgroundcolor'', ''g''),' ...
    'else set(button1, ''BackgroundColor'', ''r''), end, ' ...
    'button1_state = ~button1_state;'];
button1 = uicontrol(h1, 'Style', 'Pushbutton', 'Units', 'Normalized', ...
   'Position', [0.1 0.1 0.2 0.2], 'Backgroundcolor', 'r', ...
   'Callback', button1_callback);

ここで行ったことはbutton1_state、現在の「状態」button1(赤の場合は1、緑の場合は0)を保持する変数を作成することです。コールバック操作では、現在の状態に応じてボタンの背景色を変更してから、状態を反転します。

それが役に立てば幸い!

PS読みやすさの理由から
、コールバック操作を文字列に個別に配置していることに注意してください。button1_callbackそれは実際にこれに展開します:

if (button1_state == 1)
   set(button1, 'Backgroundcolor', 'g')
else
   set(button1, 'BackgroundColor', 'r')
end
button1_state = ~button1_state;
于 2012-05-22T22:19:37.020 に答える