0

私は大学のコースでフラッシュ ゲームを作成しています。チュートリアルに従っていますが、自分のためにスピンオフしています。私がぶち当たった壁の 1 つは、弾丸を発射すると右にしか発射されず、上下に少し移動することです。しばらく修正しようとしましたが、何も起こらず、何も機能しません。

パッケージ {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;

public class Wizard extends MovieClip {

    private var dx:Number;
    private var dy:Number;
    private var Bulletspeed:int;
    public var Angle:Number;
    public var newAngle:Number;
    var shotCoolDown:int;
    const MAX_COOLDOWN=20;
    public function Wizard() {
        //constructor
        //Shot cool down
        shotCoolDown=MAX_COOLDOWN;
        addEventListener(Event.ENTER_FRAME, update);
        //set up an event listener for when the turret is added to stage
        addEventListener(Event.ADDED_TO_STAGE, initialise);




    }
    function initialise(e:Event) {
        //reduce shot cool down by one
        shotCoolDown=shotCoolDown-1;

        //add a click listener to the stage
        stage.addEventListener(MouseEvent.CLICK, fire);
    }
    function fire(m:MouseEvent) {
        //Able to shoot
        if (shotCoolDown<=0) {
            //resets cool down
            shotCoolDown=MAX_COOLDOWN;
            //spawn bullet
            var B = new Bullet();
            //set position and rotation of the bullet
            B.rotation=rotation;
            B.x=x;
            B.y=y;
            //add the bullet the the wizard
            parent.addChild(B);
        }
    }

    function update():void {
        //Shot cool down
        shotCoolDown--;
        //Make the Wizard face the mouse
        if (parent!=null) {
            dx=stage.mouseX-this.x;
            dy=stage.mouseY-this.y;
            Math.abs(dx);
            Math.abs(dy);
            var Angle=Math.atan2(dy,dx);
            var newAngle = Angle * (180 / Math.PI);

            if ((0 < newAngle) && (newAngle <= 90)) {
                gotoAndPlay("Right");
            } else if ((90 < newAngle) && (newAngle <= 180)) {
                gotoAndPlay("Down");
            } else if ((-180 < newAngle) && (newAngle <= -90)) {
                gotoAndPlay("Left");
            } else if ((-90 < newAngle) && (newAngle <= 0)) {
                gotoAndPlay("Up");
            }

            this.rotation=Angle;

        }
    }
}

}

これは、弾丸の発射などを含む、私のプレーヤー クラスのコードです。私は問題を知っていると思います。ウィザードの更新の残りの部分にリンクする必要があります。しかし、方法がわかりません。必要に応じて、ここに私の弾丸クラスがあります。

パッケージ {

import flash.display.Sprite;
import flash.events.Event;

public class Bullet extends Sprite {

    private var speed:int;
    private var myCharacter:Wizard;



    public function Bullet() {
        //constructor
        speed = 10;
        addEventListener(Event.ENTER_FRAME, update);


    }



    function update (e:Event) {
            //Move in the direction the bullet is facing
        x=x+Math.cos(rotation/180*Math.PI)*speed;
        y=y+Math.sin(rotation/180*Math.PI)*speed;
        //Clears bullet once it leaves the stage
        if (x<0 || x>500 || y<0 || y>500) {
            //removes the update listner
            removeEventListener(Event.ENTER_FRAME, update);

            parent.removeChild(this);




        }
    }
}

}

4

1 に答える 1

0

を に設定しています。Wizardこれはラジアンです。次に、回転が に渡されます。これは、その回転が度単位であると想定しています。クラスはその値を度単位で想定し、それを描画の回転に使用するため、の最後に設定することをお勧めします。rotationAngleBulletthis.rotation=newAngle;update()UIComponent

于 2012-06-22T19:20:15.480 に答える