天天看點

《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中沒有實際的模型代碼。那是編輯器和工廠的工作,我們将在後面介紹。