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 以接受xPos
和 yPos
,然后将我的 spawnPos()
函数移至敌人类,并在其构造函数中调用该函数。现在它可以正常工作了......谢谢你们!没有你,我无法做到,向你们两个竖起大拇指:)
【参考方案1】:
也许你错过了 Enemy 课程。使用 3 个参数创建一个 Enemy 类。然后在 this.stage.addChild(enemy);
行之后,您必须添加:
enemy.x = enemy.xPos;
enemy.y = enemy.yPos;
我正在考虑 Enemy 类扩展 Sprite
或 MovieClip
类和 xPos
和 yPos
有一个 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
如果要存储对象的位置,则不必使用xPos
或yPos
。 Sprite 和 Movieclip 有 x
和 y
。 “不要重新创建***”;)
【讨论】:
抱歉,我不太清楚您所说的get/set
是什么意思?我对 AS3 没有太多经验。
关于getter和setter:link
啊,我想我明白getter/setter
的意思了。好吧,我不是想获得我只想设置它们的坐标,以便将影片剪辑放置在那里。我有一个函数可以随机生成坐标并将结果放入两个变量xPos
和yPos
,因为我将在舞台上放置一组enemy
moiveclips,它会不断变化,这就是我认为的原因我应该把它放在一个变量中。
您是否创建了Enemy
类?还有@Fygo 建议的敌人变量?
我相信它已经解决了!我将敌人设为 var,然后在敌人类中为其设置 args 以接受 xPos
和 yPos
,然后将我的 spawnPos()
函数移动到敌人类并在它的构造函数中调用该函数。现在它可以正常工作了......谢谢你们!没有你,我无法做到,向你们两个竖起大拇指:)【参考方案2】:
已修复并正常工作
对 Main.as 和 Enemy.as 进行了如下小的更改:
Main.as
这里所做的更改是对定义敌人的声明。原来是
enemy = new Enemy(stage, xPos, yPos);
我删除了 stage
参数,但保留了两个变量 xPos
和 yPos
并将其设为变量。
var 敌人:Enemy = new Enemy(xPos, yPos);
我还删除了我调用 spawnPos()
函数的位置。
Enemy.as
我将 spawnPos()
函数从 Main.as 移到此处并在构造函数代码中调用它,因此它仅在 enemy
变量为时运行。
然后我修改了类定义并添加了我想要传递的参数
公共函数 Enemy(xPos : Number, yPos : Number)
【讨论】:
以上是关于AS3 - 将影片剪辑放置在指定坐标的主要内容,如果未能解决你的问题,请参考以下文章