简体   繁体   English

是否可以在as3中重新加载或重置阵列?

[英]Is it possible to reload or reset an array in as3?

I'm wondering if it is possible to reset / reload / reconstruct an array order? 我想知道是否可以重置/重新加载/重建数组顺序?

I'm making this "Space Invaders" game and the enemy's need to restart to it's position when the game is being restarted. 我正在制作这款“太空侵略者”游戏,当游戏重新启动时,敌人需要重新启动到它的位置。 When I shoot down the enemy's and reset my game, the enemy's I've killed keep being gone. 当我击落敌人并重置我的游戏时,我杀死的敌人的人就消失了。

So here's some of the code responsible: 所以这是一些负责的代码:

var spiderArray:Array = new Array(enemyField.enemy1,enemyField.enemy2,
                             enemyField.enemy3,enemyField.enemy4,
                             enemyField.enemy5,enemyField.enemy6,
                             enemyField.enemy7,enemyField.enemy8,
                             enemyField.enemy9,enemyField.enemy10,
                             enemyField.enemy11,enemyField.enemy12,
                             enemyField.enemy13,enemyField.enemy14,
                             enemyField.enemy15,enemyField.enemy16,
                             enemyField.enemy17,enemyField.enemy18,
                             enemyField.enemy19,enemyField.enemy20,
                             enemyField.enemy21,enemyField.enemy22,
                             enemyField.enemy23,enemyField.enemy24,
                             enemyField.enemy25,enemyField.enemy26,
                             enemyField.enemy27,enemyField.enemy28,
                             enemyField.enemy29,enemyField.enemy30,
                             enemyField.enemy31,enemyField.enemy32,
                             enemyField.enemy33,enemyField.enemy34,
                             enemyField.enemy35,enemyField.enemy36,
                             enemyField.enemy37,enemyField.enemy38,
                             enemyField.enemy39,enemyField.enemy40,
                             enemyField.enemy41,enemyField.enemy42,
                             enemyField.enemy43,enemyField.enemy44,
                             enemyField.enemy45,enemyField.enemy46,
                             enemyField.enemy47,enemyField.enemy48,
                             enemyField.enemy49,enemyField.enemy50,
                             enemyField.enemy51,enemyField.enemy52,
                             enemyField.enemy53,enemyField.enemy54,
                             enemyField.enemy55,enemyField.enemy56,
                             enemyField.enemy57,enemyField.enemy58,
                             enemyField.enemy59,enemyField.enemy60,
                             enemyField.enemy61,enemyField.enemy62,
                             enemyField.enemy63,enemyField.enemy64,
                             enemyField.enemy65,enemyField.enemy66);

Now the place where the enemy's are being killed: 现在是杀死敌人的地方:

function enemyHitTest():void {
//for each of the three spiders
for(var i:int = 0; i < spiderArray.length; i++) {
    //the each of the six bullets
    for(var j:int = 0; j < 6; j++) {
        //don't consider bullets that aren't in play:
        if(bulletArray[j].y > SpelerMC.y) continue;
        if(spiderArray[i].hitTestObject(bulletArray[j])) {
            score += 10;
            scoreTxt.text = score.toString();
            trace("Invader " + i + " neergeschoten!");
            spiderArray[i].parent.removeChild(spiderArray[i]);
            bulletArray[j].x = j * 70 + 100;
            bulletArray[j].y = 595;
        }
    }
}

Now I think I need to put some sort of theArray.pop(); 现在我想我需要放入一些theArray.pop(); or something, but don't know how to use it, but I need to place it in this function: 之类的东西,但是不知道如何使用,但是我需要将其放在此函数中:

function startGame() {
trace("Start het spel opnieuw...");
gameTimer.addEventListener(TimerEvent.TIMER, onTick);
gameTimer.start();
enemyField.x = 400;
enemyField.y = 160;
SpelerMC.x = 83;
SpelerMC.y = 531;
}

Please help me! 请帮我! Have been searching for 5 hours already. 已经搜寻了5个小时。
Thanks in advance! 提前致谢!

to remove element number i use array.splice(i, 1); 删除元素编号i使用array.splice(i, 1); ( http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#splice().com/en_US/FlashPlatform/reference/actionscript/3/Array.html#splice%28%29 ) but keep in mind that array.length will decrease http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/Array.html#splice().com/en_US/FlashPlatform/reference/actionscript/3/Array.html#splice%28%29 ),但请注意array.length会减少
to reset the array just invoke spidersArray = new Array(enemyField.enemy1, etc) again 重置数组只需再次调用spidersArray = new Array(enemyField.enemy1, etc)

UPDATE 更新
in in the enemyHitTest function i changed the removing condition to if(enemyArray[i].visible && enemyArray[i].hitTestObject(laserArray[j])) and enemyArray[i].parent.removeChild(enemyArray[i]); enemyHitTest函数中,我将删除条件更改为if(enemyArray[i].visible && enemyArray[i].hitTestObject(laserArray[j]))enemyArray[i].parent.removeChild(enemyArray[i]); to enemyArray[i].visible = false; enemyArray[i].visible = false;
and added 并添加

function respawnEnemies():void{
    for(var i:int = 0; i < enemyArray.length; i++) {
        enemyArray[i].visible = true;
    }
}

to call it from startGame startGame调用它

full code here 完整的代码在这里

upd 2 更新2
so the problem was not in resetting the array but in the fact that your enemyField and its' enemies were added to stage manually and removed programmatically so there was no code to call to bring them back 所以问题不在于重置数组,而是因为您的敌人字段及其敌人是手动添加到舞台上并以编程方式删除的,因此没有可调用的代码来将它们带回

if all your instances should be preserved - eg you generate all actors at the beginning and later all of them are reused (at the new game) you can set an array of them and on each start game make a copy and remove "dead" enemies from the copied array 如果应该保留所有实例-例如,您在开始时生成了所有角色,随后又将它们重新使用(在新游戏中),则可以设置它们的数组,并在每次开始游戏时进行复制并删除“死”敌人从复制的数组

also better option is to use a vector eg 也更好的选择是使用向量

var enemies:Vector.<Enemy> = Vector.<Enemy>([]);//in brackets references to the instances of Enemy class
var inGame:Vector.<Enemy> = enemies.concat();

also 5hrs of research? 还要研究5小时? please be patient and try harder, 请耐心再努力,

best regards 最好的祝福

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM