フィルターのクリア

How to make latch switch

5 ビュー (過去 30 日間)
Dirk te Brake
Dirk te Brake 2024 年 2 月 9 日
コメント済み: Voss 2024 年 2 月 11 日
Hi, i am making a animation but i want to be able to pause it when i press space and continue again when i press space (just like youtube). This is what i have but im not sure what to put in the while loop.
function myfun(~,event)
if event.Key == "space"
pause(0.1)
while event.Key ~= "space"
end
end
end
I feel like a simaler function needs to be inside the while loop but if i try that i get an error. Currently this function works as a press switch and not as a latch. And the pause doesnt work great either, once in a while it still continues a frame if i hold space. I'm not sure if the explanation is clear, so i attached the .m file.

採用された回答

Voss
Voss 2024 年 2 月 10 日
Try the attached m-file. See if it works as expected and makes sense.
  8 件のコメント
Dirk te Brake
Dirk te Brake 2024 年 2 月 11 日
Thank you for the clarification.
Voss
Voss 2024 年 2 月 11 日
You're welcome! Let me know if you have any other questions.

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2024 年 2 月 9 日
You have the difficulty that the event field is not going to update as long as you are inside the KeyPressFcn handler.
You will have to do something along the lines of setting a control variable to indicate "go ahead", and then inside the keypress fnc handler, set the control variable to "pause" if it is currently "go ahead" and space is detected, but set it to "go ahead" if it is currently "pause" and space is detected. The control loop would look something like
while TheControlVariable == "pause"
pause(); %to give a chance for the KeyPressFcn handler to activate
end
  1 件のコメント
Dirk te Brake
Dirk te Brake 2024 年 2 月 9 日
The frequent use of "go ahead" confuses me, is it possible to explain it in a different way? This is what i came up with and it works but makes use of global variables.
global Action
Action = "";
% Within the animation loop
if Action == "space"
Action = "pause";
while Action ~= "space"
set(fig,'KeyPressFcn',@myfun);
pause(0.5)
end
Action = "Go ahead";
end
function myfun(~,event)
global Action
Action = event.Key;
end
I rather use something without global variables. So i made this, but it only works if you press any other key than 'space' the second time.
function myfun(~,event)
if event.Key == "space"
Action = 0;
while Action == 0
Action = waitforbuttonpress;
end
end
end
Do you have any idea's or tips on how to get rid of the global variable?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMaintain or Transition figure-Based Apps についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by