在光标Flash AS3上射击子弹

时间:2013-05-28 22:20:03

标签: actionscript-3

我正在使用AS3在闪光灯中制作一个自上而下的射击游戏,我在从WASD键移动到光标的船上发射子弹时遇到了一些麻烦。子弹创建得足够精细,但它们会随机向下移动,而不是在按空格时光标所在的位置。

这是子弹类的代码:

package{
import flash.display.MovieClip;
import flash.events.Event;
import flash.ui.Mouse;
import flash.events.MouseEvent;
import flash.geom.Point;

public class Bullet extends MovieClip
{
    var speed:Number;
    var moveX:Number;
    var moveY:Number;
    var shipX:Number;
    var shipY:Number;

    function Bullet(target:Ship)
    {
        speed = 20;
        shipX = target.x;
        shipY = target.y;

        graphics.lineStyle(7,0x000000);
        graphics.moveTo(-2,0);
        graphics.lineTo(2,0);

        graphics.lineStyle(3,0xffffff);
        graphics.moveTo(-2,0);
        graphics.lineTo(2,0);

        addEventListener(Event.ADDED_TO_STAGE, onStage);

    }

    function onStage (e:Event)
    {
        /*addEventListener("enterFrame", enterFrame);

        /*var mc = 
        var angleRadian = Math.atan2(mouseY - mc.y, mouseX - mc.x);
        var angleDegree = angleRadian * 180 / Math.PI;
        mc.rotation = angleDegree;*/

        /*Ship.y += speed * Math.sin((Ship.rotation - 90) * (Math.PI / 180));
        Ship.x += speed * Math.cos((Ship.rotation - 90) * (Math.PI / 180));*/



        trace(stage.mouseY);
        var cy:Number = stage.mouseY - shipY;
        var cx:Number = stage.mouseX - shipX;

        moveX = cx / cy;
        moveY = (cy < 0) ? -1 : 1;
        var Radians:Number = Math.atan2(cy,cx);
        var Degrees:Number = Radians * 180 / Math.PI;*/
    }
    function enterFrame(e:Event)
    {
        /*this.x += speed;*/

        this.x += moveX * speed;
        this.y += moveY * speed;



        if (this.x > 900)
        {
            removeEventListener("enterFrame",enterFrame);
            stage.removeChild(this);
        }
        if (this.x < 0)
        {
            removeEventListener("enterFrame",enterFrame);
            stage.removeChild(this);
        }
        if (this.y > 800)
        {
            removeEventListener("enterFrame",enterFrame);
            stage.removeChild(this);
        }
        if (this.y < 0)
        {
            removeEventListener("enterFrame",enterFrame);
            stage.removeChild(this);
        }

        for(var i in Enemy.list)
            {
                if(this.hitTestObject(Enemy.list[i]))
                {
                    removeEventListener("enterFrame", enterFrame);
                    stage.removeChild(this);
                    Enemy.list[i].kill();
                    break;
                }
            }
    }
}

}

任何帮助让子弹正常射击的帮助都会非常感激!

1 个答案:

答案 0 :(得分:2)

x和y速度应分别是角度的cos和sin的结果(以弧度表示)。

var angle:Number = Math.atan2(cy, cx);
moveX = Math.cos(angle);
moveY = Math.sin(angle);

然后你将这两个乘以速度(你已经在做)。

此外,除非您想旋转图形,否则无需计算度数:

rotation = angle * 180 / Math.PI;