这是创建对象的位置,按下空格键时会创建一个新实例:
/* SHOOTING */
function fireRocket():void
{
if (fireHold == 0)
{
fireHold = 1;
var Timer = setInterval(fireDelay,fireRate);
function fireDelay()
{
fireHold = 0;
clearInterval(Timer);
}
if (rocketContainer.numChildren < 7)
{
trace(rocketContainer.numChildren)
var rocketGameObject = new rocketObject ;
rocketContainer.addChild(rocketGameObject);
rocketGameObject.x = spaceShip.x + 35;
rocketGameObject.y = spaceShip.y + 35;
}
else
{
trace("Too many rockets present");
}
}
}
确认命中后(通过下面的命中测试),应运行以下命令:
function hitTest(evt:Event):void
{
/* HIT TEST */
for (var i=0; i < rocketContainer.numChildren; i++)
{
for (var j=0; j < enemyContainer.numChildren; j++)
{
if (rocketContainer.getChildAt(i).hitTestObject(enemyContainer.getChildAt(j)))
{
trace(rocketContainer.getChildAt(i));
rocketContainer.getChildAt(i).removeThis();
}
}
}
}
这是用于在使用方法调用时处理对象移动和移除的类:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Sprite;
import flash.display.DisplayObject;
public class rocketClass extends MovieClip
{
public function rocketClass()
{
this.addEventListener(Event.ENTER_FRAME,rocketMove);
}
function rocketMove(evt:Event):void
{
this.x += 20;
if (this.x > stage.stageWidth)
{
removeThis();
}
}
public function removeThis():void
{
trace("reached")
this.parent.removeChild(this);
this.removeEventListener(Event.ENTER_FRAME, rocketMove);
}
}
}
现在当我确认点击中trace(rocketContainer.getChildAt(i));
时,它会返回[object rocketObject]
。所以我只能假设它成功检测到它是一个对象,这是我要删除的对象。
但是,当我想使用像rocketContainer.getChildAt(i).removeThis();
之类的方法删除它时,我收到以下错误:
1061:通过静态类型flash.display的引用调用可能未定义的方法removeThis:DisplayObject
答案 0 :(得分:0)
您需要将rocketContainer.getChildAt(i)强制转换为类rocketObject,因为getChildAt()会返回DisplayObject。它看起来像是:
(rocketContainer.getChildAt(i) as rocketClass).removeThis();
或
rocketClass(rocketContainer.getChildAt(i)).removeThis();
P.S。在AS3中,类名最好从符号大写开始。 rocketClass - &gt; RocketClass。
P.P.S。并且类名中的“class”部分是不必要的。
答案 1 :(得分:0)
重申我在评论中所说的内容以及Crabar在答案中所写的内容,你需要在使用getChildAt(int)时转换为适当的类。
Crabars的答案应该有效,而且这是一种替代方式(并没有那么多不同。),以提高可读性。
var temp:rocketClass = rocketContainer.getChildAt(i) as rocketClass;
temp.removeThis();
混淆的一点可能是:为什么hitTestObject()有效?答案是这样的:因为hitTestObject()是DisplayObject类的一个方法。