Cocos实战篇[3.2]――《战神传说》Lua版

Cocos实战篇[3.2]――《战神传说》Lua版,第1张

概述【唠叨】     当时学Lua的时候,我将《战神传说》用Lua也写了一遍。     C++版的《战神传说》参考这篇:http://www.voidcn.com/article/p-foswolft-wx.html 【源码】     https://github.com/shahdza/Cocos-Lua_Plane 【学习心得】 1、继承自cc.Sprite后,设置自身纹理图片的方式 -- 【方

【唠叨】

当时学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版所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1050006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存