j2me:未捕获的异常:java.lang.OutOfMemoryError(堆栈跟踪不完整)

时间:2012-03-06 15:47:24

标签: java memory-management

我正在创造一个拥有10个等级,2个硬币,楼梯,背景音乐,怪物和一组尖刺的j2me游戏。当我到达游戏的第二级时,我就是这个错误,我没有这个因为我的内存不足....无论如何,我可以改进我的代码,以防止此错误发生或无论如何我可以解决这个问题吗?

public class QuatschCanvas 
    extends GameCanvas 
    implements Runnable { 

/** 
 * @return the points 
* 
 * WHAT HAS TO BE DONE TO THE GAME 
 * fix the door bug for all the levels after level 1 
 * add 2 more coins 
 * make the coins appear and disappear at different times but in the same place 
 * add music to game 
 * add sound when you hit a wall or die 
 * add methods to fix up the code and make it look nice 
 * fix record store to highest score 
 * get game going back to main menu when finished 
 * add animation to the main menu 
 */ 
public boolean mTrucking; 
private LayerManager mLayerManager; 
private TiledLayer mAtmosphere, mBackground, mCollisionBackground, mCollisionDoor; 
private int mAnimatedIndex; 
private Sprite mQuatsch, mCoin,mCoin2, mMonster, mKey, mStairs, mSpikesUp, mSpikesDown; 
private Graphics graphics; 
Image gameOver, youWin; 
private static int mState, mDirection, dState; 
private static final int kStanding = 1; 
private static final int kRunning = 2; 
private static final int kRunningUp = 3; 
private static final int kRunningDown = 4; 
private static final int kCoinSpin = 5; 
private static final int kMonsterMoveUp = 6; 
private static final int kMonsterMoveDown = 7; 
private static final int kLeft = 1; 
private static final int kRight = 2; 
private static final int kUp = 3; 
private static final int kDown = 4; 
private static int lives = 3; 
private static int coins = 0; 
private static int points = 0; 
public static int currentLevel = 1; 
public static int countForLevels = 0; 
private static int keys = 0; 
private static final int[] kRunningSequence = {0, 1, 0, 2}; 
private static final int[] kStandingSequence = {0}; 
private static final int[] kRunningSequenceUp = {3, 4, 3, 5}; 
private static final int[] kRunningSequenceDown = {6, 7, 6, 8}; 
private static final int[] kCoinSpinning = {0, 1, 2, 3, 4, 5}; 
private static final int[] kMonsterDown = {0, 1, 2, 1}; 
private static final int[] kMonsterUp = {9, 10, 11, 10}; 
private static int infinateLoop, spikeLoop; 

public QuatschCanvas(String quatschImageName, 
        String atmosphereImageName, String backgroundImageName, String coinName, String monsterName, 
        String keyName, String stairsName, String spikesNameUp, String spikesNameDown) throws IOException { 
    super(true); 

    // Create a LayerManager. 
    mLayerManager = new LayerManager(); 
    int w = getWidth(); 
    int h = getHeight(); 
    mLayerManager.setViewWindow(96, 0, w, h); 

    createBackground(backgroundImageName, 0); 
    createAtmosphere(atmosphereImageName); 
    createQuatsch(quatschImageName); 
    createCoin(coinName); 
    createSecondCoin(coinName); 
    createMonster(monsterName); 
    createKey(keyName); 
    createStairs(stairsName); 
    createSpikesUp(spikesNameUp); 
    createSpikesDown(spikesNameDown); 

    gameOver = Image.createImage("/game-over.png"); 
    youWin = Image.createImage("/you-win.png"); 
} 

private void createBackground(String backgroundImageName, int level) 
        throws IOException { 
    // Create the tiled layer. 
    Image backgroundImage = Image.createImage(backgroundImageName); 

    mCollisionDoor = new TiledLayer(8, 7, backgroundImage, 96, 96); 
    mCollisionDoor.setPosition(12, 0); 
    for (int i = 0; i < doorMap[level].length; i++) { 
        int column = i % 8; 
        int row = (i - column) / 8; 
        mCollisionDoor.setCell(column, row, doorMap[level][i]); 
    } 
    mAnimatedIndex = mCollisionDoor.createAnimatedTile(8); 
    //mCollisionBackground.setCell(3, 1, mAnimatedIndex); 
    mLayerManager.append(mCollisionDoor); 

    mBackground = new TiledLayer(8, 7, backgroundImage, 96, 96); 
    mBackground.setPosition(12, 0); 
    for (int i = 0; i < map[level].length; i++) { 
        int column = i % 8; 
        int row = (i - column) / 8; 
        mBackground.setCell(column, row, map[level][i]); 
    } 
    mAnimatedIndex = mBackground.createAnimatedTile(8); 
    // mBackground.setCell(3, 1, mAnimatedIndex); 
    mLayerManager.append(mBackground); 

    mCollisionBackground = new TiledLayer(8, 7, backgroundImage, 96, 96); 
    mCollisionBackground.setPosition(12, 0); 
    for (int i = 0; i < collsionMap[level].length; i++) { 
        int column = i % 8; 
        int row = (i - column) / 8; 
        mCollisionBackground.setCell(column, row, collsionMap[level][i]); 
    } 
    mAnimatedIndex = mCollisionBackground.createAnimatedTile(8); 
    //mCollisionBackground.setCell(3, 1, mAnimatedIndex); 
    mLayerManager.append(mCollisionBackground); 


} 

private void createAtmosphere(String atmosphereImageName) 
        throws IOException { 
    // Create the atmosphere layer 
    Image atmosphereImage = Image.createImage(atmosphereImageName); 
    mAtmosphere = new TiledLayer(8, 1, atmosphereImage, 
            atmosphereImage.getWidth(), atmosphereImage.getHeight()); 
    mAtmosphere.fillCells(0, 0, 8, 1, 1); 
    mAtmosphere.setPosition(0, 192); 

    mLayerManager.insert(mAtmosphere, 0); 
} 

private void createQuatsch(String quatschImageName) 
        throws IOException { 
    // Create the sprite. 
    Image quatschImage = Image.createImage(quatschImageName); 
    mQuatsch = new Sprite(quatschImage, 48, 48); 
    mQuatsch.setPosition(96 + (getWidth() - 48) / 2, 100); 
    mQuatsch.defineReferencePixel(24, 24); 
    setDirection(kLeft); 
    setState(kStanding); 
    mLayerManager.insert(mQuatsch, 1); 
} 

private void createKey(String keyName) 
        throws IOException { 
    // Create the sprite. 
    Image keyImage = Image.createImage(keyName); 
    mKey = new Sprite(keyImage, 48, 48); 
    mKey.setPosition(250, 110); 
    mKey.defineReferencePixel(24, 24); 
    setState(kStanding); 
    mLayerManager.insert(mKey, 0); 
} 

private void createSpikesUp(String spikesNameUp) 
        throws IOException { 
    // Create the sprite. 
    Image spikesImageUp = Image.createImage(spikesNameUp); 
    mSpikesUp = new Sprite(spikesImageUp, 48, 48); 
    //mSpikes.setPosition(200, 110); 
    mSpikesUp.defineReferencePixel(24, 24); 
    setState(kStanding); 
    mLayerManager.insert(mSpikesUp, 0); 
} 

private void createSpikesDown(String spikesNameDown) 
        throws IOException { 
    // Create the sprite. 
    Image spikesImageDown = Image.createImage(spikesNameDown); 
    mSpikesDown = new Sprite(spikesImageDown, 48, 48); 
    //mSpikes.setPosition(200, 110); 
    mSpikesDown.defineReferencePixel(24, 24); 
    setState(kStanding); 
    mLayerManager.insert(mSpikesDown, 0); 
} 

private void createStairs(String stairsName) 
        throws IOException { 
    // Create the sprite. 
    Image stairsImage = Image.createImage(stairsName); 
    mStairs = new Sprite(stairsImage, 48, 48); 
    mStairs.setPosition(130, 520); 
    mStairs.defineReferencePixel(24, 24); 
    setState(kStanding); 
    mLayerManager.insert(mStairs, 0); 
} 

private void createCoin(String coinName) 
        throws IOException { 
    // Create the atmosphere layer 
    Image coinImage = Image.createImage(coinName); 
    mCoin = new Sprite(coinImage, 48, 48); 
    mCoin.setPosition(500, 150); 
    mCoin.defineReferencePixel(24, 24); 
    setState(kCoinSpin); 
    mLayerManager.insert(mCoin, 0); 
} 

private void createSecondCoin(String coinName) 
        throws IOException { 
    // Create the atmosphere layer 
    Image coinImage = Image.createImage(coinName); 
    mCoin2 = new Sprite(coinImage, 48, 48); 
    mCoin2.setPosition(250, 220); 
    mCoin2.defineReferencePixel(24, 24); 
    setState(kCoinSpin); 
    mLayerManager.insert(mCoin2, 0); 
} 

private void createMonster(String monsterName) 
        throws IOException { 
    // Create the atmosphere layer 
    Image monsterImage = Image.createImage(monsterName); 
    mMonster = new Sprite(monsterImage, 48, 48); 
    mMonster.setPosition(520, 500); 
    mMonster.defineReferencePixel(24, 24); 
    setDirection(kUp); 
    setState(kMonsterMoveUp); 
    mLayerManager.insert(mMonster, 0); 
} 

public void start() { 
    mTrucking = true; 
    Thread t = new Thread(this); 
    t.start(); 
} 

public void run() { 
    int w = getWidth(); 
    int h = getHeight(); 
    Graphics g = getGraphics(); 
    int frameCount = 0; 
    int factor = 2; 
    int animatedDelta = 0; 

InputStream is = getClass().getResourceAsStream("/audio/mainsong.mp3"); 
Player p;  
    try { 
        p = Manager.createPlayer(is, "audio/mpeg"); 
        p.setLoopCount(-1); 
        p.start(); 
    } catch (IOException ex) { 
        ex.printStackTrace(); 
    } catch (MediaException ex) { 
        ex.printStackTrace(); 
    } 






    while (mTrucking) { 
        // create timer for the dragon to move up the map 
        Timer aTimer = new Timer(); 
        TimerTask firstTask = new TimerTask() { 

            public void run() { 
                setDragonState(kMonsterMoveUp); 
                mMonster.move(0, -3); 
                mSpikesUp.setVisible(true); 
                mSpikesDown.setVisible(false); 
                mCoin.setVisible(false); 
                mCoin.setVisible(true); 
            } 
        }; 
        // create a timer for the dragon to move down the map 
        TimerTask secondTask = new TimerTask() { 

            public void run() { 
                setDragonState(kMonsterMoveDown); 
                mMonster.move(0, 3); 
                mSpikesUp.setVisible(false); 
                mSpikesDown.setVisible(true); 
                mCoin.setVisible(true); 
                mCoin.setVisible(false); 
            } 
        }; 

        // continueos loop so the dragon will keep moving up and down the map 
        if (infinateLoop >= 0 && infinateLoop < 50) { 
            aTimer.schedule(firstTask, 1000); 
            infinateLoop = infinateLoop + 1; 
            mMonster.nextFrame(); 
        } else if (infinateLoop >= 50 && infinateLoop < 100) { 
            aTimer.schedule(secondTask, 1000); 
            infinateLoop = infinateLoop + 1; 
            mMonster.nextFrame(); 
        } else { 
            infinateLoop = 0; 
        } 


        // what to do if the player hits a coin 

        if (mQuatsch.collidesWith(mCoin, true)) {         
            mCoin.setVisible(false); 
            coins++; 
            setPoints(getPoints() + 20); 
        } 

        if (mQuatsch.collidesWith(mCoin2, true)) { 
            mCoin2.setVisible(false); 
            coins++; 
            setPoints(getPoints() + 20); 
        } 

        if (mQuatsch.collidesWith(mStairs, true)) { 
            aTimer.cancel(); 
            firstTask.cancel(); 
            secondTask.cancel(); 
            countForLevels++; 
            if(countForLevels<10){ 

            for (int i = 0; i < map[countForLevels].length; i++) { 
                int column = i % 8; 
                int row = (i - column) / 8; 
                mBackground.setCell(column, row, map[countForLevels][i]); 
            } 
            for (int i = 0; i < collsionMap[countForLevels].length; i++) { 
                int column = i % 8; 
                int row = (i - column) / 8; 
                mCollisionBackground.setCell(column, row, collsionMap[countForLevels][i]); 
            } 
            for (int i = 0; i < doorMap[countForLevels].length; i++) { 
                int column = i % 8; 
                int row = (i - column) / 8; 
                mCollisionDoor.setCell(column, row, doorMap[countForLevels][i]); 
            } 
            mCollisionDoor.setVisible(true); 
            mKey.setVisible(true); 
            mCoin.setVisible(true); 
            mCoin2.setVisible(true); 
            mLayerManager.append(mBackground); 
            mLayerManager.append(mCollisionBackground); 
            mLayerManager.append(mCollisionDoor); 

            //resetItems(int bg_x, int bg_y, int s_x, int s_y, int k_x, int k_y, int su_x, int su_y, int sd_x, int sd_y, int m_x, int m_y, int c_x, int c_y) 
            if (countForLevels == 1) { 
                resetItems(-450, -300, -40, 40, 150, -70, -50, 228, -158, 180, 10000, 10000, -330, -170, -300, 70);//170 
            } else if (countForLevels == 2) { 
                resetItems(12, 0, 226, 315, 420, 300, 520, 144, 520, 96, 10000, 10000, 615, 115, 605, 515);//115 
            } else if (countForLevels == 3) { 
                resetItems(-450, -300, -330, 200, 150, -70, -230, -156, -230, -204, 10000, 10000, -330, -170, -300, -170); 
            } else if (countForLevels == 4) { 
                resetItems(12, 0, 606, 120, 420, 100, 10000, 10000, 10000, 10000, 410, 344, 320, 330, 320, 300); 
            } else if (countForLevels == 5) { 
                resetItems(-450, -300, -332, -72, -332, 200, 10000, 10000, 10000, 10000, -137, 130, 150, -70, 100, -70);//mite be -115 n 300, 200 , 100 
            } else if (countForLevels == 6) { 
                resetItems(12, 0, 130, 505, 250, 110, 10000, 10000, 10000, 10000, 410, 300, 615, 215, 605, 215); 
            } else if (countForLevels == 7) { 
                resetItems(-450, -300, -332, -175, -50, 200, -98, 228, -98, 180, 10000, 10000, -130, -170, -100, -170); 
            } else if (countForLevels == 8) { 
                resetItems(12, 0, 606, 215, 620, 425, 10000, 10000, 10000, 10000, 520, 465, 620, 525, 660, 525); 
            } else if (countForLevels == 9) { 
                resetItems(-450, -300, -332, -175, 150, -170, -28, 228, -28, 180, 10000, 10000, -40, -40, -20, -40); 
            } 
            } 
        } 

        if (mQuatsch.collidesWith(mSpikesUp, true)) { 
            if (countForLevels == 1) { 
                resetItems(-450, -300, -40, 40, 150, -70, -50, 228, -158, 180, 10000, 10000, -330, -170, -300, -170); 
            } else if (countForLevels == 2) { 
                resetItems(12, 0, 226, 315, 420, 300, 520, 144, 520, 96, 10000, 10000, 615, 115, 605, 115); 
            } else if (countForLevels == 3) { 
                resetItems(-450, -300, -330, 200, 150, -70, -230, -156, -230, -204, 10000, 10000, -330, -170, -300, -170); 
            } else if (countForLevels == 4) { 
                resetItems(12, 0, 606, 120, 420, 100, 10000, 10000, 10000, 10000, 410, 344, 320, 330, 320, 300); 
            } else if (countForLevels == 5) { 
                resetItems(-450, -300, -332, -72, -332, 200, 10000, 10000, 10000, 10000, -137, 130, 150, -70, 100, -70);//mite be -115 n 300, 200 , 100 
            } else if (countForLevels == 6) { 
                resetItems(12, 0, 130, 505, 250, 110, 10000, 10000, 10000, 10000, 410, 300, 615, 215, 605, 215); 
            } else if (countForLevels == 7) { 
                resetItems(-450, -300, -332, -175, -50, 200, -98, 228, -98, 180, 10000, 10000, -130, -170, -100, -170); 
            } else if (countForLevels == 8) { 
                resetItems(12, 0, 606, 215, 620, 425, 10000, 10000, 10000, 10000, 520, 465, 620, 525, 660, 525); 
            } else if (countForLevels == 9) { 
                resetItems(-450, -300, -332, -175, 150, -170, -28, 228, -28, 180, 10000, 10000, -40, -40, -20, -40); 
            } 
            lives--; 
        } 

        if (mQuatsch.collidesWith(mSpikesDown, true)) { 
           if (countForLevels == 1) { 
                resetItems(-450, -300, -40, 40, 150, -70, -50, 228, -158, 180, 10000, 10000, -330, -170, -300, -170); 
            } else if (countForLevels == 2) { 
                resetItems(12, 0, 226, 315, 420, 300, 520, 144, 520, 96, 10000, 10000, 615, 115, 605, 115); 
            } else if (countForLevels == 3) { 
                resetItems(-450, -300, -330, 200, 150, -70, -230, -156, -230, -204, 10000, 10000, -330, -170, -300, -170); 
            } else if (countForLevels == 4) { 
                resetItems(12, 0, 606, 120, 420, 100, 10000, 10000, 10000, 10000, 410, 344, 320, 330, 320, 300); 
            } else if (countForLevels == 5) { 
                resetItems(-450, -300, -332, -72, -332, 200, 10000, 10000, 10000, 10000, -137, 130, 150, -70, 100, -70);//mite be -115 n 300, 200 , 100 
            } else if (countForLevels == 6) { 
                resetItems(12, 0, 130, 505, 250, 110, 10000, 10000, 10000, 10000, 410, 300, 615, 215, 605, 215); 
            } else if (countForLevels == 7) { 
                resetItems(-450, -300, -332, -175, -50, 200, -98, 228, -98, 180, 10000, 10000, -130, -170, -100, -170); 
            } else if (countForLevels == 8) { 
                resetItems(12, 0, 606, 215, 620, 425, 10000, 10000, 10000, 10000, 520, 465, 620, 525, 660, 525); 
            } else if (countForLevels == 9) { 
                resetItems(-450, -300, -332, -175, 150, -170, -28, 228, -28, 180, 10000, 10000, -40, -40, -20, -40); 
            } 
            lives--; 
        } 

        // what to do if a player hits a key 
        if (mQuatsch.collidesWith(mKey, true)) { 
            mKey.setVisible(false); 
            System.out.println(keys); 
            keys = keys + 1; 
            setPoints(getPoints() + 50); 
            System.out.println(keys); 
        } 

        // what to do if the player hits a monster 
        if (mQuatsch.collidesWith(mMonster, true)) { 
            if (countForLevels == 1) { 
                resetItems(-450, -300, -40, 40, 150, -70, -50, 228, -158, 180, 10000, 10000, -330, -170, -300, -170); 
            } else if (countForLevels == 2) { 
                resetItems(12, 0, 226, 315, 420, 300, 520, 144, 520, 96, 10000, 10000, 615, 115, 605, 115); 
            } else if (countForLevels == 3) { 
                resetItems(-450, -300, -330, 200, 150, -70, -230, -156, -230, -204, 10000, 10000, -330, -170, -300, -170); 
            } else if (countForLevels == 4) { 
                resetItems(12, 0, 606, 120, 420, 100, 10000, 10000, 10000, 10000, 410, 344, 320, 330, 320, 300); 
            } else if (countForLevels == 5) { 
                resetItems(-450, -300, -332, -72, -332, 200, 10000, 10000, 10000, 10000, -137, 130, 150, -70, 100, -70);//mite be -115 n 300, 200 , 100 
            } else if (countForLevels == 6) { 
                resetItems(12, 0, 130, 505, 250, 110, 10000, 10000, 10000, 10000, 410, 300, 615, 215, 605, 215); 
            } else if (countForLevels == 7) { 
                resetItems(-450, -300, -332, -175, -50, 200, -98, 228, -98, 180, 10000, 10000, -130, -170, -100, -170); 
            } else if (countForLevels == 8) { 
                resetItems(12, 0, 606, 215, 620, 425, 10000, 10000, 10000, 10000, 520, 465, 620, 525, 660, 525); 
            } else if (countForLevels == 9) { 
                resetItems(-450, -300, -332, -175, 150, -170, -28, 228, -28, 180, 10000, 10000, -40, -40, -20, -40); 
            } 
            lives--; 
        } 

        if (isShown()) { 
            int keyStates = getKeyStates(); 
            if ((keyStates & LEFT_PRESSED) != 0) { 
                setDirection(kLeft); 
                movingCharacter(kRunning, 10, 0, -10, 0); 

            } else if ((keyStates & RIGHT_PRESSED) != 0) { 
                setDirection(kRight); 
                movingCharacter(kRunning, -10, 0, 10, 0); 

            } else if ((keyStates & UP_PRESSED) != 0) { 
                movingCharacter(kRunningUp, 0, 10, 0, -10); 

            } else if ((keyStates & DOWN_PRESSED) != 0) { 
                movingCharacter(kRunningDown, 0, -10, 0, 10); 

            } else { 
                setState(kStanding); 
                mCoin.nextFrame(); 
                mCoin2.nextFrame(); 
            } 

            frameCount++; 
            if (frameCount % factor == 0) { 
                int delta = 1; 
                if (frameCount / factor < 10) { 
                    delta = -1; 
                } 
                mAtmosphere.move(delta, 0); 
                if (frameCount / factor == 20) { 
                    frameCount = 0; 
                } 

                mBackground.setAnimatedTile(mAnimatedIndex, 
                        8 + animatedDelta++); 
                if (animatedDelta == 3) { 
                    animatedDelta = 0; 
                } 
            } 

            g.setColor(0x5b1793); 
            g.fillRect(0, 0, w, h); 

            mLayerManager.paint(g, 0, 0); 

            flushGraphics(); 
        } 

        try { 
            Thread.sleep(80); 
        } catch (InterruptedException ie) { 
        } 

        if (lives == 0) { 
            stop(); 
            g.drawImage(gameOver,10,50,Graphics.TOP | Graphics.LEFT); 
            repaint(); 
        } 

        if(countForLevels == 10){ 
            stop(); 
            g.drawImage(youWin,10,50,Graphics.TOP | Graphics.LEFT); 
            repaint(); 
        } 
    } 
    //String pointsString = Integer.toString(points); 
    //String levelString = Integer.toString(level); 

    //mScoreListener.collectItems(pointsString, levelString); 

    System.out.println("Points = " + getPoints() + "\nLevel = " + currentLevel); 
} 

public void movingCharacter(int state, int x, int y, int a, int b) { 
    setState(state); 
    mBackground.move(x, y); 
    mCollisionBackground.move(x, y); 
    mCollisionDoor.move(x, y); 
    mAtmosphere.move(x, y); 
    mCoin.move(x, y); 
    mCoin2.move(x, y); 
    mStairs.move(x, y); 
    mMonster.move(x, y); 
    mKey.move(x, y); 
    mQuatsch.nextFrame(); 
    mCoin.nextFrame(); 
    mCoin2.nextFrame(); 
    mSpikesUp.move(x, y); 
    mSpikesDown.move(x, y); 
    // if the player hits a wall 
    if (mQuatsch.collidesWith(mCollisionBackground, true)) { 
        mBackground.move(a, b); 
        mCollisionBackground.move(a, b); 
        mCollisionDoor.move(a, b); 
        mAtmosphere.move(a, b); 
        mCoin.move(a, b); 
        mCoin2.move(a, b); 
        mStairs.move(a, b); 
        mKey.move(a, b); 
        mMonster.move(a, b); 
        mSpikesUp.move(a, b); 
        mSpikesDown.move(a, b); 
    } 
    // if the user hits a door with a key and without a key 
    if (mQuatsch.collidesWith(mCollisionDoor, true)) { 
        if (keys > 0) { 
            System.out.println("hit wall with key" + doorMap[0][34]); 
            //doorMap[0][34] = 0; 
            mCollisionDoor.setVisible(false); 
            keys--; 
            mLayerManager.append(mCollisionDoor); 
            //mLayerManager.remove(mCollisionDoor); 
            setPoints(getPoints() + 10); 
            System.out.println("hit wall with key after changes" + doorMap[0][34]); 
        } else { 
            System.out.println("hit wall without key"); 
            mBackground.move(a, b); 
            mCollisionBackground.move(a, b); 
            mCollisionDoor.move(a, b); 
            mAtmosphere.move(a, b); 
            mCoin.move(a, b); 
            mCoin2.move(a, b); 
            mStairs.move(a, b); 
            mMonster.move(a, b); 
            mKey.move(a, b); 
            mSpikesUp.move(a, b); 
            mSpikesDown.move(a, b); 
        } 
    } 
} 

public void resetItems(int bg_x, int bg_y, int s_x, int s_y, int k_x, int k_y, int su_x, int su_y, int sd_x, int sd_y, int m_x, int m_y, int c_x, int c_y, int c2_x, int c2_y) { 
    mBackground.setPosition(bg_x, bg_y); 
    mCollisionBackground.setPosition(bg_x, bg_y); 
    mCollisionDoor.setPosition(bg_x, bg_y); 
    mStairs.setPosition(s_x, s_y); 
    mKey.setPosition(k_x, k_y); 
    mSpikesUp.setPosition(su_x, su_y); 
    mSpikesDown.setPosition(sd_x, sd_y); 
    mMonster.setPosition(m_x, m_y); 
    mCoin.setPosition(c_x, c_y); 
    mCoin2.setPosition(c2_x, c2_y); 
} 

public void stop() { 
    mTrucking = false; 

} 



public void setVisible(int layerIndex, boolean show) { 
    Layer layer = mLayerManager.getLayerAt(layerIndex); 
    layer.setVisible(show); 
} 

public boolean isVisible(int layerIndex) { 
    Layer layer = mLayerManager.getLayerAt(layerIndex); 
    return layer.isVisible(); 
} 

private void setDirection(int newDirection) { 
    if (newDirection == mDirection) { 
        return; 
    } 
    if (mDirection == kLeft) { 
        mQuatsch.setTransform(Sprite.TRANS_MIRROR); 
    } else if (mDirection == kRight) { 
        mQuatsch.setTransform(Sprite.TRANS_NONE); 
    } 
    mDirection = newDirection; 
} 

  public static int getPoints() { 
    return points; 
} 

/** 
 * @param aPoints the points to set 
 */ 
public static void setPoints(int aPoints) { 
    points = aPoints; 
} 

private void setState(int newState) { 
    if (newState == mState) { 
        return; 
    } 
    switch (newState) { 
        case kStanding: 
            mQuatsch.setFrameSequence(kStandingSequence); 
            mQuatsch.setFrame(0); 
            break; 
        case kRunning: 
            mQuatsch.setFrameSequence(kRunningSequence); 
            break; 
        case kRunningUp: 
            mQuatsch.setFrameSequence(kRunningSequenceUp); 
            break; 
        case kRunningDown: 
            mQuatsch.setFrameSequence(kRunningSequenceDown); 
            break; 
        case kCoinSpin: 
            mQuatsch.setFrameSequence(kCoinSpinning); 
            break; 
        case kMonsterMoveUp: 
            mMonster.setFrameSequence(kMonsterUp); 
            break; 
        case kMonsterMoveDown: 
            mMonster.setFrameSequence(kMonsterDown); 
            break; 
        default: 
            break; 
    } 
    mState = newState; 
} 

private void setDragonState(int newState) { 
    if (newState == dState) { 
        return; 
    } 
    switch (newState) { 
        case kStanding: 
            mMonster.setFrameSequence(kStandingSequence); 
            mMonster.setFrame(0); 
            break; 
        case kMonsterMoveUp: 
            mMonster.setFrameSequence(kMonsterUp); 
            break; 
        case kMonsterMoveDown: 
            mMonster.setFrameSequence(kMonsterDown); 
            break; 
        default: 
            break; 
    } 
dState = newState; 

}

由于

1 个答案:

答案 0 :(得分:0)

层层管理器正在“满员”。

在每个级别之间,我建议使用remove(int layer)方法清除/清空它。