1

我正在使用 Flashdevelop 在 Haxe NME 中设计游戏。我在屏幕上有一个对象,我希望它随着鼠标移动而旋转以跟随鼠标。我让对象以与鼠标相同的速度旋转,但它并不指向鼠标。就像我的鼠标移动时屏幕上有一个幻影鼠标一样移动。

这是每当鼠标改变位置时调用的代码:

public function mouseProcess(e:MouseEvent) 
{
    var Xdistance:Float = e.localX - survivor.x;
    var Ydistance:Float = e.localY - survivor.y;
    survivor.rotation = Math.atan2(Ydistance, Xdistance) * 180 / Math.PI;
}

e.localX/Y获取鼠标和幸存者的当前 x,y 位置。x/y 获取需要旋转的对象的 x,y 位置。

谢谢

4

2 回答 2

1

我不确定这在 NME 中是否有所不同,但 FlashMath.atan2()给出的值从 0 开始指向左侧(负 x),而显示对象从 0 开始指向上方,那么简单地添加+ 90到您的角度有帮助吗?

于 2013-01-18T13:55:49.277 回答
1

我找不到你的方法有什么问题。我(几乎)逐字使用它和以下代码来设置一个在我移动鼠标时跟踪鼠标的精灵。也许看看我写的内容,看看它是否与您拥有的代码不同。如果做不到这一点,也许会发布更多你所做的事情?

// Creates the sprite that will visually track the mouse.
private function CreateSurvivor() : Sprite
{
    // Create a green square with a white "turret".
    var shape = new Shape();
    shape.graphics.beginFill(0x00FF00);
    shape.graphics.drawRect(0, 0, 100, 100);
    shape.graphics.beginFill(0xFFFFFF);        
    shape.graphics.drawRect(50, 45, 50, 10);
    shape.graphics.endFill();

    // Center the square within its outer container.  Allows it to spin 
    // around its center point.
    shape.x = -50;
    shape.y = -50;

    var survivor = new Sprite();
    survivor.addChild(shape);

    return survivor;
}

init 方法只是创建幸存者并将其附加到显示列表中。

private function init(e) 
{
    m_survivor = CreateSurvivor();
    m_survivor.x = 300;
    m_survivor.y = 200;

    addChild(m_survivor);

    stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseProcess);
}

最后,您的原始方法:

public function mouseProcess(e:MouseEvent) : Void
{
    var Xdistance:Float = e.localX - m_survivor.x;
    var Ydistance:Float = e.localY - m_survivor.y;
    m_survivor.rotation = Math.atan2(Ydistance, Xdistance) * 180 / Math.PI;
}

希望这可以帮助。

于 2013-01-18T10:00:47.653 回答