【唠叨】

当时学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、触摸事件

	--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")
	--半径、材质(密度、弹性、摩擦力)、偏移量
	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版的更多相关文章

  1. ios – 如何使用blender和PowerVR SDK为cocos3d创建一个简单的3d球体

    我是cocos3d的新手.我想创建一个简单的项目–旋转的3d球体.我用搅拌机设计了一个3d球体.所以我想要帮助创建collada文件和pod文件.使用blender和PowerVRSDK创建这个简单的3d对象时应该注意什么.谢谢解决方法如何在搅拌机中制作简单的球体,然后使用JeffLamarche的Blender-to-iOSscript将其导出?这甚至不需要Cocos或PowerVR,但这是一个良好的开端.由于您可以在iOS中轻松地将Cocos与非Cocos类集成,因此可能会有所帮助.你可以更进一步,利

  2. CocosCreator骨骼动画之龙骨DragonBones

    这篇文章主要介绍了怎么在CocosCreator中使用骨骼动画龙骨DragonBones,对骨骼动画感兴趣的同学,可以试一下

  3. 如何使用CocosCreator对象池

    这篇文章主要介绍了CocosCreator对象池,对性能有研究的同学,要着重看一下

  4. 整理CocosCreator常用知识点

    这篇文章主要介绍了整理CocosCreator常用知识点,这些知识点,平时几乎都能用到,希望同学们看完后,可以自己去试一下,加深印象

  5. 详解CocosCreator MVC架构

    这篇文章主要介绍了CocosCreator MVC架构,同学们在制作游戏过程中,尽量使用一些架构,会避免很多问题

  6. 游戏开发中如何使用CocosCreator进行音效处理

    这篇文章主要介绍了游戏开发中如何使用CocosCreator进行音效处理,并对音效组件进行封装,方便以后使用,同学们看完之后,一定要亲手实验一下

  7. CocosCreator如何实现划过的位置显示纹理

    这篇文章主要介绍了CocosCreator纹理shader的一些知识,想了解shader的同学,一定要看下,并且亲自动手实践

  8. 详解CocosCreator华容道数字拼盘

    这篇文章主要介绍了详解CocosCreator华容道数字拼盘,对华容道感兴趣的同学,看完之后,可以回去亲手试一下

  9. Android实战之Cocos游戏容器搭建

    这篇文章主要介绍了Android实战之Cocos游戏容器搭建,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下

  10. 详解CocosCreator系统事件是怎么产生及触发的

    这篇文章主要介绍了CocosCreator系统事件是怎么产生及触发的,虽然内容不少,但是只要一点点抽丝剥茧,具体分析其内容,就会豁然开朗

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部