ActionScript 3.0
我得到了这个bullet_array。 每当我按下空格键时它就会弹出新的子弹。 这是“for loop”,只有当我按下空格键时才有效。 但我希望子弹不断移动。
public function update(evt:Event = null)
{
stage.focus = stage;
//fire = true is set by spacebar
if (fire == true)
{
var snowball:MovieClip = new Snowball;
snowball.x = (mcPlayer.x);
snowball.y = (mcPlayer.y - 5);
snowballArray.push(snowball);
SBAlength = +1; //stands for snowballArray's length
addChild(snowball);
fire = false;
}
for (var i = SBAlength - 1; i >= 0; i--)
{
snowballArray[i].y -= snowballSpd; //snowballSpd is already declared as 5
for (var j = snowmanArray.length - 1; j>=0; j--)
{
for (var k = numberArray.length -1; k>0; k--)
{
if (snowballArray[i].hitTestObject(snowmanArray[j]))
{
if (snowmanArray[j].hitTestObject(numberArray[k]))
{
bosslife -= numberArray[k];
numberArray[k].splice(k,1);
}
snowballArray[i].gotoAndPlay("hit");
snowmanArray[j].splice(j,1);
break;
}
if(numberArray[k] >= 0)
{
numberArray[k].splice(k,1);
randomNo= Math.floor(Math.random()*(max-min+1))+min;
numberArray[k].push(randomNo);
}
snowmanArray[j].txtNumber.text = numberArray[j];
}
}
答案 0 :(得分:0)
这里可能还有其他问题,但是:
维护数组长度
SBAlength = +1; // Sets your length to 1
改为使用:
SBAlength += 1; // Increases your length by 1
但实际上,您可以在循环中使用数组的length
属性,而不是维护SBALength
(并且由于某些未来的代码而冒着失去同步的风险):
for (var i = snowballArray.length - 1; i >= 0; i--)
操纵数组
另外(不要认为这与你的问题有关,但肯定会导致错误),在你的内循环中,你经常做这样的事情:
snowmanArray[j].splice(j,1);
numberArray[k].push(randomNo);
// etc.
仅当numberArray
和snowmanArray
中的项目本身就是数组时才会起作用 - 不确定它们是否是,但似乎不是这样,因为您还将这些项目用作数字:
bosslife -= numberArray[k];
第一个声明是要求从 snowmanArray[j]
中存储的数组中删除项 - 而不是从snowmanArray
本身删除项目。如果您要从snowmanArray
中删除某个项目,则需要执行snowmanArray.splice(j, 1)
。
以同样的方式,要将项目添加到numberArray
,您需要numberArray.push(randomNo)
,而不是numberArray[k].push(randomNo)
。
在循环内操作数组等。
没关系,例如在迭代该数组时删除当前数组项 - 但只要你按照自己的方式执行,从结束开始然后向后移动。然而...
在雪人被击中之后(或者更确切地说,打算这样做):
snowmanArray.splice(j,1);
......你后来做了:
snowmanArray[j].txtNumber.text = numberArray[j];
即。你从数组中删除雪人,但稍后,你尝试获取刚刚删除的数组项。在解决问题之前,您需要确保snowmanArray[j]
仍然存在。
数组项类型
您主要使用numberArray
作为int
(或Number
)的数组。除此之外:
snowmanArray[j].hitTestObject(numberArray[k])
您无法针对int
/ Number
点击TestObject。不确定该行应该做什么,但您测试的对象需要是DisplayObject
(例如MovieClip
)。
答案 1 :(得分:0)