嘿伙计们,所以我正在开发一个游戏,我有一个数组,可以跟踪我的5个影片剪辑,这些剪辑是由阵列添加到舞台上的。我有一个播放器影片剪辑,所以播放器影片剪辑是Hittesting,所有5个钻石影片剪辑都添加到舞台上,如下所示:
private var nPoints:Number = 5;..........
public function addPointsToStage():void
{
for (var i = 0; i < nPoints; i++)
{
trace(aPointsArray.length);
points = new mcGainPoints();
stage.addChild(points);
points.x = startPoint.x + (xSpacing * i);
points.y = startPoint.y - (ySpacing * i);
aPointsArray.push(points);
}
}
现在,当玩家接触到所有5个影片剪辑时,一切正常,阵列的输出如下:
0
1
2
3
4
然后它继续下一个级别。
但是说我的播放器没有击中5个影片剪辑中的任何一个,或只触及其中几个,当下一个级别启动时,输出如下所示: 五 6 7 8 9
当下一个级别开始时奇怪的事情开始发生,比如点开始自己添加到高分。
我认为问题是我没有破坏正确保存5个影片剪辑的数组这是我用来启动下一个级别并破坏数组的代码:
if(player.hitTestObject(mcGoal_1))
{
//Remove all points from array/stage
for (var i:int = 0; i < aPointsArray.length; i++)
{
if (aPointsArray[i].parent)
{
parent.removeChild(aPointsArray[i]);
}
startNextLevel();
}
mcGoal_1是游戏的对象,因此如果玩家击中goal_1,则销毁屏幕上的所有数组对象并开始下一级别。这是startnextlevel函数。
private function startNextLevel():void
{
//add points to next stage
addPointsToStage();
}
那么你能看出为什么当下一个级别开始时阵列没有重置回01234吗?我认为这就是为什么游戏有随机添加点的错误。如有任何帮助,将不胜感激
答案 0 :(得分:0)
看起来你没有从数组中删除任何内容。
您可以使用.indexOf()
和.splice()
的组合来删除数组中的项目:
function removeMc(clip:MovieClip):void
{
if(clip.parent) clip.parent.removeChild(clip);
// Also remove from array.
var index:int = aPointsArray.indexOf(clip);
aPointsArray.splice(index, 1);
}
当你startNextLevel()
:
private function startNextLevel():void
{
aPointsArray.length = 0;
//add points to next stage
addPointsToStage();
}
答案 1 :(得分:0)
//Remove all points from array/stage
for (var i:int = 0; i < aPointsArray.length; i++)
if (aPointsArray[i].parent)
parent.removeChild(aPointsArray[i]);
// just one statement, no braces
aPointsArray.length=0; // clear the array itself, not just
// points from display list!
startNextLevel(); // now start level
正确陈述的错误顺序会导致灾难。始终检查您的代码流程,现在执行的内容以及执行的内容以及执行的次数。
答案 2 :(得分:0)
只需将数组指定为空值即可。这样,只要你需要,数组就会从头开始。我希望以下代码可以帮助您。
var nPoints:Number = 5;
var points:poin;
var aPointsArray:Array;
var startPoint:Number = 0;
var xSpacing:Number = 20;
var ySpacing:Number = 20;
addPointsToStage();
function addPointsToStage():void
{
aPointsArray = null;
aPointsArray = new Array();
for (var i:int = 0; i < 6; i++)
{
trace(aPointsArray.length);
points = new poin();
addChild(points);
points.x = 100+ (xSpacing * i);
points.y = 200 - (ySpacing * i);
aPointsArray.push(points);
}
}