2012-07-18 55 views
0

我想說,先謝謝大家..Runnable跳過Android AndEngine

我已經做了一個代碼來使用Runnable生成精靈。 但它只執行我寫的最後一個runnable。

下面的代碼:

public class LevellingManager { 

// ======================== // 
// ======================== // 
// THE PATH METHOD    // 
// ======================== // 
// ======================== // 
public static void path() { 
    currType = Leveling2.TYPE_DIGGER; 
    mHandler.post(mStartDigger); 
    // === NOT EXECUTED === // 
    generateSprite(Leveling2.TYPE_ROCK, 10, 2000, 2000, LevellingManager.EASY); 
    // === EXECUTED === // 
    generateSprite(Leveling2.TYPE_WORM, 8, 3000, 1000, LevellingManager.HARD); 
} 

generateSprite()方法

public static void generateSprite(int type, int nSprts, int delayPerSprt, 
     int delayPerBtch, int[] difficulty) { 
    currType = type; 

    switch (type) { 
    case Leveling2.TYPE_ROCK: 
     System.out.println("Awalnya : " + GameResources2.lastIndexRock); 

     // ---- Set Generate Data ---- // 
     currIndex = 1 + GameResources2.lastIndexRock; 
     currList= GameResources2.listRockToBeAdded; 
     currLastIndex = GameResources2.lastIndexRock; 
     currMaxCpcty= GameResources2.MAX_ROCK; 

     // --- Method to Set the position, speed & delay per sprite ---- // 
     set(nSprts, delayPerBtch, delayPerSprt, difficulty); 

     mHandler.postDelayed(mStartRock, currDelay); 

     GameResources2.lastIndexRock = currLastIndex; 

     break; 

    case Leveling2.TYPE_WORM: 
     // ---- Set Generate Data ---- // 
     currIndex = 1 + GameResources2.lastIndexWorm; 
     currList=GameResources2.listWormToBeAdded; 
     currLastIndex = GameResources2.lastIndexWorm; 
     currMaxCpcty = GameResources2.MAX_WORM; 

     // --- Method to Set the position, speed & delay per sprite ---- // 
     set(nSprts, delayPerBtch, delayPerSprite, difficulty); 

     mHandler.postDelayed(mStartWorm, currDelay); 

     GameResources2.lastIndexWorm = currLastIndex; 
     break;  
    } 
} 

這裏談到的的Runnable代碼:

public static Runnable mStartRock = new Runnable() { 
    public void run() { 
     installAttach(this); 
    } 
}; 
public static Runnable mStartWorm = new Runnable() { 
    public void run() { 
     installAttach(this); 
    } 
}; 

這裏是一個方法將會執行在Runnable裏面。 installAttach()方法:

private static void installAttach(Runnable r) { 

    System.out.println("Lewat sini, type : " + currType); 

    currSpriteGen = currList.get(currIndex); 

    currSpriteGen 
      .registerEntityModifier(new SequenceEntityModifier(
        new MoveModifier(currSpeed, 
          currSpriteGen.getX(), 
          currSpriteGen.getX(), 
          GameResources2.CAMERA_HEIGHT, 
          GameResources2.POSITION_DIGGER_HEIGHT))); 

    currSpriteGen.setVisible(true); 

    if (currSpriteGen.getParent() == null) 
     GameResources2.scene.attachChild(currSpriteGen); 
    else 
     currLastIndex = currIndex; 

    switchLastIndex(); 

    if (currIndex == currMaxCpcty - 1) { 
     currNSprts = currNSprts - currIndex; 
     currIndex = -1; 
    } 

    System.out.println("Index : " + currIndex); 
    System.out.println("Max index : " + currMaxCpcty); 

    ++currIndex; 

    // --- For looping ---// 
    if (currIndex < currNSprts) { 
     mHandler.postDelayed(r, currDelay); 
    } 
} 

所以,當我打電話LevellingManager.path()方法在onLoadScene(), 只有最後生成可執行的方法。

請幫幫我。 謝謝。

回答

0

顯然有一個地方只有一個Runnable。我相信我有一個解決方法。創建一個RunnableBatch類,其實例將包含一個Runnables數組。這將有一個方法add(Runnable r)

1)添加了Runnable到陣列和

2)創建一個新的Runnable,將包含類似for (Runnable r : runnableArray) {r.run();}