AS3 - 将影片剪辑放置在指定的坐标处

时间:2014-01-02 17:54:13

标签: actionscript-3 flash movieclip stage

我正在制作一个自上而下的射击游戏作为大学作业的项目,我没有多少时间可以完成。

我试图让敌人的电影剪辑在舞台上产生,我已经设置了一个函数为x和y位置创建一个随机数,然后将每个存储在一个var中,但是我不能使用这两个var& #39; s为坐标,我得到3个错误:

Main.as, Line 33 1120: Access of undefined property enemy.

Main.as, Line 33 1137: Incorrect number of arguments. Expected no more than 0.

Main.as, Line 34 1120: Access of undefined property enemy.

第33-34行来自Main.as的代码:

enemy = new Enemy(stage, xPos, yPos);
this.stage.addChild(enemy);

分别在第18行和第19行创建的xPos和yPos变量:

public var xPos:Number;
public var yPos:Number;

xPos和yPos在函数spawnPos中给出值:

public function spawnPos()
    {
        var a:Number = Math.round(Math.random()*5);
        var aNum:Number;

        if (a <= 3)
        {
            aNum = Math.ceil(Math.random()*20) + 640;
            xPos = aNum;
            aNum = Math.ceil(Math.random()*20) + 480;
            yPos = aNum;


        }
        else if (a >= 2)
        {
            aNum = Math.ceil(Math.random()*-20) + 0;
            xPos = aNum;
            aNum = Math.ceil(Math.random()*-20) + 0;
            yPos = aNum;
        }
    }

并且在创建敌人之前声明spawnPos函数在第32行运行:

spawnPos();

非常感谢帮助,非常感谢并希望所有人都有一个新的一年的良好开端。 :)

2 个答案:

答案 0 :(得分:0)

也许你错过了Enemy课程。使用3个参数创建一个Enemy类。然后在this.stage.addChild(enemy);行之后你必须添加:

enemy.x = enemy.xPos;
enemy.y = enemy.yPos;

我正在考虑敌人类扩展SpriteMovieClip类,xPosyPosget/set

修改

class Enemy extends Sprite 
{
    private var _xPos:Number;
    private var _yPos:Number;

    public function Enemy(/*your params here*/)
    {
        //your code here
    }

    //xPos setter
    public function set xPos(value:Number):void 
    {
        this._xPos = value;
    }

    //xPos getter
    public function get xPos():Number
    {
        return this._xPos;
    }

    //yPos setter
    public function set yPos(value:Number):void 
    {
        this._yPos = value;
    }

    //yPos getter
    public function get yPos():Number
    {
        return this._yPos;
    }
}

编辑2

如果您想存储对象的位置,则不必使用xPosyPos。 Sprite和Movieclip有xy。 “不要重新创建轮子”;)

答案 1 :(得分:0)

已修复并正常工作

Main.as和Enemy.as的变化如下:


<强> Main.as

这里所做的改变是定义敌人的声明。这是

  

敌人=新敌人(阶段,xPos,yPos);

我删除了stage参数但保留了两个变量xPosyPos并将其变为变量。

  

变种敌人:敌人=新敌人(xPos,yPos);

我还删除了我调用spawnPos()函数的位置。


<强> Enemy.as

我将spawnPos()函数从Main.as移动到此处,并在构造函数代码中调用它,因此它仅在enemy变量为的时运行。

然后我修改了类定义并添加了我想要传递的参数

  

public function Enemy(xPos:Number,yPos:Number)