快速业务通道

创建Eclipse游戏插件,第2部分: 构建和发射BB枪 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
ITION,             new float[] {-50.f, 50.0f, 100.0f, 1.0f});      GL.glEnable(GL.GL_LIGHT1);      GL.glEnable(GL.GL_LIGHTING);      GL.glEnable(GL.GL_COLOR_MATERIAL);      GL.glColorMaterial(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE); ...

我们要初始化 GL.GL_LIGHT1 的灯光和光源。首先,设置漫射灯和环境灯的颜色,然后设置漫射灯的位置。接下来,开启 lighting 和 light1。然后开启着色,最后一行指定环境灯和漫射灯可以影响着色对象的颜色。接下来,初始化将在本教程后面创建的定制对象。

创建Eclipse游戏插件,第2部分: 构建和发射BB枪(5)

时间:2011-02-10 IBM Tyler Anderson

初始化定制对象

还有几个特性需要开启,还有很多对象需要初始化。在这里,要创建二次曲面(quadric) 的句柄,二次曲面是复杂的形状,例如球体、平面、柱子。最后完成对 OpenGL 上下文的初始化,如清单 6 所示。

清单 6. 初始化对象

...      GL.glEnable(GL.GL_COLOR_MATERIAL);      GL.glColorMaterial(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE);      Bullet.QUADRIC = GLU.gluNewQuadric();      Bug.QUADRIC = GLU.gluNewQuadric();      Gun.QUADRIC = GLU.gluNewQuadric();      GLU.gluQuadricNormals(Bullet.QUADRIC, GLU.GLU_SMOOTH);      GLU.gluQuadricNormals(Gun.QUADRIC, GLU.GLU_SMOOTH);      GLU.gluQuadricNormals(Bug.QUADRIC, GLU.GLU_SMOOTH);      this.gun = new Gun();      bugCount = ShootoutView.viewer.getTable().getItemCount();      this.bugs = new Bug[bugCount];      for (int i = 0; i < this.bugs.length; i++){        this.bugs[i] = new Bug(COLOR[i % COLOR.length]);      }      bullets = new Bullet[25];      for(int i = 0; i < bullets.length; i++)        bullets[i] = new Bullet();      pow = new Pow();    }

现在,把三个二次曲面句柄设置为 bullet、bugs 和 gun 类。然后,初始化 gun、bugs、bullets 和 pow 类。我们的枪每次会有 25 发 BB 弹;这应当足够多了。然后绘制布景。

绘制布景

这个方法实际上调用每个形状类的 draw 方法。但是,为了避免把类一个一个堆积起来,我们用转换来移动内容绘制时的原点。原点就是创建顶点(vertex) (两个或两个以上线段交汇的地方)时的位置依据。请定义 drawScene 方法,如清单 7 所示。

清单 7. drawScene 方法

protected void drawScene() {      super.drawScene();      this.grip.adjust();      pow.draw();      GL.glTranslatef(.2f, -.2f, 9.5f);      for(int i = 0; i < bullets.length; i++)        if(bullets[i] != null)          bullets[i].draw();      GL.glTranslatef(-.2f, .2f, 2.5f);      gun.draw();      GL.glTranslatef(-Bug.RADIUS*bugCount, 0.0f, -20f);      for(int i = 0; i < bugs.length; i++){        bugs[i].draw();        GL.glTranslatef(2*Bug.RADIUS, 0.0f, 0.0f);      }    }

请注意,单词 Pow! 是根据原点绘制的。所以我们可以稍做转换,把原点放在枪口末端。然后再移动原点,绘制枪。另一个转换把原点放在绘制虫子的地方。我们在一行中,从左到右绘制虫子。在绘制了每个虫子之后,就把原点移动 2*Bug.RADIUS,这样虫子就不会一个一个叠在一起了。下面,定义 di

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号