入门级--《飞镖忍者》游戏分析总结
来源:互联网 发布:stc89c52单片机原理图 编辑:程序博客网 时间:2024/06/11 17:02
游戏分析:
功能:小人(固定在屏幕右侧中央),飞镖(由小人发射),敌人(随机产生,从屏幕右方平移到左方)
人发射飞镖打敌人(啊啊啊啊~~~~~竟然没实现敌人碰到小人后,小人死亡~~~~~请原谅我是个新手,太粗糙了。。。。)
构架:就一个主场景MainScene,简单粗暴
游戏实现:场景和层:只有个主场景就没得说了,直接在主场景上添加了一个层,然后可触摸,添加触摸的事件监听
self.touchLayer_ = display.newColorLayer(cc.c4b(255,255,255,255)):addTo(self)
self.touchLayer_:setTouchEnabled(true)self.touchLayer_:addNodeEventListener(cc.NODE_TOUCH_EVENT,function (event)<span style="white-space:pre"></span>if event.name == "ended" then<span style="white-space:pre"></span> self:onTouchEnded(event.x, event.y)<span style="white-space:pre"></span>end<span style="white-space:pre"></span>return true<span style="white-space:pre"></span>end)
-----由于触摸结束要发射子弹,所以在onTouchEnded里要写子弹的生成和发射(后面详解)
小人:一个精灵,放到层上,没动做
敌人:由定时器每秒随机产生一个,然后移动到屏幕右方,注意需用数组将敌人存起来,以便分析与子弹有无碰撞
local scheduler = require(cc.PACKAGE_NAME ..".scheduler") --这句放在最开头,是导入定时器类(?为啥用..连接,暂时不清楚)scheduler.scheduleGlobal(function()self:addMonster()end,1)-----定时器,每秒执行addMonster函数
</pre><pre name="code" class="plain">那么addMonster自然就是添加敌人了,这里注意两个地方:
transition.moveTo(monster, {x= -monster:getContentSize().width/2, y = actualY, <span style="white-space:pre"></span>time = actualDuration, <span style="white-space:pre"></span>onComplete=function (event) <span style="white-space:pre"></span>self.monsters_[event]= nil <span style="white-space:pre"></span>event:removeSelf() <span style="white-space:pre"></span>end <span style="white-space:pre"></span>})----onComplete:移动结束后将怪物删除,就是说,如果移动出了屏幕,且还没有发生碰撞,那么就把它删了,否则1-占资源,2-判断碰撞是它还在数组里,getPosition时会get不到 --放入怪物数据,以便以后删除 --print(monster) self.monsters_[monster] = monster --此处为何不是self.monsters_[#self.monsters+1] = monster 呢,因为上面的onComplete要用,参考学习笔记理解
子弹:点击屏幕射击,按点击方向移动一段时间。子弹是点击生成的所以生成方法放到onTouchEnded()里
--点击的位置在忍着右方才发射飞镖local location = cc.p(x,y)local projectile = display.newSprite("images/bullet.jpg"):addTo(self)projectile:pos(20,display.height/2)local px,py = projectile:getPosition()local offset = cc.pSub(location,cc.p(px,py))if (offset.x<=0)then projectile:removeFromParent() --忍者左方则删除飞镖return end其余注意事项与怪物类似
碰撞检测:(由于没有用物理世界,所以碰撞检测就是遍历在屏幕内的飞镖和怪物,判断距离如果小于某个值则认为碰撞,两个都移除)
碰撞是要一直检测的,检测函数应该所以放在每帧刷新里
self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,handler(self,self.update)) --添加帧事件监听,每帧执行self.update
(为啥要用handler(self,self.update)而不是直接self.update呢?========mark一下不懂的问题)self:scheduleUpdate() --需要打开帧定时器
源码看关联文章
0 0
- 入门级--《飞镖忍者》游戏分析总结
- Cocos2D Javascript初级教程:如何制作一个忍者飞镖游戏
- Unity3d 忍者飞镖
- ocos2d-x游戏实例之忍者飞镖——添加其他元素
- Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果
- 扔飞镖游戏
- Cocos2d-x飞镖忍者(3)
- 飞镖忍者 quick-cocos2d-x3.2
- 如何制作飞镖忍者(2) Cocos2d-x 2.1.2
- 制作飞镖忍者(1) Cocos2d-x 3.0alpha0
- 制作飞镖忍者(2) Cocos2d-x 3.0alpha0
- 制作飞镖忍者(3) Cocos2d-x 3.0alpha0
- 3D飞镖游戏源码ios版
- cocos2dx 《忍着飞镖射幽灵》小结
- 观点:游戏模块分析总结
- SCOI2011飞镖
- Udacity 数据分析入门总结
- 2048游戏源代码分析与总结
- Linux基础(七)内核线程和用户线程
- iOS开发——TTS文本发音——(附)单词、中文发音示例和工具类
- Web Api 自动生成帮助文档
- long 类型的自增长ID生成类,支持多线程。
- deeplearning系列(五)实现一个简单的深度神经网络
- 入门级--《飞镖忍者》游戏分析总结
- 写个小demo巩固基础 gridview自己玩
- Android 通过配置相同的UUid访问不同进程小结
- Java 反射
- MySQL 入门教程
- java变量初始化
- [leetcode 289]Game of Life
- android客户端学习-画虚线
- BlueDroid 蓝牙启动流程分析