2016-03-10 41 views
0

我想在jetActor被觸摸時顯示併發射子彈,它可以是無限的子彈。我認爲它可以以某種方式用數組完成,但是我嘗試越多,我就越不理解。此外,當演員被觸碰倍增時間,子彈走得更快。LibGdx如何創建多個子彈?

這是代碼,它現在所做的全部工作就是它顯示一架噴氣式飛機和一顆子彈,並且當噴氣式飛機被觸碰時,它會「發射」子彈。

public class MyGdxGame implements ApplicationListener{ 

private Texture bulletTexture; 
private Texture jetTexture; 
private Stage stage; 
private BulletActor[] bulletActor; 
private JetActor jetActor; 

float bulletX = 650, bulletY = 200; 
float jetX = 700,jetY = 150; 
boolean started; 

public class JetActor extends Actor{ 

    public JetActor() { 
     setBounds(jetX,jetY,jetTexture.getWidth(),jetTexture.getHeight()); 
     this.addListener(new InputListener(){ 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int buttons){ 
       started = true; 
       bulletActor[2] = new BulletActor(); 
       System.out.println("Touched"); 
       return true; 
      } 
     }); 

    } 

    @Override 
    public void draw(Batch batch, float parentAlpha) { 
     batch.draw(jetTexture, jetX, jetY, jetTexture.getWidth(), jetTexture.getHeight()); 
    } 
} 

public class BulletActor extends Actor{ 
    @Override 
    public void act(float delta) { 
     if(started){ 
      bulletX -=3; 
     } 
    } 

    @Override 
    public void draw(Batch batch, float parentAlpha) { 
     batch.draw(bulletTexture,bulletX,bulletY,bulletTexture.getWidth(), bulletTexture.getHeight()); 
    } 
} 

@Override 
public void create() { 
    bulletTexture = new Texture("C:\\Users\\User\\Documents\\LibGdxMainProjects\\SampleGame1\\android\\assets\\bullet.png"); 
    jetTexture = new Texture("C:\\Users\\User\\Documents\\LibGdxMainProjects\\SampleGame1\\android\\assets\\jet.png"); 
    stage = new Stage(); 

    jetActor = new JetActor(); 
    bulletActor = new BulletActor[10]; 
    stage.addActor(jetActor); 

    Gdx.input.setInputProcessor(stage); 

    bulletActor[1] = new BulletActor(); 
    stage.addActor(bulletActor[1]); 

} 


@Override 
public void dispose() { 
} 

@Override 
public void render() { 
    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    stage.act(Gdx.graphics.getDeltaTime()); 
    stage.draw(); 
} 

@Override 
public void resize (int width, int height){ 
} 

@Override 
public void pause() { 
} 

@Override 
public void resume() { 

} 

}

回答

1

這將增添無限子彈。問題在於,從0到無限是永恆的。因此,更好地當你想得出這些子彈,只是循環列表並更新每個人的子彈不可能有無限的子彈......

List<BulletActor> bulletList = new ArrayList<BulletActor>(); 
for (int i = 0; i < unlimited; i++) 
{ 
    bulletList.add(new bullet(); 
} 

for (Bullet bullet : bulletList) 
{ 
    bullet.act(); 
    bullet.draw(); 
} 

但由於這些子彈是演員,你可能也只是把它們添加到階段,因此階段會照顧act()draw()你。

//If you want to store them you still need a list or other datastructure to hold them. 
List<BulletActor> bulletList = new ArrayList<BulletActor>(); 
for (int i = 0; i < unlimited; i++) 
{ 
    bulletList.add(new bullet(); 
    stage.addActor(new BulletActor); // <-- Just adding them to the stage takes care of the act and draw methods. 
} 

但是你的代碼有很多錯誤。在繼續之前,您最好學習一些基本的Java。

bulletActor = new BulletActor[10]; 

不會爲您創建10個子彈。它會創建一個陣列,可能會爲您保留10顆子彈。當你聲明一個字段時,你可以看到它是一個與你創建的對象大小完全相同的框。

BulletActor myBullet // <-- Empty box (Null) where 1 BulletActor can be stored. 

new BulletActor() // <-- A Bullet actor object 

BulletActor myBullet = new BulletActor() // <-- Box with a BulletActor in it 

BulletActor[] bulletArray = new BulletActor[10] // <-- 10 empty boxes 

//Now store bullets in these boxes 
for (int i = 0; i < bulletArray.length; i++) 
{ 
    bulletArray[i] = new BulletActor(); 
} 

這只是您應該知道的一些基本知識。目前,你更咬牙切齒,你可以咀嚼,所以自己真的很好,並且學習所有關於面向對象編程的基礎知識。