0

皆様にまずお礼を申し上げたいと思います..

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;      
    }
}

実行可能なコードは次のとおりです。

    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);
    }
}   

そのため、onLoadScene() で LevellingManager.path( )メソッドを呼び出すと、最後に実行された生成メソッドのみが生成されます。

私を助けてください。ありがとうございました。

4

1 に答える 1

0

どうやら Runnable が 1 つだけの場所があるようです。私はそれに対する回避策があると信じています。インスタンスに Runnable の配列が含まれるクラス RunnableBatch を作成します。それadd(Runnable r)

1) Runnable を配列に追加し、

2)次のようなものを含む新しい Runnable を作成しますfor (Runnable r : runnableArray) {r.run();}

于 2012-07-24T13:51:27.837 に答える