one dev java android cocos2d-android invocationtargetexception

one - dev java



¿Por qué recibo una InvocationTargetException? Juego de Android 2D (1)

Estoy haciendo un juego 2D en Android con Cocos2D, escrito en Java. Aquí está mi código para las cosas principales:

public void gameLoop(float dt) { //Player Gravity if(canExecuteMovement(0, 6)) { guy.moveY(6); } //Player Movement if(direction == 1) { if(canExecuteMovement(-3, 0)) guy.moveX(-3); } else if(direction == 2) { if(canExecuteMovement(3, 0)) guy.moveX(3); } } private boolean canExecuteMovement(int xChange, int yChange) { int projectedX = guy.getBounds().left + xChange; int projectedY = guy.getBounds().top + yChange; Log.i("DD", "guy:" + guy.getBounds().toString()); Rect projectedBounds = new Rect(projectedX, projectedY, projectedX + guy.getWidth(), projectedY + guy.getHeight()); Log.i("DD", "guy:" + projectedBounds.toString()); for (int i = 0; i < platformCount; i++) { if (Rect.intersects(projectedBounds, platform[i].getBounds())) { return false; } } return true; }

Como puede ver, esta función se ve bien y los rectángulos en canExecuteMovement también están perfectamente bien, sin embargo en esta línea:

LINE 107: if (Rect.intersects(projectedBounds, platform[i].getBounds())) {

Estoy recibiendo una InvocationTargetException. Aquí está el logcat:

01-21 23:10:12.601: W/System.err(13118): java.lang.reflect.InvocationTargetException 01-21 23:10:12.601: W/System.err(13118): at java.lang.reflect.Method.invokeNative(Native Method) 01-21 23:10:12.605: W/System.err(13118): at java.lang.reflect.Method.invoke(Method.java:511) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.actions.CCTimer.update(CCTimer.java:82) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.actions.CCScheduler.tick(CCScheduler.java:253) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.nodes.CCDirector.drawCCScene(CCDirector.java:679) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:649) 01-21 23:10:12.605: W/System.err(13118): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462) 01-21 23:10:12.605: W/System.err(13118): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216) 01-21 23:10:12.605: W/System.err(13118): Caused by: java.lang.NullPointerException 01-21 23:10:12.608: W/System.err(13118): at com.qasim.platformer.GameLayer.canExecuteMovement(GameLayer.java:107) 01-21 23:10:12.608: W/System.err(13118): at com.qasim.platformer.GameLayer.gameLoop(GameLayer.java:86) 01-21 23:10:12.608: W/System.err(13118): ... 8 more 01-21 23:10:12.620: D/dalvikvm(13118): GC_CONCURRENT freed 460K, 6% free 9279K/9863K, paused 2ms+3ms 01-21 23:10:12.624: I/DD(13118): guy:Rect(252, 63 - 300, 111)

¿Cual podría ser el problema? La clase getBounds () en guy es esta:

public Rect getBounds() { return new Rect(x, y, x+width, y+height); }


InvocationTargetException es solo un contenedor para una excepción que se lanza dentro de una invocación dinámica. El verdadero problema es la NullPointerException que está envolviendo:

Caused by: java.lang.NullPointerException at com.qasim.platformer.GameLayer.canExecuteMovement(GameLayer.java:107) at com.qasim.platformer.GameLayer.gameLoop(GameLayer.java:86)

Como has señalado, esta es la línea ofensiva:

if (Rect.intersects(projectedBounds, platform[i].getBounds())) {

El único lugar donde podría estar sucediendo un puntero nulo en esta línea es en la platform[i].getBounds() . Cualquiera de las dos platform es null , o el elemento en la platform[i] es.