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 を使用してプログラムしています。energy.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

敵の位置のを関数に渡し、その値を変更してから、結果を破棄しています。xtweenIt

言い換えると、variableはから開始値を取得したにもかかわらず、とは異なる変数ですenemy.xenemy.x

これを修正する 1 つの方法は、パラメーターを変更して実際の敵を参照することです。

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 に答える