2012-01-22 10 views
17

मैं जावा में लिखित कोकोस 2 डी के साथ एंड्रॉइड में 2 डी गेम बना रहा हूं। यहां मुख्य सामान के लिए मेरे कोड है:मुझे आमंत्रण लक्ष्यीकरण अपवाद क्यों मिल रहा है? एंड्रॉइड 2 डी गेम

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

जैसा कि आप देख, इस समारोह अभी ठीक लग रहा है, और canExecuteMovement में आयतों भी बिल्कुल ठीक हैं, हालांकि इस पंक्ति में:

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

मैं कर रहा हूँ एक InvocationTargetException प्राप्त करना। यहां लॉगकैट है:

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) 

समस्या क्या हो सकती है? पुरुष में getBounds() वर्ग यह है:

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

आपके GameLayer.java प्रोग्राम में लाइन 107 क्या है? – kosa

उत्तर

45

InvocationTargetException सिर्फ एक अपवाद है कि एक गतिशील मंगलाचरण के भीतर फेंक दिया है के लिए एक आवरण है।

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

केवल जगह एक अशक्त सूचक इस लाइन पर हो रहा हो सकता है:

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

आपके कहे अनुसार किया है, इस हमलावर लाइन है: सच समस्या NullPointerException कि यह रैपिंग है platform[i].getBounds() पर। या तो platform स्वयं null है, या platform[i] पर तत्व है।

+3

आपके द्वारा पारित किए गए किसी भी व्यक्ति के लिए _cget_ को 'e.getCause()' – djthoms

संबंधित मुद्दे