0

У меня есть эта часть кода в проекте, в которой получается «исключение нулевого указателя» в этой строке CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width),, но я объявил стоимость судна как protected CCSprite ship; в классе, но все равно получаю " null указатель исключение "ошибка.
вот полный кодInvocation TargetException и null Исключение указателя в android

public void update(float dt) 
{ 


      for (CCSprite target : _targets) 
       { 
        CGRect targetRect = CGRect.make(target.getPosition().x - (target.getContentSize().width), 
                       target.getPosition().y - 
                      (target.getContentSize().height), 
                  target.getContentSize().width,target.getContentSize().height); 

        System.out.println("shipstodelete : " + ship); 

        CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width), 
          ship.getPosition().y - (ship.getContentSize().height), 
          ship.getContentSize().width,ship.getContentSize().height); 



       if (CGRect.intersects(targetRect, shipRect)) 
        { 

        this.removeChild(ship, true); 
        //removeChild(ship, true); 
        } 
       } 

это кодирование для корабля спрайта в конструкторе

CCSprite ship = CCSprite.sprite("ship150.png"); 
    ship.setPosition(CGPoint.ccp(25,100)); 
    ship.setAnchorPoint(CGPoint.ccp(0,0)); 
    ship.setTag(4); 
     addChild(ship); 

выход LogCat

06-10 04:53:13.463: W/System.err(1138): java.lang.reflect.InvocationTargetException 
06-10 04:53:13.473: W/System.err(1138): at java.lang.reflect.Method.invokeNative(Native Method) 
06-10 04:53:13.473: W/System.err(1138): at java.lang.reflect.Method.invoke(Method.java:511) 
06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.actions.CCTimer.update(CCTimer.java:82) 
    06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.actions.CCScheduler.tick(CCScheduler.java:253) 
06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.nodes.CCDirector.drawCCScene(CCDirector.java:679) 
06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:649) 
06-10 04:53:13.483: W/System.err(1138): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516) 
06-10 04:53:13.483: W/System.err(1138): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 
06-10 04:53:13.483: W/System.err(1138): Caused by: java.lang.NullPointerException 
06-10 04:53:13.483: W/System.err(1138): at com.trialcocos.GameL.update(GameL.java:183) 
06-10 04:53:13.483: W/System.err(1138): ... 8 more 
+0

Где вы устанавливаете защищенный корабль CCSprite; к значению? –

+0

да @LarryMcKenzie –

+0

да на самом деле не отвечает на мой вопрос ... Где вы устанавливаете значение «корабль»? Я отправлю ответ, чтобы объяснить больше того, что я имею в виду ... –

ответ

0

Вы должны установить защищенный атрибут значение в противном случае это нулевой.

protected CCSprite ship; 

public void update(float dt){ 
    for (CCSprite target : _targets){ 
     CGRect targetRect = CGRect.make(target.getPosition().x - (target.getContentSize().width), target.getPosition().y - (target.getContentSize().height), target.getContentSize().width,target.getContentSize().height); 
     System.out.println("shipstodelete : " + ship); 
     CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width), ship.getPosition().y - (ship.getContentSize().height), ship.getContentSize().width,ship.getContentSize().height); 
     if (CGRect.intersects(targetRect, shipRect)){ 
      this.removeChild(ship, true); 
      //removeChild(ship, true); 
     } 
    } 
} 
... 

public void someOtherMethodYouDontMention(){ 
    //Notice I set the previously declared ship value not a new ship value 
    ship = CCSprite.sprite("ship150.png"); 
    ship.setPosition(CGPoint.ccp(25,100)); 
    ship.setAnchorPoint(CGPoint.ccp(0,0)); 
    ship.setTag(4); 
    addChild(ship); 
} 
+0

Я не помещал код для спрайта (корабля) в addTarget(), только объявлял значение для корабля в конструкторе, это ошибка, которую я сделал, а также добавил _ships.remove (спрайты); этот фрагмент кода в «public void spriteMoveFinished (Object sender)», поэтому это заставило его работать, в любом случае спасибо :) @ Larry McKenzie –