我正在Flash中创建一个水平平台游戏,我尝试创建一个函数来删除包含可能崩溃的障碍的MovieClip,然后再添加整个地图,制作一种重新启动。
blockArr包含一半的障碍。
flameArr包含另一半。
这些数组填充在Map1函数中。
功能:
function removeBlocks(TimerEvent):void{
for (var t:int = 0; t < blockArr.length; t++){
if(blockArr[t] == null){
blockArr = [];
}
if(blockArr[t] != null){
if(contains(blockArr[t])){
blockArr[t].parent.removeChild(blockArr[t]);
blockArr[t] = null;
}
}
if(flameArr[t] == null){
flameArr[t] = [];
}
if(flameArr[t] != null){
if(contains(flameArr[t])){
flameArr[t].parent.removeChild(flameArr[t]);
flameArr[t] = null;
}
}
trace(blockArr);
if(blockArr == []){
Map1();
removeMapTimer.stop();
blockMoveTimer.start();
}
}
}
但是,此代码返回此错误:
TypeError:错误#1034:类型强制失败:无法将[] @ 2754c641转换为flash.display.DisplayObject。
在ImpGameWork14_fla :: MainTimeline / removeBlocks()[ImpGameWork14_fla.MainTimeline :: frame2:98]
在flash.utils :: Timer / _timerDispatch()
在flash.utils :: Timer / tick()
此代码的目的是删除和删除这些数组的内容,因为这是障碍/地图。之后,它将检查主要障碍物阵列是否为空if(blockArr == [])
,如果是,则部署Map1功能,这会增加阵列和阶段(addChild(障碍物))的障碍。关于如何实现这一目标的任何帮助?
答案 0 :(得分:0)
在这里发表评论可能的解决方案:
public function Reset(ev:TimerEvent):void
{
//Remove the Blocks
removeBlocks();
reloadMap();
}
private function removeBlocks():void
{
//Cycle each block
for each(var block : DisplayObject in blockArr)
{
//If it is in the DisplayList
if(this.contains(block))
this.removeChild(block); //Remove it
}
//Clear the Array
blockArr.length = 0;
}
private function reloadMap():void
{
Map1();
removeMapTimer.stop();
blockMoveTimer.start();
}
关于代码中的错误#1034,编译器只是告诉你“contains(DisplayObject)”需要一个DisplayObject,而“blockArr [i]”的类型是Object。 要删除错误,解决方案是告诉编译器blockArr [i]的类型是DisplayObject(类型转换):
this.contains(blockArr[i] as DisplayObject);