天天看點

《Java 2D遊戲程式設計入門》—— 8.6 原型Ship類

本節書摘來異步社群《java 2d遊戲程式設計入門》一書中的第8章,第8.6節,作者:【美】timothy wright(萊特),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

prototypeship代碼位于javagames.prototype包中,這也是一目了然的。構造方法為移動飛船設定了一些常量,并且直接編碼了模型的點。還有set()和get()方法用于銷毀狀态、角度、加速等,還有一些方法能夠向左或向右旋轉飛船。

launchbullet()方法傳回一個新的prototypebullet對象,該對象轉換為飛船的突起部分。

v__1=v__0+at

vector2f accel = vector2f.polar(angle, curacc);<code>`</code>

接下來,新的速度保持在最大值之下。如果沒有執行這一步,飛船會持續加速并且最終會比子彈移動得還要快。注意這裡使用了最小值,是以當最大速度不再比實際速度小的時候,最大速度為1.0并且保持不變。隻有在最大速度小于實際值的時候,速度才會受到有效的限制。

float slowdown = 1.0f - friction * time;

velocity = velocity.mul( slowdown );<code>`</code>

最後,更新位置,然後折返。

// flyingshipexample.java

protected void updateobjects( float delta ) {

  super.updateobjects( delta );

  ship.update( delta );

  arraylist copy =

    new arraylist( bullets );

  for( prototypebullet bullet : copy ) {

    bullet.update( delta );

    if( wrapper.hasleftworld( bullet.getposition() ) ) {

      bullets.remove( bullet );

    }

  }

}<code>`</code>

flyingshipexample如下所示: