Autore Topic: Applicazione crasha!!!  (Letto 751 volte)

Offline RAN3000

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S 2
  • Sistema operativo:
    Ubuntu 12.04 LTS con Unity
Applicazione crasha!!!
« il: 21 Settembre 2012, 16:36:40 CEST »
0
Da poco ho finito la mia prima vera applicazione :D e funziona tutto bene tranne che per il fatto che quando premo il tasto per iniziare il gioco vero e proprio, ovvero "Play", crasha inspiegabilmente.

L' applicazione è basata su un framework creato appositamente per fare giochi che si costruisce man mano leggendo il libro "Beggining Android Games".

Allego anche l'apk se può essere utile.

Ecco il logcat:

Codice: [Seleziona]
09-21 16:12:25.569: I/Process(436): Sending signal. PID: 436 SIG: 9
09-21 16:13:14.489: D/dalvikvm(468): GC_EXTERNAL_ALLOC freed 60K, 53% free 2570K/5379K, external 1925K/2137K, paused 65ms
09-21 16:13:14.819: D/dalvikvm(468): GC_EXTERNAL_ALLOC freed 5K, 53% free 2576K/5379K, external 2759K/2779K, paused 51ms
09-21 16:13:15.138: D/dalvikvm(468): GC_EXTERNAL_ALLOC freed 3K, 53% free 2580K/5379K, external 3453K/3470K, paused 43ms
09-21 16:13:21.359: D/PhoneWindow(468): couldn't save which view has focus because the focused view com.ran3000.PaperBall.framework.impl.AndroidFastRenderView@4051c6a8 has no id.
09-21 16:13:21.899: W/IInputConnectionWrapper(468): showStatusIcon on inactive InputConnection
09-21 16:13:36.519: W/dalvikvm(468): threadid=11: thread exiting with uncaught exception (group=0x40015560)
09-21 16:13:36.519: E/AndroidRuntime(468): FATAL EXCEPTION: Thread-13
09-21 16:13:36.519: E/AndroidRuntime(468): java.lang.NullPointerException
09-21 16:13:36.519: E/AndroidRuntime(468):         at com.ran3000.PaperBall.GameScreen.drawWorld(GameScreen.java:160)
09-21 16:13:36.519: E/AndroidRuntime(468):         at com.ran3000.PaperBall.GameScreen.present(GameScreen.java:114)
09-21 16:13:36.519: E/AndroidRuntime(468):         at com.ran3000.PaperBall.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:40)
09-21 16:13:36.519: E/AndroidRuntime(468):         at java.lang.Thread.run(Thread.java:1019)

La classe "GameScreen",  che contiene "present" e a sua volta "drawWorld":
Codice (Java): [Seleziona]
package com.ran3000.PaperBall;

import java.util.List;

import com.ran3000.PaperBall.framework.Graphics;
import com.ran3000.PaperBall.framework.Input.TouchEvent;
import com.ran3000.PaperBall.framework.Game;
import com.ran3000.PaperBall.framework.Pixmap;
import com.ran3000.PaperBall.framework.Screen;

public class GameScreen extends Screen {
        enum GameState {
        Ready,
        Running,
        Paused,
        GameOver
    }
   
    GameState state = GameState.Ready;
    World world;
    int oldScore = 0;
    String score = "0";
    Ball ball;
   
        public GameScreen(Game game) {
                super(game);
        }

        @Override
        public void update(float deltaTime) {
                List<com.ran3000.PaperBall.framework.Input.TouchEvent> touchEvents = game.getInput().getTouchEvents();
       
        if(state == GameState.Ready)
            updateReady(touchEvents);
        if(state == GameState.Running)
            updateRunning(touchEvents, deltaTime);
        if(state == GameState.Paused)
            updatePaused(touchEvents);
        if(state == GameState.GameOver)
            updateGameOver(touchEvents);
        }

        private void updateReady(List<TouchEvent> touchEvents) {
                if(touchEvents.size() > 0)
                        state = GameState.Running;
        }
       
        private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {
                ball = new Ball(ball.y, ball.rotImg, game.getInput().getAccelX());
                int len = touchEvents.size();
                for(int i = 0; i < len; i++){
                        TouchEvent event = touchEvents.get(i);
                        if(event.type == TouchEvent.TOUCH_UP){
                                if(inBounds(event, 12, 12, 48, 48)) {
                                        state = GameState.Paused;
                                }
                        }
                }
                world.update();
                if(world.gameOver){
                        state = GameState.GameOver;
                }
        }
       

        private void updatePaused(List<TouchEvent> touchEvents) {
                int len = touchEvents.size();
                for(int i = 0;i < len; i++){
                        TouchEvent event = touchEvents.get(i);
                        if(event.type == TouchEvent.TOUCH_UP){
                                if(inBounds(event, 250, 190, 100, 34)) {
                                        game.setScreen(new MainMenuScreen(game));
                                }
                                if(inBounds(event, 125, 192, 100, 34)) {
                                        oldScore = 0;
                                        state = GameState.Ready;
                                }
                                if(inBounds(event, 160, 90, 150, 68)) {
                                        state = GameState.Running;
                                }
                        }
                }
        }

        private void updateGameOver(List<TouchEvent> touchEvents) {
                int len = touchEvents.size();
                for(int i = 0; i < len; i++){
                        TouchEvent event = touchEvents.get(i);
                        if(event.type == TouchEvent.TOUCH_UP){
                                if(inBounds(event, 125, 192, 100, 34)) {
                                        oldScore = 0;
                                        state = GameState.Ready;
                                }
                                if(inBounds(event, 250, 190, 100, 34)) {
                                        game.setScreen(new MainMenuScreen(game));
                                }
                        }
                }
        }
       
        private boolean inBounds(TouchEvent event, int x, int y, int width, int height) {
        if(event.x > x && event.x < x + width - 1 &&
           event.y > y && event.y < y + height - 1)
            return true;
        else
            return false;
    }

        @Override
        public void present(float deltaTime) {
        Graphics g = game.getGraphics();
       
        g.drawPixmap(Assets.background, 0, 0);
        drawWorld(world);
        if(state == GameState.Ready)
            drawReadyUI();
        if(state == GameState.Running)
            drawRunningUI();
        if(state == GameState.Paused)
            drawPausedUI();
        if(state == GameState.GameOver)
            drawGameOverUI();
               
        }

        private void drawRunningUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.pauseButton, 435, 45);
                drawText(g, score, 10, 10);
        }

        private void drawGameOverUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.trasparence, 0, 0);
                g.drawPixmap(Assets.exit, 250, 190);
                g.drawPixmap(Assets.retry, 125, 192);
                g.drawPixmap(Assets.gameover, 137, 109);
        }

        private void drawPausedUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.trasparence, 0, 0);
                g.drawPixmap(Assets.exit, 250, 190);
                g.drawPixmap(Assets.retry, 125, 192);
                g.drawPixmap(Assets.playButton, 160, 90);
        }

        private void drawReadyUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.trasparence, 0, 0);
                g.drawPixmap(Assets.ready, 125, 112);
        }

        private void drawWorld(World world) {
                Graphics g = game.getGraphics();
                Ball ball = world.ball;
                Bomb1 bomb1 = world.bomb1;
                Bomb2 bomb2 = world.bomb2;
                Bomb3 bomb3 = world.bomb3;
                Bomb4 bomb4 = world.bomb4;
                Bomb5 bomb5 = world.bomb5;
                Bomb6 bomb6 = world.bomb6;
                Bomb7 bomb7 = world.bomb7;
                Explosion explosion = world.explosion;
                int ex = 0;
                int ey = 0;
               
                Pixmap ballPixmap = null;
                if(ball.rotImg == 1)
                        ballPixmap = Assets.paperBall1;
                if(ball.rotImg == 2)
                        ballPixmap = Assets.paperBall2;
                if(ball.rotImg == 3)
                        ballPixmap = Assets.paperBall3;
                if(ball.rotImg == 4)
                        ballPixmap = Assets.paperBall4;
                if(ball.rotImg == 5)
                        ballPixmap = Assets.paperBall5;
                if(ball.rotImg == 6)
                        ballPixmap = Assets.paperBall6;
                if(ball.rotImg == 7)
                        ballPixmap = Assets.paperBall7;
                if(ball.rotImg == 8)
                        ballPixmap = Assets.paperBall8;
                if(ball.rotImg == 9)
                        ballPixmap = Assets.paperBall9;
                if(ball.rotImg == 10)
                        ballPixmap = Assets.paperBall10;
                if(ball.rotImg == 11)
                        ballPixmap = Assets.paperBall11;
                if(ball.rotImg == 12)
                        ballPixmap = Assets.paperBall12;
                if(ball.rotImg == 13)
                        ballPixmap = Assets.paperBall13;
                if(ball.rotImg == 14)
                        ballPixmap = Assets.paperBall14;
                if(ball.rotImg == 15)
                        ballPixmap = Assets.paperBall15;
                if(ball.rotImg == 16)
                        ballPixmap = Assets.paperBall16;
                if(ball.rotImg == 17)
                        ballPixmap = Assets.paperBall17;
                if(ball.rotImg == 18)
                        ballPixmap = Assets.paperBall18;
                if(ball.rotImg == 19)
                        ballPixmap = Assets.paperBall19;
                if(ball.rotImg == 20)
                        ballPixmap = Assets.paperBall20;
                if(ball.rotImg == 21)
                        ballPixmap = Assets.paperBall21;
                if(ball.rotImg == 22)
                        ballPixmap = Assets.paperBall22;
                if(ball.rotImg == 23)
                        ballPixmap = Assets.paperBall23;
                if(ball.rotImg == 24)
                        ballPixmap = Assets.paperBall24;
                if(ball.rotImg == 25)
                        ballPixmap = Assets.paperBall25;
                if(ball.rotImg == 26)
                        ballPixmap = Assets.paperBall26;
                if(ball.rotImg == 27)
                        ballPixmap = Assets.paperBall27;
                if(ball.rotImg == 28)
                        ballPixmap = Assets.paperBall28;
                if(ball.rotImg == 29)
                        ballPixmap = Assets.paperBall29;
                if(ball.rotImg == 30)
                        ballPixmap = Assets.paperBall30;
                if(ball.rotImg == 31)
                        ballPixmap = Assets.paperBall31;
                if(ball.rotImg == 32)
                        ballPixmap = Assets.paperBall32;
                if(ball.rotImg == 33)
                        ballPixmap = Assets.paperBall33;
                if(ball.rotImg == 34)
                        ballPixmap = Assets.paperBall34;
                if(ball.rotImg == 35)
                        ballPixmap = Assets.paperBall35;
                if(ball.rotImg == 36)
                        ballPixmap = Assets.paperBall36;
                int x = (int) ball.xPosition;
                int y = ball.y;
                g.drawPixmap(ballPixmap, x, y);
               
                Pixmap explosionPixmap = null;
                if(explosion.explosion == 1)
                        explosionPixmap = Assets.explosion1;
                if(explosion.explosion == 2)
                        explosionPixmap = Assets.explosion2;
                if(explosion.explosion == 3)
                        explosionPixmap = Assets.explosion3;
                if(explosion.explosion == 4)
                        explosionPixmap = Assets.explosion4;
                if(bomb1.isCollided()){
                        ex = bomb1.bX;
                        ey = bomb1.bY;
                }      
                if(bomb2.isCollided()){
                        ex = bomb2.bX;
                        ey = bomb2.bY;
                }      
                if(bomb3.isCollided()){
                        ex = bomb3.bX;
                        ey = bomb3.bY;
                }      
                if(bomb4.isCollided()){
                        ex = bomb4.bX;
                        ey = bomb4.bY;
                }      
                if(bomb5.isCollided()){
                        ex = bomb5.bX;
                        ey = bomb5.bY;
                }      
                if(bomb6.isCollided()){
                        ex = bomb6.bX;
                        ey = bomb6.bY;
                }      
                if(bomb7.isCollided()){
                        ex = bomb7.bX;
                        ey = bomb7.bY;
                }      
                g.drawPixmap(explosionPixmap, ex, ey);
               
                Pixmap bomb1Pixmap = null;
                if(bomb1.bImg == 0)
                        bomb1Pixmap = Assets.bomb0;
                if(bomb1.bImg == 1)
                        bomb1Pixmap = Assets.bomb1;
                if(bomb1.bImg == 2)
                        bomb1Pixmap = Assets.bomb2;
                if(bomb1.bImg == 3)
                        bomb1Pixmap = Assets.bomb3;
                if(bomb1.bImg == -1)
                        bomb1Pixmap = Assets.bomb4;
                if(bomb1.bImg == -2)
                        bomb1Pixmap = Assets.bomb5;
                if(bomb1.bImg == -3)
                        bomb1Pixmap = Assets.bomb6;
                int b1x = bomb1.bX;
                int b1y = bomb1.bY;
                g.drawPixmap(bomb1Pixmap, b1x, b1y);
               
                Pixmap bomb2Pixmap = null;
                if(bomb2.bImg == 0)
                        bomb2Pixmap = Assets.bomb0;
                if(bomb2.bImg == 1)
                        bomb2Pixmap = Assets.bomb1;
                if(bomb2.bImg == 2)
                        bomb2Pixmap = Assets.bomb2;
                if(bomb2.bImg == 3)
                        bomb2Pixmap = Assets.bomb3;
                if(bomb2.bImg == -1)
                        bomb2Pixmap = Assets.bomb4;
                if(bomb2.bImg == -2)
                        bomb2Pixmap = Assets.bomb5;
                if(bomb2.bImg == -3)
                        bomb2Pixmap = Assets.bomb6;
                int b2x = bomb2.bX;
                int b2y = bomb2.bY;
                g.drawPixmap(bomb2Pixmap, b2x, b2y);
               
                Pixmap bomb3Pixmap = null;
                if(bomb3.bImg == 0)
                        bomb3Pixmap = Assets.bomb0;
                if(bomb3.bImg == 1)
                        bomb3Pixmap = Assets.bomb1;
                if(bomb3.bImg == 2)
                        bomb3Pixmap = Assets.bomb2;
                if(bomb3.bImg == 3)
                        bomb3Pixmap = Assets.bomb3;
                if(bomb3.bImg == -1)
                        bomb3Pixmap = Assets.bomb4;
                if(bomb3.bImg == -2)
                        bomb3Pixmap = Assets.bomb5;
                if(bomb3.bImg == -3)
                        bomb3Pixmap = Assets.bomb6;
                int b3x = bomb3.bX;
                int b3y = bomb3.bY;
                g.drawPixmap(bomb3Pixmap, b3x, b3y);
               
                Pixmap bomb4Pixmap = null;
                if(bomb4.bImg == 0)
                        bomb4Pixmap = Assets.bomb0;
                if(bomb4.bImg == 1)
                        bomb4Pixmap = Assets.bomb1;
                if(bomb4.bImg == 2)
                        bomb4Pixmap = Assets.bomb2;
                if(bomb4.bImg == 3)
                        bomb4Pixmap = Assets.bomb3;
                if(bomb4.bImg == -1)
                        bomb4Pixmap = Assets.bomb4;
                if(bomb4.bImg == -2)
                        bomb4Pixmap = Assets.bomb5;
                if(bomb4.bImg == -3)
                        bomb4Pixmap = Assets.bomb6;
                int b4x = bomb4.bX;
                int b4y = bomb4.bY;
                g.drawPixmap(bomb4Pixmap, b4x, b4y);
               
                Pixmap bomb5Pixmap = null;
                if(bomb5.bImg == 0)
                        bomb5Pixmap = Assets.bomb0;
                if(bomb5.bImg == 1)
                        bomb5Pixmap = Assets.bomb1;
                if(bomb5.bImg == 2)
                        bomb5Pixmap = Assets.bomb2;
                if(bomb5.bImg == 3)
                        bomb5Pixmap = Assets.bomb3;
                if(bomb5.bImg == -1)
                        bomb5Pixmap = Assets.bomb4;
                if(bomb5.bImg == -2)
                        bomb5Pixmap = Assets.bomb5;
                if(bomb5.bImg == -3)
                        bomb5Pixmap = Assets.bomb6;
                int b5x = bomb5.bX;
                int b5y = bomb5.bY;
                g.drawPixmap(bomb5Pixmap, b5x, b5y);
               
                Pixmap bomb6Pixmap = null;
                if(bomb6.bImg == 0)
                        bomb6Pixmap = Assets.bomb0;
                if(bomb6.bImg == 1)
                        bomb6Pixmap = Assets.bomb1;
                if(bomb6.bImg == 2)
                        bomb6Pixmap = Assets.bomb2;
                if(bomb6.bImg == 3)
                        bomb6Pixmap = Assets.bomb3;
                if(bomb6.bImg == -1)
                        bomb6Pixmap = Assets.bomb4;
                if(bomb6.bImg == -2)
                        bomb6Pixmap = Assets.bomb5;
                if(bomb6.bImg == -3)
                        bomb6Pixmap = Assets.bomb6;
                int b6x = bomb6.bX;
                int b6y = bomb6.bY;
                g.drawPixmap(bomb6Pixmap, b6x, b6y);
               
                Pixmap bomb7Pixmap = null;
                if(bomb7.bImg == 0)
                        bomb7Pixmap = Assets.bomb0;
                if(bomb7.bImg == 1)
                        bomb7Pixmap = Assets.bomb1;
                if(bomb7.bImg == 2)
                        bomb7Pixmap = Assets.bomb2;
                if(bomb7.bImg == 3)
                        bomb7Pixmap = Assets.bomb3;
                if(bomb7.bImg == -1)
                        bomb7Pixmap = Assets.bomb4;
                if(bomb7.bImg == -2)
                        bomb7Pixmap = Assets.bomb5;
                if(bomb7.bImg == -3)
                        bomb7Pixmap = Assets.bomb6;
                int b7x = bomb7.bX;
                int b7y = bomb7.bY;
                g.drawPixmap(bomb7Pixmap, b7x, b7y);
        }
       
        public void drawText(Graphics g, String line, int x, int y) {
        int len = line.length();
        for (int i = 0; i < len; i++) {
            char character = line.charAt(i);

            if (character == ' ') {
                x += 20;
                continue;
            }

            int srcX = 0;
            int srcWidth = 0;
            if (character == '.') {
                srcX = 200;
                srcWidth = 10;
            } else {
                srcX = (character - '0') * 20;
                srcWidth = 20;
            }

            g.drawPixmap(Assets.numbers, x, y, srcX, 0, srcWidth, 32);
            x += srcWidth;
        }
    }

        @Override
        public void pause() {
                // TODO Auto-generated method stub
               
        }

        @Override
        public void resume() {
                // TODO Auto-generated method stub
               
        }

        @Override
        public void dispose() {
                // TODO Auto-generated method stub
               
        }
}

La classe del framework "AndroidFastRenderView":
Codice (Java): [Seleziona]
package com.ran3000.PaperBall.framework.impl;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class AndroidFastRenderView extends SurfaceView implements Runnable {
    AndroidGame game;
    Bitmap framebuffer;
    Thread renderThread = null;
    SurfaceHolder holder;
    volatile boolean running = false;
   
    public AndroidFastRenderView(AndroidGame game, Bitmap framebuffer) {
        super(game);
        this.game = game;
        this.framebuffer = framebuffer;
        this.holder = getHolder();
    }

    public void resume() {
        running = true;
        renderThread = new Thread(this);
        renderThread.start();        
    }      
   
    public void run() {
        Rect dstRect = new Rect();
        long startTime = System.nanoTime();
        while(running) {  
            if(!holder.getSurface().isValid())
                continue;          
           
            float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;
            startTime = System.nanoTime();

            game.getCurrentScreen().update(deltaTime);
            game.getCurrentScreen().present(deltaTime);
           
            Canvas canvas = holder.lockCanvas();
            canvas.getClipBounds(dstRect);
            canvas.drawBitmap(framebuffer, null, dstRect, null);                          
            holder.unlockCanvasAndPost(canvas);
        }
    }

    public void pause() {                        
        running = false;                        
        while(true) {
            try {
                renderThread.join();
                break;
            } catch (InterruptedException e) {
                // retry
            }
        }
    }        
}

Ecco qua, comunque vi avviso che il giochetto è soggetto a miglioramenti (abbastanza inutili senza la risoluzione di questo problema :-( :-().

Grazie in anticipo

Offline ianlearned

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    AVD 2.3.3 - AVD 4.0.3
  • Sistema operativo:
    Windows 7 - Ubuntu 12.04LTS
Re:Applicazione crasha!!!
« Risposta #1 il: 24 Settembre 2012, 17:49:51 CEST »
+1


at com.ran3000.PaperBall.GameScreen.drawWorld(GameScreen.java:160)[/size]at com.ran3000.PaperBall.GameScreen.present(GameScreen.java:114)at com.ran3000.PaperBall.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:40)


controlla queste righe che nel log vengono indicate e controlla cosa causa l'eccezione

Ciao

Offline RAN3000

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S 2
  • Sistema operativo:
    Ubuntu 12.04 LTS con Unity
Re:Applicazione crasha!!!
« Risposta #2 il: 25 Settembre 2012, 17:04:04 CEST »
0
Ho provato a vedere in quelle righe ma non c'è niente di significante.
Ho provato invece a settare alcuni breakpoint e a lanciarla in debug e ho visto che l' app si blocca nel richiamare le classi...ho provato anche a spostare a richiamarle direttamente e non attraverso alla classe world ma il problema persiste :-( :-( :-(

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Applicazione crasha!!!
« Risposta #3 il: 25 Settembre 2012, 21:26:36 CEST »
+1
world.ball genera una nullpointer,

Quindi o world è null oppure world.ball è null. (più probabile world=null, perchè altrimenti la eccezione te la darebbe dopo)

Per capire quale dei due io molto banalmente metterei un if

Codice (Java): [Seleziona]
if(world==null)
{
Log.e("Errore","world=null");
}
else
{
        if(world.ball==null)
        {
             Log.e("Errore","ball=null");
        }
         else
        {
              //tutto il tuo codice di adesso
        }
}
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline RAN3000

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S 2
  • Sistema operativo:
    Ubuntu 12.04 LTS con Unity
Re:Applicazione crasha!!!
« Risposta #4 il: 26 Settembre 2012, 09:12:40 CEST »
0
world.ball genera una nullpointer,

Quindi o world è null oppure world.ball è null. (più probabile world=null, perchè altrimenti la eccezione te la darebbe dopo)

Per capire quale dei due io molto banalmente metterei un if

Codice (Java): [Seleziona]
if(world==null)
{
Log.e("Errore","world=null");
}
else
{
        if(world.ball==null)
        {
             Log.e("Errore","ball=null");
        }
         else
        {
              //tutto il tuo codice di adesso
        }
}

Devo inserirlo nel drawWorld?

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Applicazione crasha!!!
« Risposta #5 il: 26 Settembre 2012, 20:59:35 CEST »
+1
si al posto di //tutto il tuo codice di adesso ci va il codice del drawworld attuale :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline RAN3000

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S 2
  • Sistema operativo:
    Ubuntu 12.04 LTS con Unity
Re:Applicazione crasha!!!
« Risposta #6 il: 27 Settembre 2012, 16:58:35 CEST »
0
Ok, grazie oggi non penso che riuscirò a provare :-( ; domani quasi sicuramente si

Offline RAN3000

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S 2
  • Sistema operativo:
    Ubuntu 12.04 LTS con Unity
Re:Applicazione crasha!!!
« Risposta #7 il: 28 Settembre 2012, 19:55:25 CEST »
0
Ecco qua il codice del GameScreen (per sicurezza, non si sa mai ;-)):
Codice (Java): [Seleziona]
package com.ran3000.PaperBall;

import java.util.List;

import android.util.Log;

import com.ran3000.PaperBall.framework.Graphics;
import com.ran3000.PaperBall.framework.Input.TouchEvent;
import com.ran3000.PaperBall.framework.Game;
import com.ran3000.PaperBall.framework.Pixmap;
import com.ran3000.PaperBall.framework.Screen;

public class GameScreen extends Screen {
        enum GameState {
        Ready,
        Running,
        Paused,
        GameOver
    }
   
    GameState state = GameState.Ready;
    World world;
    int oldScore = 0;
    String score = "0";
   
    Ball ball;
    Bomb1 bomb1;
    Bomb2 bomb2;
    Bomb3 bomb3;
    Bomb4 bomb4;
    Bomb5 bomb5;
    Bomb6 bomb6;
    Bomb7 bomb7;
    Explosion explosion;
   
        public GameScreen(Game game) {
                super(game);
        }

        @Override
        public void update(float deltaTime) {
                List<com.ran3000.PaperBall.framework.Input.TouchEvent> touchEvents = game.getInput().getTouchEvents();
       
        if(state == GameState.Ready)
            updateReady(touchEvents);
        if(state == GameState.Running)
            updateRunning(touchEvents, deltaTime);
        if(state == GameState.Paused)
            updatePaused(touchEvents);
        if(state == GameState.GameOver)
            updateGameOver(touchEvents);
        }

        private void updateReady(List<TouchEvent> touchEvents) {
                if(touchEvents.size() > 0)
                        state = GameState.Running;
        }
       
        private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {
                int len = touchEvents.size();
                for(int i = 0; i < len; i++){
                        TouchEvent event = touchEvents.get(i);
                        if(event.type == TouchEvent.TOUCH_UP){
                                if(inBounds(event, 12, 12, 48, 48)) {
                                        state = GameState.Paused;
                                }
                        }
                }
                world.update();
                if(world.gameOver){
                        state = GameState.GameOver;
                }
        }
       

        private void updatePaused(List<TouchEvent> touchEvents) {
                int len = touchEvents.size();
                for(int i = 0;i < len; i++){
                        TouchEvent event = touchEvents.get(i);
                        if(event.type == TouchEvent.TOUCH_UP){
                                if(inBounds(event, 250, 190, 100, 34)) {
                                        game.setScreen(new MainMenuScreen(game));
                                }
                                if(inBounds(event, 125, 192, 100, 34)) {
                                        oldScore = 0;
                                        state = GameState.Ready;
                                }
                                if(inBounds(event, 160, 90, 150, 68)) {
                                        state = GameState.Running;
                                }
                        }
                }
        }

        private void updateGameOver(List<TouchEvent> touchEvents) {
                int len = touchEvents.size();
                for(int i = 0; i < len; i++){
                        TouchEvent event = touchEvents.get(i);
                        if(event.type == TouchEvent.TOUCH_UP){
                                if(inBounds(event, 125, 192, 100, 34)) {
                                        Settings.addScore(world.score);
                            Settings.save(game.getFileIO());
                                        oldScore = 0;
                                        state = GameState.Ready;
                                }
                                if(inBounds(event, 250, 190, 100, 34)) {
                                        Settings.addScore(world.score);
                            Settings.save(game.getFileIO());
                                        game.setScreen(new MainMenuScreen(game));
                                }
                        }
                }
        }
       
        private boolean inBounds(TouchEvent event, int x, int y, int width, int height) {
        if(event.x > x && event.x < x + width - 1 &&
           event.y > y && event.y < y + height - 1)
            return true;
        else
            return false;
    }

        @Override
        public void present(float deltaTime) {
        Graphics g = game.getGraphics();
       
        g.drawPixmap(Assets.background, 0, 0);
        if(state == GameState.Ready)
            drawReadyUI();
        if(state == GameState.Running){
            drawRunningUI();
            drawWorld(world);
        }    
        if(state == GameState.Paused)
            drawPausedUI();
        if(state == GameState.GameOver)
            drawGameOverUI();
               
        }

        private void drawRunningUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.pauseButton, 435, 45);
                drawText(g, score, 10, 10);
        }

        private void drawGameOverUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.trasparence, 0, 0);
                g.drawPixmap(Assets.exit, 250, 190);
                g.drawPixmap(Assets.retry, 125, 192);
                g.drawPixmap(Assets.gameover, 137, 109);
        }

        private void drawPausedUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.trasparence, 0, 0);
                g.drawPixmap(Assets.exit, 250, 190);
                g.drawPixmap(Assets.retry, 125, 192);
                g.drawPixmap(Assets.playButton, 160, 90);
        }

        private void drawReadyUI() {
                Graphics g = game.getGraphics();
               
                g.drawPixmap(Assets.trasparence, 0, 0);
                g.drawPixmap(Assets.ready, 125, 112);
        }

        private void drawWorld(World world) {
               
                if(world==null){
                        Log.e("Errore","world=null");
                } else {
                        if(world.ball==null){
                                Log.e("Errore","ball=null");
                        } else {
                                Graphics g = game.getGraphics();
                               
                                int ex = 0;
                                int ey = 0;
                               
                                Pixmap ballPixmap = null;
                                if(ball.rotImg == 1)
                                        ballPixmap = Assets.paperBall1;
                                if(ball.rotImg == 2)
                                        ballPixmap = Assets.paperBall2;
                                if(ball.rotImg == 3)
                                        ballPixmap = Assets.paperBall3;
                                if(ball.rotImg == 4)
                                        ballPixmap = Assets.paperBall4;
                                if(ball.rotImg == 5)
                                        ballPixmap = Assets.paperBall5;
                                if(ball.rotImg == 6)
                                        ballPixmap = Assets.paperBall6;
                                if(ball.rotImg == 7)
                                        ballPixmap = Assets.paperBall7;
                                if(ball.rotImg == 8)
                                        ballPixmap = Assets.paperBall8;
                                if(ball.rotImg == 9)
                                        ballPixmap = Assets.paperBall9;
                                if(ball.rotImg == 10)
                                        ballPixmap = Assets.paperBall10;
                                if(ball.rotImg == 11)
                                        ballPixmap = Assets.paperBall11;
                                if(ball.rotImg == 12)
                                        ballPixmap = Assets.paperBall12;
                                if(ball.rotImg == 13)
                                        ballPixmap = Assets.paperBall13;
                                if(ball.rotImg == 14)
                                        ballPixmap = Assets.paperBall14;
                                if(ball.rotImg == 15)
                                        ballPixmap = Assets.paperBall15;
                                if(ball.rotImg == 16)
                                        ballPixmap = Assets.paperBall16;
                                if(ball.rotImg == 17)
                                        ballPixmap = Assets.paperBall17;
                                if(ball.rotImg == 18)
                                        ballPixmap = Assets.paperBall18;
                                if(ball.rotImg == 19)
                                        ballPixmap = Assets.paperBall19;
                                if(ball.rotImg == 20)
                                        ballPixmap = Assets.paperBall20;
                                if(ball.rotImg == 21)
                                        ballPixmap = Assets.paperBall21;
                                if(ball.rotImg == 22)
                                        ballPixmap = Assets.paperBall22;
                                if(ball.rotImg == 23)
                                        ballPixmap = Assets.paperBall23;
                                if(ball.rotImg == 24)
                                        ballPixmap = Assets.paperBall24;
                                if(ball.rotImg == 25)
                                        ballPixmap = Assets.paperBall25;
                                if(ball.rotImg == 26)
                                        ballPixmap = Assets.paperBall26;
                                if(ball.rotImg == 27)
                                        ballPixmap = Assets.paperBall27;
                                if(ball.rotImg == 28)
                                        ballPixmap = Assets.paperBall28;
                                if(ball.rotImg == 29)
                                        ballPixmap = Assets.paperBall29;
                                if(ball.rotImg == 30)
                                        ballPixmap = Assets.paperBall30;
                                if(ball.rotImg == 31)
                                        ballPixmap = Assets.paperBall31;
                                if(ball.rotImg == 32)
                                        ballPixmap = Assets.paperBall32;
                                if(ball.rotImg == 33)
                                        ballPixmap = Assets.paperBall33;
                                if(ball.rotImg == 34)
                                        ballPixmap = Assets.paperBall34;
                                if(ball.rotImg == 35)
                                        ballPixmap = Assets.paperBall35;
                                if(ball.rotImg == 36)
                                        ballPixmap = Assets.paperBall36;
                                int bx = (int) ball.xPosition;
                                int by = ball.y;
                                g.drawPixmap(ballPixmap, bx, by);
                               
                                Pixmap explosionPixmap = null;
                                if(explosion.explosion == 1)
                                        explosionPixmap = Assets.explosion1;
                                if(explosion.explosion == 2)
                                        explosionPixmap = Assets.explosion2;
                                if(explosion.explosion == 3)
                                        explosionPixmap = Assets.explosion3;
                                if(explosion.explosion == 4)
                                        explosionPixmap = Assets.explosion4;
                                if(bomb1.isCollided()){
                                        ex = bomb1.bX;
                                        ey = bomb1.bY;
                                }      
                                if(bomb2.isCollided()){
                                        ex = bomb2.bX;
                                        ey = bomb2.bY;
                                }      
                                if(bomb3.isCollided()){
                                        ex = bomb3.bX;
                                        ey = bomb3.bY;
                                }      
                                if(bomb4.isCollided()){
                                        ex = bomb4.bX;
                                        ey = bomb4.bY;
                                }      
                                if(bomb5.isCollided()){
                                        ex = bomb5.bX;
                                        ey = bomb5.bY;
                                }      
                                if(bomb6.isCollided()){
                                        ex = bomb6.bX;
                                        ey = bomb6.bY;
                                }      
                                if(bomb7.isCollided()){
                                        ex = bomb7.bX;
                                        ey = bomb7.bY;
                                }      
                                g.drawPixmap(explosionPixmap, ex, ey);
                               
                                Pixmap bomb1Pixmap = null;
                                if(bomb1.bImg == 0)
                                        bomb1Pixmap = Assets.bomb0;
                                if(bomb1.bImg == 1)
                                        bomb1Pixmap = Assets.bomb1;
                                if(bomb1.bImg == 2)
                                        bomb1Pixmap = Assets.bomb2;
                                if(bomb1.bImg == 3)
                                        bomb1Pixmap = Assets.bomb3;
                                if(bomb1.bImg == -1)
                                        bomb1Pixmap = Assets.bomb4;
                                if(bomb1.bImg == -2)
                                        bomb1Pixmap = Assets.bomb5;
                                if(bomb1.bImg == -3)
                                        bomb1Pixmap = Assets.bomb6;
                                int b1x = bomb1.bX;
                                int b1y = bomb1.bY;
                                g.drawPixmap(bomb1Pixmap, b1x, b1y);
                               
                                Pixmap bomb2Pixmap = null;
                                if(bomb2.bImg == 0)
                                        bomb2Pixmap = Assets.bomb0;
                                if(bomb2.bImg == 1)
                                        bomb2Pixmap = Assets.bomb1;
                                if(bomb2.bImg == 2)
                                        bomb2Pixmap = Assets.bomb2;
                                if(bomb2.bImg == 3)
                                        bomb2Pixmap = Assets.bomb3;
                                if(bomb2.bImg == -1)
                                        bomb2Pixmap = Assets.bomb4;
                                if(bomb2.bImg == -2)
                                        bomb2Pixmap = Assets.bomb5;
                                if(bomb2.bImg == -3)
                                        bomb2Pixmap = Assets.bomb6;
                                int b2x = bomb2.bX;
                                int b2y = bomb2.bY;
                                g.drawPixmap(bomb2Pixmap, b2x, b2y);
                               
                                Pixmap bomb3Pixmap = null;
                                if(bomb3.bImg == 0)
                                        bomb3Pixmap = Assets.bomb0;
                                if(bomb3.bImg == 1)
                                        bomb3Pixmap = Assets.bomb1;
                                if(bomb3.bImg == 2)
                                        bomb3Pixmap = Assets.bomb2;
                                if(bomb3.bImg == 3)
                                        bomb3Pixmap = Assets.bomb3;
                                if(bomb3.bImg == -1)
                                        bomb3Pixmap = Assets.bomb4;
                                if(bomb3.bImg == -2)
                                        bomb3Pixmap = Assets.bomb5;
                                if(bomb3.bImg == -3)
                                        bomb3Pixmap = Assets.bomb6;
                                int b3x = bomb3.bX;
                                int b3y = bomb3.bY;
                                g.drawPixmap(bomb3Pixmap, b3x, b3y);
                               
                                Pixmap bomb4Pixmap = null;
                                if(bomb4.bImg == 0)
                                        bomb4Pixmap = Assets.bomb0;
                                if(bomb4.bImg == 1)
                                        bomb4Pixmap = Assets.bomb1;
                                if(bomb4.bImg == 2)
                                        bomb4Pixmap = Assets.bomb2;
                                if(bomb4.bImg == 3)
                                        bomb4Pixmap = Assets.bomb3;
                                if(bomb4.bImg == -1)
                                        bomb4Pixmap = Assets.bomb4;
                                if(bomb4.bImg == -2)
                                        bomb4Pixmap = Assets.bomb5;
                                if(bomb4.bImg == -3)
                                        bomb4Pixmap = Assets.bomb6;
                                int b4x = bomb4.bX;
                                int b4y = bomb4.bY;
                                g.drawPixmap(bomb4Pixmap, b4x, b4y);
                               
                                Pixmap bomb5Pixmap = null;
                                if(bomb5.bImg == 0)
                                        bomb5Pixmap = Assets.bomb0;
                                if(bomb5.bImg == 1)
                                        bomb5Pixmap = Assets.bomb1;
                                if(bomb5.bImg == 2)
                                        bomb5Pixmap = Assets.bomb2;
                                if(bomb5.bImg == 3)
                                        bomb5Pixmap = Assets.bomb3;
                                if(bomb5.bImg == -1)
                                        bomb5Pixmap = Assets.bomb4;
                                if(bomb5.bImg == -2)
                                        bomb5Pixmap = Assets.bomb5;
                                if(bomb5.bImg == -3)
                                        bomb5Pixmap = Assets.bomb6;
                                int b5x = bomb5.bX;
                                int b5y = bomb5.bY;
                                g.drawPixmap(bomb5Pixmap, b5x, b5y);
                               
                                Pixmap bomb6Pixmap = null;
                                if(bomb6.bImg == 0)
                                        bomb6Pixmap = Assets.bomb0;
                                if(bomb6.bImg == 1)
                                        bomb6Pixmap = Assets.bomb1;
                                if(bomb6.bImg == 2)
                                        bomb6Pixmap = Assets.bomb2;
                                if(bomb6.bImg == 3)
                                        bomb6Pixmap = Assets.bomb3;
                                if(bomb6.bImg == -1)
                                        bomb6Pixmap = Assets.bomb4;
                                if(bomb6.bImg == -2)
                                        bomb6Pixmap = Assets.bomb5;
                                if(bomb6.bImg == -3)
                                        bomb6Pixmap = Assets.bomb6;
                                int b6x = bomb6.bX;
                                int b6y = bomb6.bY;
                                g.drawPixmap(bomb6Pixmap, b6x, b6y);
                               
                                Pixmap bomb7Pixmap = null;
                                if(bomb7.bImg == 0)
                                        bomb7Pixmap = Assets.bomb0;
                                if(bomb7.bImg == 1)
                                        bomb7Pixmap = Assets.bomb1;
                                if(bomb7.bImg == 2)
                                        bomb7Pixmap = Assets.bomb2;
                                if(bomb7.bImg == 3)
                                        bomb7Pixmap = Assets.bomb3;
                                if(bomb7.bImg == -1)
                                        bomb7Pixmap = Assets.bomb4;
                                if(bomb7.bImg == -2)
                                        bomb7Pixmap = Assets.bomb5;
                                if(bomb7.bImg == -3)
                                        bomb7Pixmap = Assets.bomb6;
                                int b7x = bomb7.bX;
                                int b7y = bomb7.bY;
                                g.drawPixmap(bomb7Pixmap, b7x, b7y);
                               
                                if(world.BallCollided(ballPixmap, bomb1Pixmap, b1x, bx, b1y, by)) {
                                        world.gameOver = true;
                                }
                                if(world.BallCollided(ballPixmap, bomb2Pixmap, bx, b2x, by, b2y)) {
                                        world.gameOver = true;
                                }
                                if(world.BallCollided(ballPixmap, bomb3Pixmap, bx, b3x, by, b3y)) {
                                        world.gameOver = true;
                                }
                                if(world.BallCollided(ballPixmap, bomb4Pixmap, bx, b4x, by, b4y)) {
                                        world.gameOver = true;
                                }
                                if(world.BallCollided(ballPixmap, bomb5Pixmap, bx, b5x, by, b5y)) {
                                        world.gameOver = true;
                                }
                                if(world.BallCollided(ballPixmap, bomb6Pixmap, bx, b6x, by, b6y)) {
                                        world.gameOver = true;
                                }
                                if(world.BallCollided(ballPixmap, bomb7Pixmap, bx, b7x, by, b7y)) {
                                        world.gameOver = true;
                                }
                        }
                        }
                }
               
       
        public void drawText(Graphics g, String line, int x, int y) {
        int len = line.length();
        for (int i = 0; i < len; i++) {
            char character = line.charAt(i);

            if (character == ' ') {
                x += 20;
                continue;
            }

            int srcX = 0;
            int srcWidth = 0;
            if (character == '.') {
                srcX = 200;
                srcWidth = 10;
            } else {
                srcX = (character - '0') * 20;
                srcWidth = 20;
            }

            g.drawPixmap(Assets.numbers, x, y, srcX, 0, srcWidth, 32);
            x += srcWidth;
        }
    }
       

        @Override
        public void pause() {
                if(state == GameState.Running)
            state = GameState.Paused;
       
        if(world.gameOver) {
            Settings.addScore(world.score);
            Settings.save(game.getFileIO());
        }
        }

        @Override
        public void resume() {
                // TODO Auto-generated method stub
               
        }

        @Override
        public void dispose() {
                // TODO Auto-generated method stub
               
        }
}

Ed ecco infine il nuovo logcat:
Codice: [Seleziona]
09-28 19:54:07.846: E/AndroidRuntime(323): FATAL EXCEPTION: Thread-12
09-28 19:54:07.846: E/AndroidRuntime(323): java.lang.NullPointerException
09-28 19:54:07.846: E/AndroidRuntime(323):         at com.ran3000.PaperBall.GameScreen.updateRunning(GameScreen.java:69)
09-28 19:54:07.846: E/AndroidRuntime(323):         at com.ran3000.PaperBall.GameScreen.update(GameScreen.java:47)
09-28 19:54:07.846: E/AndroidRuntime(323):         at com.ran3000.PaperBall.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:39)
09-28 19:54:07.846: E/AndroidRuntime(323):         at java.lang.Thread.run(Thread.java:1019)

Offline ianlearned

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    AVD 2.3.3 - AVD 4.0.3
  • Sistema operativo:
    Windows 7 - Ubuntu 12.04LTS
Re:Applicazione crasha!!!
« Risposta #8 il: 28 Settembre 2012, 20:53:09 CEST »
0
puoi aggiungere il codice di

 com.ran3000.PaperBall.GameScreen.updateRunning(GameScreen.java:69)
 com.ran3000.PaperBall.GameScreen.update(GameScreen.java:47)
 com.ran3000.PaperBall.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:39)

sono curioso di "leggere" cosa c'è scritto in questi 3 file e controllare cosa provoca il NullPointerException.
Grazie
Ciao

Offline RAN3000

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S 2
  • Sistema operativo:
    Ubuntu 12.04 LTS con Unity
Re:Applicazione crasha!!!
« Risposta #9 il: 29 Settembre 2012, 07:33:56 CEST »
0
E nel post precedente nel "GameScrean"