子弹只会向右射击?

时间:2012-06-22 17:58:06

标签: actionscript-3

我在大学里为我的课程制作了一个Flash游戏,我一直在关注一个教程,但为了自己的缘故,我一直在关注它。我击中的一面墙是,当我发射子弹时,它只向右侧射击,向上或向下移动一点点,我一直试图修复它一段时间但没有任何事情发生,也没有任何作用。

包{

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);




        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

您将Wizard的{​​{1}}设置为rotation,以弧度为单位;然后将旋转传递给Angle,它期望旋转为度。最好在Bullet的末尾设置this.rotation=newAngle;,因为update()类需要以度为单位的值并使用它来旋转其绘图。