用“if”语句暂停循环?

20次浏览(过去30天)
MSolano
MSolano 2021年8月31日
评论道: MSolano2021年9月2日
大家好
我使用App Designer做一个动画与while循环,我想动画暂停时,时间达到一个值(让我们说5),我使用“if”语句这样做,所以我有下面的代码
问题是当我说:if (toc(t_h)-app.PauseTime) == 5时,它什么都没有做(动画不会停止)
但如果我写:if (toc(t_h)-app.PauseTime) > 5代替它工作,但我不希望它在5.01或4.99停止,我需要它在确切的5停止
如果你们谁能给我点提示我将不胜感激。谢谢!
属性(Access = public)
PauseTime = 0;%的描述
PauseHandle = tic;
结束
%处理组件事件的回调
方法(Access = private)
按下按钮的功能:StartButton
函数StartButtonPushed(应用程序、事件)
关闭所有
集(应用程序。StartButton,“文本”“重启”
时间= 60;
集(应用程序。UIAxes,“单位”“点”
班(app.UIAxes);
班(app.UIAxes2);
R = 65;
ang = linspace(0, 2 *π,50);
xp = R * cos (ang);
yp = R * sin (ang);
%的动画
画外圆
补丁(应用程序。UIAxes,xp,yp,' w '
(应用程序。UIAxes,“上”);
(应用程序。UIAxes2,“上”);
轴(应用程序。UIAxes,“平等”);
F = 0.016;
Nb = 10;
%的球
Rho1 = 55;
n = linspace(0,360,Nb+1);
Line = plot(应用程序。UIAxes,南南“o”“线宽”, 1“MarkerSize”15岁的“颜色”“k”);
在第一个球上做记号
Mark = plot(应用程序。UIAxes,南南‘*’“线宽”, 1“MarkerSize”5,“颜色”“r”);
%固定分数
情节(应用程序。UIAxes,[55 65],[0 0],“线宽”5,“颜色”“r”);
%正弦波
%的静态
Swx = linspace(0,time,time*100);
Swy = (pi/2)*sind(360*Swx*f);
情节(应用程序。UIAxes2,Swx,Swy,“线宽”, 1“MarkerSize”, 1“颜色”“k”);
%移动点正弦波
Sw = plot(应用程序)UIAxes2,NaN,NaN,“o”“线宽”, 1“MarkerSize”5,“颜色”“r”“MarkerFaceColor”“r”);
t_h =抽搐;
app.PauseTime = 0;
(toc(t_h)-app.PauseTime) < time
%的球
t1 = toc (t_h) -app.PauseTime;
F1 = f*360;
线。XData = rho1*cosd(n+f1*t1);
线。YData = rho1*sind(n+f1*t1);
app.Time.Value = t1;
正弦波上的点
t2 = toc (t_h) -app.PauseTime;
西南。XData = t2;
西南。YData = (pi/2)*sind(360*f*t2);
%滑块
t3 = toc (t_h) -app.PauseTime;
app.Slider.Value = t3;
%马克
t4 = toc (t_h) -app.PauseTime;
F1 = f*360;
马克。XData = rho1*cosd(f1*t4);
马克。YData = rho1*sind(f1*t4);
如果(toc(t_h)-app.PauseTime) == 5
matlab.ui.eventdata.ButtonPushedData PauseButtonPushed(应用)
结束
drawnow
结束
结束
按钮按键功能:PauseButton
函数PauseButtonPushed(应用程序、事件)
app.PauseHandle = tic;
uiwait (app.animation)
结束
%按钮按下功能:恢复按钮
函数ResumeButtonPushed(应用程序、事件)
app.PauseTime = app.PauseTime + toc(app.PauseHandle);
uiresume (app.animation)
结束
1评论
Fangjun江
Fangjun江 2021年8月31日
浮点数据相等比较问题?
1又1/3 = = 2/3

登录评论。

接受的答案

cr
cr 2021年9月1日
你必须给它一个时间段范围,而不是一个唯一的时间点,因为执行不能保证特定的行toc()将在t = 5s执行。如果你只需要停一次,试着缩短停药时间。
1评论
MSolano
MSolano 2021年9月2日
谢谢你!就是这样

登录评论。

更多答案(0)

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!