2014-04-23 1 views
0

내 프로그램을 기다리는 질문/응답 작업하는 동안 :A 동 KeyPressFcn 마우스 액션

-participant 두 버튼을 한 번에 그 키를 누르면 소리 -participant해야 재생 (키보드) 표시 줄 공간을 눌러야합니다 (마우스) - 참가자는 스페이스 바를 눌러 소리를 내야합니다. ...

문제는 스페이스 바에서 한 번만 누르면됩니다. 공간에서 많은 시간을 눌러 사운드를 재생할 수 있기 때문에 x 번. 마우스 응답을 기다리는 동안 figure1_KeyPressFcn을 차단하는 방법과 마우스 응답이 있으면 함수를 다시 활성화합니까? 사용자가 클릭 한 경우 다음과 같이, 당신은 단지 switch를 호출하여 figure1_KeyPressFcn 기능에

global clicked; 
clicked = true; 

그런 :

function figure1_KeyPressFcn(hObject, eventdata, handles) 
    switch eventdata.Key 
     case 'space'   
       %% processing x task 
       %playing sounds 1000 ms 
       soundsc(y,Fs); 
       guidata(hObject, handles); %%// Save handles data 
      otherwise 
      disp('error'); 

    end 
end 


function pushbutton1_Callback(hObject, eventdata, handles) 
%processing task 
guidata(hObject, handles); %%// Save the handles data 
end 

function pushbutton2_Callback(hObject, eventdata, handles) 
%processing task 
guidata(hObject, handles); %%// Save the handles data 
end 

답변

2

당신이 뭔가를 글로벌 플래그를 사용할 수

global clicked; 
if clicked 
    switch eventdata.Key 
     case 'space'   
      clicked = false; 
      %% processing x task 
      ... 
    end 
end 

pushbutton?_Callback 모두에 다음을 추가하십시오.

global clicked; 
clicked = true; 

clickedtrue으로 설정하고 figure1_KeyPressFcn으로 스페이스 키를 다시 처리하도록 허용하십시오.