入门级--《飞镖忍者》游戏分析总结

来源:互联网 发布: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
原创粉丝点击