快速业务通道

创建Eclipse游戏插件,第3部分: 启动游戏 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
   translation + oz);          super.draw();          GL.glTranslatef(-translationGunX - ox,                  -translationGunY - oy,                  -translation - oz);        }      }

就像在 Bug 类中一样,在绘制 BB 枪之前,要把原点转换到要绘制 BB 枪的位置,然后再转换回原点。

添加正确的坐标:枪

现在设置 Gun 类。Gun 类需要沿着 x 和 y 平面移动,移动从子弹的起始位置开始。请修改 Gun 类的构造函数添加这个功能,如清单 7 所示。

清单 7. 修改 Gun 类

...      private float ox, oy, oz;      private float translationx;      private float translationy;      public Gun(float ox, float oy, float oz) {        translationy = 0;        translationx = 0;        this.ox = ox;        this.oy = oy;        this.oz = oz; ...这段代码把枪的位置初始化为它的原始位置,至于枪,则由清单 8 中的代码绘制。

创建Eclipse游戏插件,第3部分: 启动游戏(4)

时间:2011-02-10 IBM Tyler Anderson

清单 8. 绘制枪

public void draw(){        GL.glTranslatef(translationx + ox,                translationy + oy,                oz);        super.draw();        GL.glTranslatef(-translationx - ox,                -translationy - oy,                -oz);      }

很好!三个类都在正确的位置显示。剩下的惟一一件事就是如何初始化它们,下面马上介绍。

初始化各个部件

在这里,我们把游戏中每个部件的初始坐标发送到它们各自的构造函数。它们的初始位置与第 2 部分中的位置一样,但是现在的处理不同,以支持碰撞侦测。请参阅清单 9。

清单 9. 初始化游戏部件的位置

...      this.gun = new Gun(0, 0, 12);      bugCount = ShootoutView.viewer.getTable().getItemCount();      this.bugs = new Bug[bugCount];      float tx = -Bug.RADIUS*bugCount;      for (int i = 0; i < this.bugs.length; i++){        this.bugs[i] = new Bug(COLOR[i % COLOR.length], tx, 0, -8);        tx += 2*Bug.RADIUS;      }      pow = new Pow();      bullets = new Bullet[25];      for(int i = 0; i < bullets.length; i++)        bullets[i] = new Bullet(this, .2f, -.2f, 9.5f); ...现在,在创建部件中的对象时,也传递它们的初始位置。

游戏性和用户交互

没有用户交互的游戏就不是游戏了。这个游戏通过键盘输入来玩。也可以修改游戏,让它接受鼠标或其他输入设备的输入。现在来控制枪。

用键盘输入控制枪

在得到键盘输入时,需要设置 Gun 类中的布尔值,让它表示枪的移动方向。请修改方向键的事件代码,如清单 10 所示。

清单 10. 处理 keyPressed 事件

public void keyPressed(KeyEvent e) {      switch (e.keyCode) {      case SWT.ARROW_UP:        game.moveGun(false, true, false, false);        break;      case SWT.ARROW_DOWN:        game.moveGun(false, false, false, true);        break;      case SWT.ARROW_LEFT:        game.moveGun(false, false, true, false);        break;      case SWT.ARRO

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号