我正在開發一個遊戲項目。到目前爲止這麼好,但我只是堅持基本的東西,我找不到解決方案,並使其正常工作。我決定來這裏問你一些建議。ListIterator中只有一個對象實例會移動
問題: 首先,我有2個關卡,每個關卡都有一個機器人。後來我注意到,只有第一級的機器人更新了它的行爲。如果我只加載下一個級別,機器人更新方法不會被調用,我知道爲什麼。 我將ListIterator打印到控制檯中,機器人在那裏。但是當我遍歷主更新方法中的列表時,它似乎沒有調用其中的對象更新方法。我仍然可以和玩家一起移動,並從地圖上取得鑽石,這些鑽石也都是列表中的一部分,因此這些方法都會被調用。我可以爲你提供一些較小的代碼塊,如果你需要得到關於某些特定事情的信息,如果我有它們,只需將它留在評論中即可。這裏有一些主要的區塊,我認爲這些區塊並不適合。 如果只有第一級別的機器人移動,我再製造4個機器人。只有第一個機器人移動。同一班級的所有其他項目什麼也不做。
0.Declaration:
private ArrayList<AbstractObject> supp = new ArrayList<AbstractObject>();
private ListIterator<AbstractObject> objects=supp.listIterator();
1,主要更新方法:
public void update() {
resetList(); //sets the cursor at begining
if(menu.getChoice()==-1){
menu.update();
}
else if(menu.getChoice()==2)
System.exit(0);
else if(menu.getChoice()==0){
if(currentLevel>lvlm.getLevel() || currentLevel<lvlm.getLevel()){
clearList(); //remove all items in the list
init(lvlm.getLevelPath());
currentLevel=lvlm.getLevel();
}
while(objects.hasNext()){
objects.next().update(); //calls all updates from each object in the list
}
}
}
更新方法在機器人類別:
public void update() { movingCount++; switch(getFacing()){ case 2: moved=true; setFacing(2); setVectorX(-0.5); break; case 3: moved=true; setFacing(3); setVectorX(0.5); break; case 0: case 1: setVectorX(0); moved=false; } if(movingCount>=200){ setFacing(randInt(0,3)); movingCount=0; } moveOnX(); //updates pos moveOnY(); //updates pos getAnimationL().runAnimation(); getAnimationR().runAnimation();
}
EDIT_1: 好吧,只有在文件第一行的機器人才會移動。
LEVEL 1 P-球員 B-機器人 d-鑽石 1 - 牆壁
1111111 B B
1P D 1
11111 1
1F 1 B
1111111
B B B
任何想法,爲什麼只有第一線機器人移動?其他線對象正常工作。
1.初始化是一個空數組列表,因爲我直接在列表中添加items和objects.add()。如果我只初始化了listiterator,它會拋出一個錯誤異常。 2.我之前使用過,但是通過增強的循環,我不能從列表中刪除項目。舉個例子,當我拿鑽石時,它應該從世界消失。 (渲染畫出列表中的所有對象。)3.我沒有嘗試過,但是當我做不好時,讓我們知道如何解決問題。 – parohy
到1.我嘗試添加項目到arraylist和初始化對象= supp.iterator(),但重新初始化更改列表(不應該刪除的項目)引發異常。 – parohy
我會在刪除項目時添加註釋:一般來說,在處理完整個列表後最好刪除「已用」項目。 – sprinter