【发布时间】:2014-07-29 12:02:58
【问题描述】:
这是创建对象的地方,按下空格键时会创建一个新实例:
/* 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:DisplayObject 的引用调用可能未定义的方法 removeThis
【问题讨论】:
-
getChildAt(int n) 返回 DisplayObject 类型的 Object,而不是 RocketClass。在调用该函数之前,创建一个 Rocketclass 类型的临时变量并将 getchildat() 传递给 Rocketclass。
标签: actionscript-3 flash methods