本節書摘來異步社群《java 2d遊戲程式設計入門》一書中的第8章,第8.2節,作者:【美】timothy wright(萊特),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
prototypeasteroid類位于javagames.prototype包中,它表示一個穿越太空的隕石。在建立的時候,使用了一個随機的速率和旋轉。java的随機數生成器隻能傳回0到1之間的浮點數,是以,要建立在任意範圍内分布的随機數,需要一些額外的步驟。例如,要傳回-3到7之間的随機數,應按照如下步驟進行。
1.用最大值減去最小值,計算随機數之間的差距。
2.生成從0到1的一個随機浮點數。
3.将随機數乘以差距值。
4.通過加上最小值來遷移範圍。
這些步驟聽起來有些令人混淆,實際上并非如此。
private float getrandomradians( int mindegree, int maxdegree ) {
int rand = new random().nextint( maxdegree - mindegree + 1 );
return (float)math.toradians( rand + mindegree );
}<code>`</code>
getrandomrotationdelta()方法傳回了(5,45)到(–5,–45)之間的一個角度(弧度表示),如圖8.8所示。

public void setpolygon( vector2f[] polygon );
public void setposition( vector2f position );
public vector2f getposition();
public void setsize( prototypeasteroid.size size );
public prototypeaster.size getsize()<code>`</code>
大小是一個枚舉類型的值:
package javagames.util;
import java.awt.*;
import java.util.list;
public class utility {
// ... other methods left out
// ... new methods are below
public static void fillpolygon( graphics2d g, vector2f[] polygon ) {
polygon p = new polygon();
for( vector2f v : polygon ) {
p.addpoint( (int)v.x, (int)v.y );
}
g.fill( p );
}
public static void fillpolygon( graphics2d g, list polygon ) {
pointinpolygon()方法和前面所讨論的方法相同。contains()方法接受一個點,如果polygonwrapper所複制的任何多邊形包含該點的話,它傳回true。注意,prototypeasteroid中沒有實際的模型代碼。那是編輯器和工廠的工作,我們将在後面介紹。