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

Posted

技术标签:

【中文标题】AS3 - 将影片剪辑放置在指定坐标【英文标题】:AS3 - Placing movie clip at specified coordinates 【发布时间】:2014-01-20 05:53:11 【问题描述】:

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

我正在尝试让敌人的动画片段在舞台上生成,我已经设置了一个函数来为 x 和 y 位置创建一个随机数,然后将每个数字存储在一个 var 中,但是我不能使用这两个 var坐标,我得到 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.

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

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

非常感谢您的帮助,非常感谢,并希望大家在新的一年有一个美好的开始。 :)

【问题讨论】:

1 - 你可能没有声明敌人变量。 2 - 你的 Enemy 构造函数接受多少个参数? 1 - 我以为第 33 行将敌人声明为 var? 2 - 这个问题没有多大意义,因为我并不真正了解 AS3,但我们必须在其中制作游戏(我的讲师如何期望我不知道),但我可以告诉你敌人。因为类的构造函数是完全空的。 1.好吧,在第 33 行你写了enemy = new Enemy(...); => 在 as3 中你总是需要使用 'var' 关键字,因此它会抛出错误。它应该是 'var 敌人:敌人 = 新敌人(...);'。我也强烈建议您将实例添加到舞台。始终将它们添加到您的舞台所有者(主时间线或文档类)。 2. 构造函数是空的,但是你正在创建一个实例并传入值 => 删除它们: varenemy:Enemy = new Enemy(); 我相信它已经解决了!我已将敌人设为 var,然后在敌人类中为其设置 args 以接受 xPosyPos,然后将我的 spawnPos() 函数移至敌人类,并在其构造函数中调用该函数。现在它可以正常工作了......谢谢你们!没有你,我无法做到,向你们两个竖起大拇指:) 【参考方案1】:

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

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

我正在考虑 Enemy 类扩展 SpriteMovieClip 类和 xPosyPos 有一个 get/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。 “不要重新创建***”;)

【讨论】:

抱歉,我不太清楚您所说的get/set 是什么意思?我对 AS3 没有太多经验。 关于getter和setter:link 啊,我想我明白getter/setter 的意思了。好吧,我不是想获得我只想设置它们的坐标,以便将影片剪辑放置在那里。我有一个函数可以随机生成坐标并将结果放入两个变量xPosyPos,因为我将在舞台上放置一组enemy moiveclips,它会不断变化,这就是我认为的原因我应该把它放在一个变量中。 您是否创建了Enemy 类?还有@Fygo 建议的敌人变量? 我相信它已经解决了!我将敌人设为 var,然后在敌人类中为其设置 args 以接受 xPosyPos,然后将我的 spawnPos() 函数移动到敌人类并在它的构造函数中调用该函数。现在它可以正常工作了......谢谢你们!没有你,我无法做到,向你们两个竖起大拇指:)【参考方案2】:

已修复并正常工作

对 Main.as 和 Enemy.as 进行了如下小的更改:


Main.as

这里所做的更改是对定义敌人的声明。原来是

enemy = new Enemy(stage, xPos, yPos);

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

var 敌人:Enemy = new Enemy(xPos, yPos);

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


Enemy.as

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

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

公共函数 Enemy(xPos : Number, yPos : Number)


【讨论】:

以上是关于AS3 - 将影片剪辑放置在指定坐标的主要内容,如果未能解决你的问题,请参考以下文章

影片剪辑中的 As3 Flash 按钮

AS3 影片剪辑中心旋转和左上角 X、Y 点

用flash as3语言如何将影片剪辑存入一个数组以及如何访问?

AS3 多个(影片剪辑按钮)为一个影片剪辑设置动画

完成播放后停止影片剪辑的 AS3 按钮

如何使用 as3 同时访问所有影片剪辑(以及影片剪辑中的影片剪辑......)?