AS3让敌人朝着鼠标移动

时间:2011-10-01 16:26:31

标签: flash actionscript-3 mouse flashdevelop enterframeevent

package {

import enemies.Enemy;
import flash.display.Sprite;
import flash.events.*;

public class Main extends Sprite {

    // a place to store the enemy
    public var enemy:Enemy;

    private function handleEnterFrame(e:Event):void {
        tweenIt(enemy.x, mouseX, 2);
    }

    private function tweenIt(variable:Number, target:Number, speed:Number):void{
        if (variable < target) {
            variable += speed;
        }

        if (variable > target) {
            variable -= speed;
        }
    }

    // this is the first code that is run in our application
    public function Main():void {

        addEventListener(Event.ENTER_FRAME, handleEnterFrame);
        // we create the enemy and store him in our variable
        enemy = new Enemy();

        // we add the enemy to the stage 
        addChild(enemy)

        enemy.x = Math.random() * stage.stageWidth;
        enemy.y = Math.random() * stage.stageHeight;

    }

}

}

敌人类有一个位图嵌入其中。我正在使用FlashDevelop进行编程。当我做像enemy.x + = 1这样的东西时,它可以工作,但是当我尝试使用我的补间时,无论鼠标的位置是什么,它都会让敌人站立不动。 谢谢, Blobstah

3 个答案:

答案 0 :(得分:3)

我不是AS3开发人员,所以如果您的代码出现任何问题我无法帮助您,但如果您不确定如何以数学方式将敌人移向鼠标,那么就是这样。 (这不是代码,只是你想要计算的一般要点。我相信你可以把它转换成AS3。)

首先,找到敌人和你的鼠标之间的距离。

xDistance = enemyPositionX - mousePositionX;
yDistance = enemyPositionY - mousePositionY;

然后,找到将敌人指向鼠标所需的旋转。

rotation = atan2(yDistance, xDistance);

最后,这里是你想要放在你的tweenIt函数中以将敌人移向鼠标(每个函数调用3个像素)。

enemyPositionX -= 3 * cos(rotation);
enemyPositionY -= 3 * sin(rotation);

那应该是它!我赞扬Be Recursive,因为这是我学会如何做到的地方。

答案 1 :(得分:1)

您将敌人的x位置的传递给您的tweenIt函数,更改该值,然后将结果丢弃。

换句话说,variable是一个不同的变量而不是enemy.x,即使它从enemy.x得到了它的起始值。

解决此问题的一种方法是将参数更改为实际敌人的参考:

private function handleEnterFrame(e:Event):void {
    tweenIt(enemy, mouseX, 2);
}

private function tweenIt(anEnemy:Enemy, target:Number, speed:Number):void{
    if (anEnemy.x < target) {
        anEnemy.x += speed;
    }

    // ...
}

答案 2 :(得分:0)

所以,要添加Cameron的答案

你可以做一个更通用的功能来改变变量。我将在下面演示一个小例子

private function tweenIt(anEnemy:Enemy, variableName:String, value:Number):void
{
    anEnemy[variableName] = value;
}

上述函数将更新所需变量的当前值,因此如果要键入以下内容:

tweenIt(enemy, "width", 200);

这会将敌人对象的宽度更新为200 :)这应该可以解决问题:)