【问题标题】:PixiJS Random Rotation & Declining SpeedPixiJS 随机旋转和下降速度
【发布时间】:2019-10-02 23:15:20
【问题描述】:

我正在尝试基于角度属性进行简单的随机“旋转”,并希望实现以下目标。

  • 随机旋转,说“旋转”到 500 度
  • 以高速启动,当接近“旋转”度数时,降低“旋转”速度,以免立即停止。

我在此链接上提出了我要实现的基本概念: https://www.pixiplayground.com/#/edit/yalRPEN~6tg3seIHq5hbI

在动画函数中,如果我把 let degree = 2000;作为一个 Math.Random 值,它会破坏动画,因为这个动画函数似乎被多次调用?

另外,我尝试使用 speed 属性,它会以较高的值开始并随着“旋转”而开始变低,但它似乎什么也没做?也尝试使用animationSpeed,因为我使用角度属性来改变度数,但我看不到速度差异。

我们将不胜感激。

谢谢

【问题讨论】:

  • 试试bunny.angle += Math.max(-10, Math.min(10, (degrees - bunny.angle) * .01));
  • 感谢 Thomas,这很有道理,但下面 Afron 的建议更容易理解。你知道如何确定动画/旋转何时结束吗?

标签: javascript pixi.js


【解决方案1】:

一种方法是改变角度而不是速度。像这样的:

var angleStep = 40;
let rotateSpeed = Math.floor(Math.random() * 300)

function animate() {
    bunny.angle += angleStep;

    angleStep = angleStep - angleStep/rotateSpeed;

    if ((angleStep.toFixed(1) <= 0.0)) {
        console.log("stopped rotation")
        bunny.angle = bunny.angle;
        return bunny.angle;
    } else {
        requestAnimationFrame(animate);
    }
}

【讨论】:

  • 感谢 Afron,这使它易于理解。我现在正在努力解决的一件事是确定“旋转”角度何时完成?我做了一个 if 语句来检查 angleStep 是否小于 0,但它没有被击中,并且据我所见,它一直为负值。旋转结束后,我可以通过什么方式调用函数/执行一些逻辑?
  • 问题是您正在检查角度是否为 0.0 (angleStep
  • 是的,我明白了,抱歉,我的信息没有说清楚。根据您的建议实施 if 语句仍然会使 if 语句多次命中..可能会命中 400 次。我试图理解/识别的是停止旋转并在旋转后执行逻辑/代码的正确方法。是通过实际实现我提到的 if 语句来检查动画是否完成的正确方法,还是有更好的方法?
  • 嗯,一种方法是在满足条件后停止调用 requestAnimationFrame。我会编辑我的答案,让你明白我的意思,否则我只会让解释变得复杂!
  • 感谢 Afron 的帮助
猜你喜欢
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2021-02-20
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多