天天看点

《Java 2D游戏编程入门》—— 8.2 创建一个原型小行星

本节书摘来异步社区《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所示。

《Java 2D游戏编程入门》—— 8.2 创建一个原型小行星

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中没有实际的模型代码。那是编辑器和工厂的工作,我们将在后面介绍。