spose 方法。
创建Eclipse游戏插件,第2部分: 构建和发射BB枪(6)
时间:2011-02-10 IBM Tyler Anderson
在退出时清除对象
当 Eclipse 或视图关闭时,需要取消对象的分配。这是 dispose 方法的用途。请如清单 8 所示那样定义它。
清单 8. 清除对象
public void dispose() {
GLU.gluDeleteQuadric(Gun.QUADRIC);
GLU.gluDeleteQuadric(Bullet.QUADRIC);
GLU.gluDeleteQuadric(Bug.QUADRIC);
pow.dispose();
this.gun.dispose();
for(int i = 0; i < bugs.length; i++)
bugs[i].dispose();
for(int i = 0; i < bullets.length; i++)
bullets[i].dispose();
super.dispose();
}
取消二次曲面(一个曲线或平面,它在 Cartesian 座标中的公式属于第二阶)的分配,清除每个对象,然后清除父类。下面开始创建形状。
创建形状
OpenGL 全权负责创建形状。在这里,我们创建虫子、BB 枪、BB 弹和一些文本。
创建虫子
虫子是简单的球体,使用轮换的颜色。要创建形状,请在 GameScene 类的 dispose 方法后面添加以下静态类,如清单 9 所示。
清单 9. 创建虫子
private static class Bug extends CompiledShape {
public static final float RADIUS = 1.7f;
public static int QUADRIC;
public float[] color;
public Bug(float[] color) {
this.color = color;
GL.glNewList(this.getListIndex(), GL.GL_COMPILE);
GL.glBegin(GL.GL_QUADS);
GL.glColor4fv(color);
bug();
GL.glEnd();
GL.glEndList();
}
public void bug(){
GL.glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
GLU.gluSphere(Bug.QUADRIC, RADIUS, 100, 100);
GL.glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
}
...
}
这个类定义了一个半径,并保存从 initGL 方法传递过来的颜色。形状得到自己的对象列表,这些对象包含形状的所有结构(线条、球体等等)。虫子只由球体构成。请看一眼虫子,如图 3 所示。
图 3. 绘制虫子
创建Eclipse游戏插件,第2部分: 构建和发射BB枪(7)
时间:2011-02-10 IBM Tyler Anderson
下面,看一些需要创建的更复杂的东西:枪。
为枪设计结构
枪的创建有些困难,因为它包含多个顶点。请定义枪的顶点,如清单 10 所示。
清单 10. 枪的顶点
private static class Gun extends CompiledShape {
public static int QUADRIC;
private static float[] RED =
new float[] {1f, 0.0f, 0.0f, 1.0f};
private static float val1 = 0f, val2 = .5f,
val3 = -.5f, val4 = -1.5f, val5 = -2f;
private static float[] v1 = {val1, val1, val1};
private static float[] v2 = {val1, val1, val3};
private static float[] v3 = {val1, val1, val5};
private static float[] v4 = {val2, val1, val5};
private static float[] v5 = {val2, val3, val5};
private static float[] v6 = {val1, val3, val5};
private static float[] v7 = {val2, val3, val3};
private static float[] v8
|