五、实现爆炸效果、并加入道具导弹

大多数游戏都有着丰富的效果类,在精灵移动类游戏中曾一度以此为一个重要的卖点,。光光是一些丰富的特效是不能够产生一个好的游戏的,但是一个好的游戏是万万不能缺少好的效果的。

很多人认为游戏的效果层有时和跟游戏逻辑本身并没有太大的关系,往往就是在最终屏幕上再画上一层效果层。但是游戏逻辑和效果层之间的通信是很重要的。这种通信往往体现在延时与等待上。比如飞机爆炸时,不接受任何用户输入,并且爆炸效果还要继续跟随飞机坠落,甚至爆炸的范围会影响周围的物体,要等待爆炸结果结束了才继续进行游戏。游戏逻辑和效果层之间的通信是很复杂的问题。在这里我突然有了罪恶感,我们没有对游戏进行任何的分析就起步了,游戏完全是基于硬编码的,我想到那儿,大家跟着看到那儿。飞机类仅仅是一个sprite,没有设计成一个状态机,这也就使得我们的效果层和逻辑层的通信有些卡通了。也许本文给了你编写自己第一个游戏的喜悦,也带给了你对游戏扩展性与复杂性的一丝担忧。或许这比便一个硬编码的游戏更有意义呢?谁说得好呢,现还是以为那些扩展性良好的游戏是伟大游戏构架师的杰作吧,相信你有了一两个好的想法后会重新设计这个游戏的,使之稍微有一些像个“系统”。然而好的技术不一定产生好的游戏……呵呵

有扯远了,会到现实吧,boys and girls!goon.

描述一下我们的爆炸效果,在子弹击中飞机后,子弹要迅速消失,飞机图像保持不变,此时将爆炸效果至于飞机图像之上,然后开始显示boom动画,在此期间,飞机不接受任何移动指示,因为他lose control。在爆炸效果后飞机消失。

我们的爆炸效果类:

GameObject explosion;//

初始化once:

img=ImageTools.getImage("/pic/explosion.png");//

explosion=new GameObject(img,32,32);

初始化:

explosion.reset();

explosion.lifetime=3;//生命周期定位三桢

逻辑处理:

if (gameover) {//如果游戏结束,显示效果类

explosion.paint(g);

explosion.update();

if(!explosion.alive){//当生命周期结束了

plane.alive=false;//关闭plane

g.setColor(255,255,255);//输出评语,下回分解

g.drawString(StringTools.timeOpinion(gametime),5,22,g.LEFT|g.TOP);

g.drawString("fly 0.1 ver by favo yang",2,100,g.LEFT|g.TOP);

g.drawString("E-mail : favoyang@yahoo.com",2,115,g.LEFT|g.TOP);

g.drawString("simulate from:",2,130,g.LEFT|g.TOP);

g.drawString("Mr.tony 's ",2,145,g.LEFT|g.TOP);

g.drawString("hello tony, just funny.",2,160,g.LEFT|g.TOP);

}

}

现在你看我是如何解决效果层与逻辑层之间的通信的,我使用的是全局变量gameover,在简单游戏中使用大量的全局状态变量也是一种常见的方法,可以避免动脑劲。不过缺点明显,游戏硬编码,结构既不清晰也不漂亮,几乎没有扩展性。所以说最好还是将飞机基于状态机设计,并将效果类设计成含有回调函数的抽象类,然后继承效果类实现回调函数来实现通信。至于总体层次上可以用堆栈将绘画单元串起来。还有分层处理等等…给你个思考的起点…
导弹的是实现,是不是你已经有个想法了呢,其实就是利用Bullets.killbullets。

逻辑处理

if(bomb.alive){

bomb.moveto(plane.sprite.getX()-20,plane.sprite.getY()-20);

bomb.paint(g);

bomb.update();

bullets.killbullets(plane.sprite,32);

}

在这里我不得不提一句,将生命概念封装在GameObject中是很好的(其实我们只是将其用作显示关键字),但将生命周期安排在GameObject中有欠妥当,生命周期也不一定就是基于桢的,有时基于时间,有时还有别的什么。我是说她足够复杂到交给另一个独立类处理,在这里实际需要的是一个足够强大的显示方法,其支持以桢数为参数显示罢了。

其实我觉得自己说多了,也许你也被我搞糊涂了。对了目录上少了一节,我们还缺少游戏的奖惩系统,下回我补上。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-127051/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-127051/

J2ME 2D小游戏入门之旅(五) 实现爆炸效果、并加入道具导弹(转)相关推荐

  1. 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频

    基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@M_Studio的教学视频) 主要内容:在Sunnyland游戏的设计基础上,新增了物理组件Joint系列.DrawGi ...

  2. CocosCreator3D微信小游戏入门RunningBall(一): 物理

    CocosCreator3D微信小游戏入门:RunningBall(一) 在CocosCreator3D发布之前,虽然CocosCreator2.x版本已经有了3D的功能,但是这些3D功能并不能完全支 ...

  3. 【phaser】快速实现HTML5 2D小游戏

    原文链接 前言 最近忙着看项目和写项目,在 github 上无意中发现了别人用 phaser 实现的2d小游戏,代码简单易懂,而且phaser框架本身就是非常的简单,非常适合想快速开发小游戏的开发者. ...

  4. 【unity】分享一个2D小游戏的完整制作教程——涂鸦跳跃demo

    文章目录 前言 1.贴图准备 跳板的逻辑 人物的逻辑 相机的逻辑 如何自动生成跳板 如何赢得游戏 前言 这个只是练手的一个2D小游戏,不许商用哦 完成了原版的一个关卡的内容,跳板也只有一种,但是如果需 ...

  5. 微信小游戏入门案例——拼图游戏

    微信小游戏入门案例--拼图游戏 涉及内容:canvas组件.小程序界面绘图API 目录结构: pages\game\game.js // pages/game/game.js // 方块的初始位置 v ...

  6. 基于cocoCreator版本2.4.5整理一款2D小游戏快速开发的游戏框架

    前言:基于cocoCreator版本2.4.5整理一款2D小游戏快速开发的游戏框架. 一.cocosCreator的UI框架. 中心思想, 将所有的UI窗体分为3类管理(1级窗体, 2级窗体, 3级窗 ...

  7. 微信小游戏入门实战《小猫钓鱼》

    BigBear 老师的微信小游戏入门实战<小猫钓鱼>,源码已经适配到 Cocos Creator 2.2.0,下是在晓衡在微信开发者工具下的视频演示: 源码仓库: https://gith ...

  8. html5 2d小游戏,cax: HTML5 Canvas 2D Rendering Engine - 小程序、小游戏以及 Web 通用 Canvas 渲染引擎...

    Cax 小程序.小游戏以及 Web 通用 Canvas 渲染引擎 微信小游戏 特性 Learn Once, Write Anywhere(小程序.小游戏.PC Web.Mobile Web) Writ ...

  9. VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(1)

    前言 打开CSDN或者度娘(谷哥被墙了,搜索不了),关键词"VB6 dx9 DirectX9 游戏源码",你会发现,讲解DX9技术的文章很多,但是跟VB6都没什么关系.偶有几片文章 ...

最新文章

  1. Spring Autowired 注入失败总是Null
  2. Oracle Events事件
  3. 浅谈C++ 标准库中的异常 —— stdexcept类
  4. python 查找算法_七大查找算法(Python)
  5. 南海发展大数据产业 建设新型智慧城市
  6. 学习了时间和测试题目
  7. 目标检测——如何获取图片的唯一ID
  8. 新东厂西厂时代——纪念被阉割了的手机——戏说移动的“×××短信”标准
  9. 20、C++ Primer 4th 笔记,重载运算符(1)
  10. Python selenium 滚动页面以及滚动至元素可见(转载)
  11. lamp兄弟连的解决问题套路
  12. JavaBean的前世晋升程序员如何提升领导力
  13. 北德克萨斯大学计算机系,美国北德克萨斯大学计算机科学与工程系主任Barrett Bryant访问昆明理工大学...
  14. 2021-2027全球与中国双断面隔离器市场现状及未来发展趋势
  15. 什么是APS?APS+MES如何解决生产难题?
  16. 华为交换机导入配置_华为交换机怎么配置FTP上传文件?
  17. Ubuntu修改系统时间到北京时间的步骤
  18. 哪款蓝牙耳机游戏体验感好?适合打游戏的蓝牙耳机推荐
  19. 带你走进Linux内核安全新世界
  20. Python进行图片缩放

热门文章

  1. 手牵手带你安装zookeeper
  2. LuaAuxLib 按键精灵lua库
  3. 对bam文件作基础统计
  4. css响应式网页设计:自适应屏幕宽度、移动页面开发技巧
  5. 2019多用户商城系统如何选,国内主流B2B2C商城对比
  6. 如何在CSDN博客中上传图片
  7. 仿朋友圈页面(超小白)
  8. SpringBoot引入第三方SDK以及打包
  9. ios测试版软件永久,iOS10.3.3 Beta6开发者测试版
  10. php开发前端的框架有哪些,网站的一些前端框架有哪些?4个前端框架对比