公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+3 投票
1.2k 浏览
Clear["Global`*"]
i = 0; j = 0;
signal = False;
count = 0;
f[x_] := Graphics[{Circle[{0, 0}, 2], Circle[{x, 0}, 1]}];
nb = CreateDialog[
  DynamicModule[{}, Dynamic@(If[signal, count = Clock[{0, Infinity}]];
     If[count >= 5, count = 5; 
      signal = False]; {If[5 > count > 0, f[j = j + 0.01], f[j]], 
      signal, count, j})], WindowSize -> Medium]

SetOptions[nb, 
 NotebookEventActions -> {"MouseUp" :> (signal = True; count = 0)}]
(*鼠标抬起信号为signal,当抬起时signal为真,计时器count归0,然后动态监测 signal,因为抬起后signal保持为真,故
count在每次更新会变为Clock[{0,Infinity}]\
的一个值,然后接下来监测count,当计数器值大于5,让计数器保持为5,同时计时满了让signal重新归为False,\
故在计时未满期间,count会大于0小于5,然后这时画f[j=j+0.01]画出个流畅的运动,并且当count不满足在(0,5)区间的话j=\
j,只画f[j]*)
(*我想说的是为什么第2次再抬起鼠标没有用啊,我明明都让计数器归0了*)
(*我不是想做gif...,这里我想每次松开鼠标就是类似球发射出去,然后一段时间受到阻力停下来到新的位置,然后再点击松开鼠标,球在新的位置被踢出去*)
(*现在再次按松开鼠标没有用,我明明让count归0了,实在不知道怎么办*)

 

分类:动态交互 | 用户: online (261 分)
修改于 用户:online
好难,调了半天,一定要靠鼠标吗?换个按钮行不
啊,可是我接下的设计就是需要和鼠标配合啊

2 个回答

+1 投票
 
已采纳

我在某种程度上解决了这个问题,但是还是觉得有一些没搞清的地方,觉得别扭呢?

 

Clear["Global`*"];
i=0;j=0;
signal=False;
count=0;
s=AbsoluteTime[];
f[x_]:=Graphics[{Circle[{0,0},2],Circle[{x,0},1]}];

nb=CreateDialog[DynamicModule[{},
Dynamic[
count=AbsoluteTime[]-s;
If[signal&&0<count<5,{f[j=j+0.01],signal,count,j},j=0;{f[j],signal,count,j}]]],WindowSize->Medium]

SetOptions[nb,NotebookEventActions->{"MouseUp":>(signal=True),"MouseDown":>(signal=False;s=AbsoluteTime[])}]

 

用户: flumer (161 分)
采纳于 用户:online
我不知道怎么在评论里写代码,没有那个<>,我参照你的代码改了下,好像是出来了,但是有时候不太灵敏,再按,有时候没反应,这是为啥
我已经修改了解答,你可以再看一下。卡得原因我觉得是count=0;这个地方。但是自己觉得模模糊糊的
+1 投票
Clear["Global`*"];
i = 0; j = 0;
signal = False;
count = 0;
f[x_] := Graphics[{Circle[{0, 0}, 2], Circle[{x, 0}, 1]}];
nb = CreateDialog[DynamicModule[{}, Dynamic[count = Clock[{0, 5}];
    If[signal, {If[count < 3, f[j = j + 0.01], signal = False; f[j]], 
      signal, count, j}, j = j; {f[j], signal, count, j}]]], 
  WindowSize -> Medium]
SetOptions[nb, 
 NotebookEventActions -> {"MouseUp" :> (signal = True; count = 0), 
   "MouseDown" :> (signal = False; count = 0)}]
   (*我用上面那位朋友的改了下,似乎出来了,但感觉有时候还不太灵敏,有时候再按鼠标不起作用*)

 

用户: online (261 分)
修改于 用户:野鹤
我的答案经过了修改,请看
nice,你写的简直太好了,完美的解决了问题
道理还没搞清,希望还能有人解答一下
...