【问题标题】:Rotating image in Andengine在 Andengine 中旋转图像
【发布时间】:2012-09-30 09:31:45
【问题描述】:

假设有错误从外部进入屏幕。为此,我们需要有 4 个坐标(StartX、StartY、TargetX、TargetY)。如何将错误旋转到适当的方向?我已经搞砸了几个小时,一直无法弄清楚这部分。所以错误进入屏幕但它没有面向正确的方向。 (四个坐标是随机数)。

我正在计算我在学校学到的线的梯度:

int deltaY = TargetY - StartY;
int deltaX = TargetX - StartX;
float gradient = (float)deltaY / (float)deltaX;

然后是旋转bug的角度:

float angle = (float) (Math.atan(gradient) * 180 / PI);

然后这里是旋转和移动修饰符:

registerEntityModifier(new RotationModifier(0.3f, 0, angle) {
    @Override
    protected void onModifierFinished(IEntity pItem) {
        super.onModifierFinished(pItem);

        registerEntityModifier(new MoveModifier(0.8f, StartX, TargetX, StartY, TargetY) {
            @Override
            protected void onModifierFinished(IEntity pItem) {
                super.onModifierFinished(pItem);
            }
        });
    }
});

解决方案更复杂,因为在一定梯度的线上,错误可能来自两个方向,因此它可以面向两个方向。 我知道 1/2 的梯度意味着 26.56 度,在 AndEngine 坐标系中它意味着 -26.56 或 -206.56 度,具体取决于错误来自哪一侧。

【问题讨论】:

    标签: android andengine


    【解决方案1】:

    试试这样的:

    float bugAngle = 180 + (float) Math.toDegrees(Math.atan2((targetY - bugSprite.getRotationCenterY() - startY), (targetX - bugSprite.getRotationCenterX() - startX)));
    bugSprite.setRotation(bugAngle);
    

    请原谅长长的死亡线。

    【讨论】:

    • 我设法用几个 if-s 做到了,但你的解决方案更简单!
    【解决方案2】:

    尝试更简单的:

    float angle = getAngle(StartX, TargetX , StartY, TargetY );
    YourSprite.setRotation((int) angle);
    

    布罗卡普:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2021-02-05
      • 2018-10-14
      • 2013-11-04
      相关资源
      最近更新 更多