2016-08-18 61 views
-1

我目前正在一個項目中,用戶必須避免與Spaceship(雪碧)小行星(用ShapeRenderer繪製)。小行星保存在列表陣列中。現在我試圖在Sapceship和Asteroids碰撞時創建一個碰撞方法。爲了使它儘可能簡單,我想繪製一個圍繞飛船的圓圈並檢查碰撞。 Eclipse說我有一個我有java.lang.IllegalStateException: begin must be called first科林森與圈

小行星類別:

public Circle getBounds() 
{ 
    return new Circle(p.x, p.y, radius); 
} 

小行星類別:

public void update() 
{ 

    for (Asteroid a : asteroids) 
    { 
     a.update(Gdx.graphics.getDeltaTime(), xMin, xMax, yMin, yMax); 
    } 

     for (int i = 0; i < anzahl; i++) 
     { 

      Asteroid a1 = asteroids.get(i); 

      for (int j = i + 1; j < anzahl; j++) 
      { 

      Asteroid a2 = asteroids.get(j); 

      float abstand = a1.abstand(a2); 

      if (abstand < a1.getRadius() + a2.getRadius()) 
      { 

       berechneKollision(a1, a2); 

      } 

     } 

    } 

} 


public void render(ShapeRenderer renderer) 
{ 

    for (Asteroid a : asteroids) 
    { 
     renderer.setColor(1, 1, 0, 1); 
     renderer.circle(a.getP().x, a.getP().y, a.getRadius()); 
    } 
} 

宇宙飛船類別:

public Circle getBounds(){ 
    return new Circle(sprite.getX(), sprite.getY(), sprite.getWidth()); 
} 

CollisionManager:

public class CollisionManager extends Asteroids { 

     private Spaceship s = new Spaceship(); 

    public void checkCollisions(){ 
     for(int i = 0; i < asteroids.size(); i++) 
     { 
      if(asteroids.get(i).getBounds().contains(s.getBounds()))       
      { 
      //asteroids.remove(asteroids); 
      System.out.println("KOLLISION"); 
      } 
     } 
    } 

} 

屏幕:

public abstract class Screen { 

    public abstract void create(); 

    public abstract void render(SpriteBatch batch); 

    public abstract void update(); 

    public abstract void update(ShapeRenderer renderer); 

    public abstract void update(OrthoCamera cam); 

    public abstract void resize(int width, int height); 

    public abstract void render(ShapeRenderer renderer); 

    public abstract void dispose(int width, int height); 

    public abstract void dispose(); 

    public abstract void pause(); 

    public abstract void resume(); 

    public abstract void checkCollisions(); 
} 

MenuScreen:

public class MenuScreen extends Screen { 

    private OrthoCamera cam; 
    private Spaceship spaceship; 
    private Asteroids asteroids; 
    CollisionManager cm; 

    . 
    . 
    . 

    public void checkCollisions() 
    { 
    cm.checkCollisions(); 
    } 

主類:

public class MyGdxGame implements ApplicationListener { 


SpriteBatch batch; 
ShapeRenderer renderer; 
OrthoCamera cam; 
public static int WIDTH = 1080 , HEIGHT = 720; // resolution 

@Override 
public void create() { 
    batch = new SpriteBatch(); 
    renderer = new ShapeRenderer(); 
    ScreenManager.setScreen(new MenuScreen()); 

} 
@Override 
public void render() { 

    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    if(ScreenManager.getCurrentScreen() != null){ 
     ScreenManager.getCurrentScreen().checkCollisions(); 
     ScreenManager.getCurrentScreen().update(); 
     ScreenManager.getCurrentScreen().update(renderer); 
     ScreenManager.getCurrentScreen().update(cam); 

    } 

    if(ScreenManager.getCurrentScreen() != null){ 
     ScreenManager.getCurrentScreen().render(batch); 
     ScreenManager.getCurrentScreen().render(renderer); 
    } 
} 
+0

所有我看到的是一大塊代碼,但我看不到你的問題... – SomeJavaGuy

+2

[這是重複的SO問題到你的異常](http://stackoverflow.com/questions/218384/what-is -a-nullpointerexception-and-how-do-i-fix-it) – SomeJavaGuy

+1

你真的爲'cm'指定了一個值嗎? –

回答

0

你需要繪製和之前調用

shaperenderer.begin(ShapeRenderer.ShapeType type) 
shaperenderer.end(); 

繪製結束後呈現astroids類。