本節書摘來異步社群《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如下所示: