从头开始平滑精灵运动

时间:2011-09-01 14:54:58

标签: mit-scratch

如何在Scratch中平滑动画?主要是,我想要它,当你按住右箭头时,它向右走,没有任何明显的抖动。另外,当你拿着箭头时,划痕让你等待一秒钟重复。我怎样才能解决这个问题?

7 个答案:

答案 0 :(得分:3)

我知道这是一个老问题。但是如果有人在寻找解决方案,请查看这个临时项目:http://scratch.mit.edu/projects/276298/

只需添加永久循环并在此循环内检查是否按下了箭头键。如果是 - 移动。 这样您就不会依赖键盘重复率。

答案 1 :(得分:2)

使用Scratch,您可以使用Glide长距离或间隔来获得非常平滑的动作。然而,这种方法的缺点是Glide操作必须在精灵可以进行任何感测之前完成,例如边缘或碰撞检测。这通常是不受欢迎的。

当您按键时,您所谈论的小延迟实际上与键盘的重复率直接相关。当您按下键盘上的某个键时,会发送该键事件,但在重复开始之前会有一个小的延迟。如果您能找到一种方法来改变您的系统键盘重复率,这将延续到Scratch。 / p>

在Scratch中可以进行多少优化是有限制的。毕竟,这是一个非常基本(但非常有趣)的入门级编程环境。 :)

答案 2 :(得分:2)

你可以做到“箭头未按下”

按箭头时

重复  移动(或滑行) 直到不按箭头

然后它不会按设定的间隔检查按键,使移动更平滑。

答案 3 :(得分:2)

你可以这样做:

When flag pressed
forever
  if (right arrow pressed?) then
    change xs by 1
  xs = xs * 0.8
  change x by (xs)

如果按下右箭头,则每次检查,如果是,则将变量xs更改为1。之后,它将xs乘以0.8,因此该值会逐渐衰减。

然后它通过var xs更改精灵的x。

答案 4 :(得分:1)

这是一个老歌,但又是个好东西,正如其他人所建议的那样,您需要继续检查该键是否仍在按下,并重复所需的任何操作,直到不再按下该键为止。像这样:

repeating an action until a key no longer pressed

这是因为当您按住某个键时,计算机将等待一小会儿,然后再接受您确实希望重复按该键的操作。

这是称为debouncing(或throttling)输入的概念的组合,可用于各种电子和计算。如果不这样做,那么您将无法正常运行。

答案 5 :(得分:0)

你可以做的一种方法是使用变量和自定义块来制作平滑运动的参数。添加一个名为speed x的变量,并使用速度X永久更改X.我没有任何快照或示例,但您可以使用自定义块中的脚本顺利地滑动它。

答案 6 :(得分:0)

您可以执行此操作以实现平稳的x移动:

forever
change x by (([amount] - (x position)) / [divide])

您要移动多少“数量”,而“划分”则是那么平滑。 (对y进行平滑处理)

或者您也可以平滑移动x和y:

forever
go to x: (([amount] - (x position)) / [divide]) y: (([amount] - (x position)) / [divide])

此外,您还可以使精灵平滑地向鼠标滑动:

forever
go to x: (((mouse x) - (x position)) / [divide]) y: (((mouse y) - (x position)) / [divide])
相关问题