【唠叨】
当时学Lua的时候,我将《战神传说》用Lua也写了一遍。
C++版的《战神传说》参考这篇:http://www.jb51.cc/article/p-foswolft-wx.html
【源码】
https://github.com/shahdza/Cocos-Lua_Plane
【学习心得】
1、继承自cc.Sprite后,设置自身纹理图片的方式
--【方式一】通过精灵帧设置 cc.SpriteFrameCache:getInstance():addSpriteFrames("123.pList") localframe=cc.SpriteFrameCache:getInstance():getSpriteFrame("1.png") self:setSpriteFrame(frame) --【方式二】通过图片纹理 localtexture=cc.Director:getInstance():getTextureCache():addImage("ship01.png") localframe=cc.SpriteFrame:createWithTexture(texture,cc.rect(0,60,38)) self:setSpriteFrame(frame)
2、混合模式
--localcbl={GL_SRC_Alpha,GL_ONE} self:setBlendFunc(GL_SRC_Alpha,GL_ONE)
3、定时器
--【默认定时器】 self:scheduleUpdateWithPriorityLua(update,priority) self:unscheduleUpdate() --【自定义定时器】schedule localdt=0 functionGameLayer:addUpdate() localfunctionupdate(_dt) dt=_dt end self:scheduleUpdateWithPriorityLua(update,0) end functionGameLayer:xxxxx() localfunctionfunc() print(dt) end schedule(self,func,1.0/60.0) end
4、按钮回调
--registerScriptTapHandler localfunctionturnToloadingScene(tag,sender) self:turnToloadingScene() end localbacklb=cc.Label:createWithBMFont("Font/bitmapFontTest.fnt","GoBack") localpback=cc.MenuItemLabel:create(backlb) pback:registerScriptTapHandler(turnToloadingScene)
5、@R_419_6825@
--registerScriptHandler --【单点触摸】 localdispatcher=self:getEventdispatcher() localListener=cc.EventListenertouchOneByOne:create() Listener:registerScriptHandler(ontouchBegan,cc.Handler.EVENT_touch_BEGAN) Listener:registerScriptHandler(ontouchmoved,cc.Handler.EVENT_touch_MOVED) Listener:registerScriptHandler(ontouchended,cc.Handler.EVENT_touch_ENDED) dispatcher:addEventListenerWithSceneGraPHPriority(Listener,self) --【吞噬触摸】 Listener:setSwallowtouches(true)
6、单例类
Effect=class("Effect",function() returncc.Node:create() end) local_effect=nil functionEffect:getInstance() ifnil==_effectthen _effect=clone(Effect)--用clone(),好像用.new()有问题 _effect:init() end return_effect end
7、贝塞尔曲线运动
localbezIEr={ cc.p(sgn*dx,0),--controlPoint_1 cc.p(sgn*dx,-dy),--controlPoint_1 cc.p(0,--bezIEr.endposition } localb0=cc.BezIErBy:create(dt,bezIEr)
8、动画
--【方式一】通过精灵帧创建 localarr={} fori=1,34do localstr=string.format("explosion_%02d.png",i) --getSpriteFrameByname->getSpriteFrame localframe=cc.SpriteFrameCache:getInstance():getSpriteFrame(str) table.insert(arr,frame) end localanimation=cc.Animation:createWithSpriteFrames(arr,0.02) cc.AnimationCache:getInstance():addAnimation(animation,"Explosion") --【方式二】通过图片纹理 localtexture=cc.Director:getInstance():getTextureCache():addImage("ship01.png") localsp1=cc.SpriteFrame:createWithTexture(texture,38)) localsp2=cc.SpriteFrame:createWithTexture(texture,cc.rect(60,38)) localanimation=cc.Animation:create() an:addSpriteFrame(sp1) an:addSpriteFrame(sp2) an:setDelayPerUnit(0.1) an:setRestoreOriginalFrame(true) self:runAction(cc.RepeatForever:create(cc.Animate:create(animation)))
9、背景滚动
--【1】添加背景 functionGameLayer:addBG() self.bg1=cc.Sprite:create("bg01.jpg") self.bg2=cc.Sprite:create("bg01.jpg") self.bg1:setAnchorPoint(cc.p(0,0)) self.bg2:setAnchorPoint(cc.p(0,0)) self.bg1:setposition(0,0) self.bg2:setposition(0,self.bg1:getContentSize().height) self:addChild(self.bg1,-10) self:addChild(self.bg2,-10) end --【2】背景滚动 functionGameLayer:moveBG() localheight=self.bg1:getContentSize().height localfunctionupdateBG() self.bg1:setpositionY(self.bg1:getpositionY()-1) self.bg2:setpositionY(self.bg1:getpositionY()+height) ifself.bg1:getpositionY()<=-heightthen self.bg1,self.bg2=self.bg2,self.bg1 self.bg2:setpositionY(WIN_SIZE.height) end end schedule(self,updateBG,0) end
10、物理碰撞
>碰撞事件 & 条件
(1)b1.categoryBitmask 与 b2.ContactTestBitmask 进行按位与
(2)b2.categoryBitmask 与 b1.ContactTestBitmask 进行按位与
只有(1)、(2)都不为0的时候,触发碰撞检测事件。
>物体碰撞 & 条件
(1)b1.categoryBitmask 与 b2.CollisionBitmask 进行按位与
(2)b2.categoryBitmask 与 b1.CollisionBitmask 进行按位与
只有(1)、(2)都不为0的时候,触发物体碰撞。
--设置场景物理信息 scene:getPhysicsWorld():setGravity(cc.p(0,0)) scene:getPhysicsWorld():setDeBUGDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL) --创建物体 b1=cc.Sprite:create("123.png") --半径、材质(密度、d性、摩擦力)、偏移量 localbody=cc.PhysicsBody:createCircle(3,cc.PhysicsMaterial(0.1,1,cc.p(0,16)) b1:setPhysicsBody(body) b1:getPhysicsBody():setcategoryBitmask(2) b1:getPhysicsBody():setCollisionBitmask(3) b1:getPhysicsBody():setContactTestBitmask(12) --注册碰撞事件 localfunctiononContactBegin(contact) locala=contact:getShapeA():getbody():getNode() localb=contact:getShapeB():getbody():getNode() ifa~=nilandb~=nilthen a:setposition(0,0) b:setposition(0,0) end returntrue end localdispatcher=self:getEventdispatcher() localcontactListener=cc.EventListenerPhysicsContact:create() contactListener:registerScriptHandler(onContactBegin,cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN) dispatcher:addEventListenerWithSceneGraPHPriority(contactListener,self)
11、程序结束
--【方式一】 cc.Director:getInstance():endTolua() --【方式二】 os.exit(0)
12、问题集
--【敌人管理器】 --不加入层中,好像就调用不了enemyManager的方法 self.enemyManager=EnemyManager:create(self) self:addChild(self.enemyManager)总结
以上是内存溢出为你收集整理的Cocos实战篇[3.2]――《战神传说》Lua版全部内容,希望文章能够帮你解决Cocos实战篇[3.2]――《战神传说》Lua版所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)