1
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 这样的事情时,它可以工作,但是当我尝试使用我的补间脚本时,无论鼠标的位置如何,敌人都会静止不动。谢谢你,布洛布斯塔

4

3 回答 3

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给予了肯定,因为这是我学习如何做到这一点的地方。

于 2011-10-01T16:54:46.557 回答
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;
    }

    // ...
}
于 2011-10-01T16:47:43.617 回答
0

所以,补充卡梅伦的答案

您可以制作更通用的函数来更改变量。我将在下面演示一个小例子

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

上面的函数将更新你想要的变量的当前值,所以如果你输入以下内容:

tweenIt(enemy, "width", 200);

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

于 2011-10-01T19:07:20.157 回答