本节书摘来异步社区《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中没有实际的模型代码。那是编辑器和工厂的工作,我们将在后面介绍。