第一个cocos2dx-lua游戏--蚂蚁进洞
来源:互联网 发布:遗传算法编码方式 编辑:程序博客网 时间:2024/06/01 08:01
lua蛮小巧的,比用c++来做简单,c++内存管理,字符串操作都太麻烦,这点脚本就是好用啊。
但cocos配合lua,编译模拟器时也不好,要编译好久,而且占用空间几个g几个g地增长,需要装vs2012以上的版本,怎么能这样呢,哥的老电脑怎么跑啊,还有就是cocos搭配lua现在的资料太少,不好学啊。
现在开始做游戏吧
在建立cocos游戏项目时,它会自己生成一个游戏,《杀死蚂蚁》,我就不用自带的游戏代码了,当做参考,自己动手实现游戏逻辑。
有两个场景
第一个场景中点击play按钮后,进入第二个场景
第一个场景主要代码
local function main() local sceneGame = cc.Scene:create() local layer = createdInGameLayer() sceneGame:addChild(layer); local label = cc.Label:createWithSystemFont("Hello Cocos!","Gadugi",25) label:setPosition(500,100) label:setVisible(true) label:setTextColor(cc.c4b(0,0,255,255)) layer:addChild(label) layer:setTouchEnabled(true) --ccp replaced by cc.p(x,y) ---ccc4 replaced by cc.c4b local bgObj = display.newSprite("MainSceneBg.jpg") bgObj:move(display.center):addTo(sceneGame) local playBt = display.newSprite("PlayButton.png") playBt:setScale(0.5,0.5) playBt:move(display.center):addTo(bgObj) playBt:setPositionY(100) local function onTouchBegin(touch, x, y) local rect = playBt:getBoundingBox() if containsPoint(rect, cc.p(x, y)) then switchScene() end return false end -- (onTouchBegin,true,0,false)它的回调函数的第二个参数是个table,table[1], table[2]是坐标 layer:registerScriptTouchHandler(onTouchBegin); cc.Director:getInstance():replaceScene(sceneGame)end--local status, msg = xpcall(main, __G__TRACKBACK__)--if not status then -- error(msg)--endmain()还需要这些代码:
cc.FileUtils:getInstance():setPopupNotify(false)cc.FileUtils:getInstance():addSearchPath("src/")cc.FileUtils:getInstance():addSearchPath("res/")require "config"require "cocos.init"
主要知识点:
1.显示场景
local scene = cc.Scene:create()cc.Director:getInstance():replaceScene(scene)
2.显示图片
local layer = createdInGameLayer() sceneGame:addChild(layer); local bgObj = display.newSprite("MainSceneBg.jpg") bgObj:move(display.center):addTo(sceneGame) local playBt = display.newSprite("PlayButton.png") playBt:setScale(0.5,0.5) playBt:move(display.center):addTo(bgObj) playBt:setPositionY(100)local bg = cc.Sprite:create("PlaySceneBg.jpg")bg:setPosition(cc.p(566,320))layer:addChild(bg)
3.处理点击事件
layer:setTouchEnabled(true) local function onTouchBegin(touch, x, y) local rect = playBt:getBoundingBox() if containsPoint(rect, cc.p(x, y)) then switchScene() end return false end -- (onTouchBegin,true,0,false)它的回调函数的第二个参数是个table,table[1], table[2]是坐标 layer:registerScriptTouchHandler(onTouchBegin);
第二个场景代码:
local function switchScene()local scene = cc.Scene:create()local layer = cc.Layer:create()playScene = sceneplayLayer = layerscene:addChild(layer)layer:setTouchEnabled(true)local bg = cc.Sprite:create("PlaySceneBg.jpg")bg:setPosition(cc.p(566,320))layer:addChild(bg)local filename = TEXTURE_FILENAME_ANTlocal texture = display.loadImage(filename) local frameWidth = texture:getPixelsWide() / 3 local frameHeight = texture:getPixelsHigh() local frames = {} for i = 0, 1 do local frame = display.newSpriteFrame(texture, cc.rect(frameWidth * i, 0, frameWidth, frameHeight)) frames[#frames + 1] = frame end -- create animation local animation = display.newAnimation(frames, 0.15) -- caching animation display.setAnimationCache(filename, animation)cc.Director:getInstance():getScheduler():scheduleScriptFunc(tickUpdate,0,false)playLayer:registerScriptTouchHandler( function(event, x, y) --移动 --原生接口self.sp:runAction(cc.MoveTo:create(5, cc.p(display.cx, display.cy)))--antSprite:removeSelf()--怎么停止动画???for k,v in pairs(bugs) doif isTouchedSprite(v, x, y) thenlocal deadBug = cc.Sprite:create(filename, cc.rect(frameWidth * 2, 0, frameWidth, frameHeight))deadBug:setPosition(cc.p(v:getPositionX(), v:getPositionY()))v:removeSelf()bugs[v] = nillayer:addChild(deadBug)audio.playSound("BugDead.wav")transition.fadeOut(deadBug, {time=1})endendreturn false end)cc.Director:getInstance():replaceScene(scene)end
计时器
local function tickUpdate(dt)lastTime = lastTime + dtif lastTime > 1 then--添加精灵lastTime = 0addBug()endcheckBugHole()end
检查蚂蚁是否进洞
local function checkBugHole()for _,v in pairs(bugs) dolocal point = cc.p(v:getPositionX(), v:getPositionY())local distance = (point.x - holePoint.x)*(point.x - holePoint.x) + (point.y - holePoint.y)*(point.y - holePoint.y)if distance < 10 thenaudio.playSound("BugEnterHole.wav")v:removeSelf()bugs[v] = nilendendend添加蚂蚁
--添加精灵local function addBug()local antSprite = cc.Sprite:create(TEXTURE_FILENAME_ANT, cc.rect(0,0,frameWidth,frameHeight))local x,y=nilif math.random(1,2) == 1 thenx = math.random(CLIENT_WIDTH)if math.random(1,2) == 1 theny = CLIENT_HEIGHTelsey = 0endelsey = math.random(CLIENT_HEIGHT)if math.random(1,2) == 1 thenx = CLIENT_WIDTHelsex = 0endend--x = holePoint.x--y = 0antSprite:setPosition(cc.p(x,y))playLayer:addChild(antSprite)bugs[antSprite] = antSpritelocal angleDelta = nilif x == holePoint.x thenif y > -1 and y < 1 thenangleDelta = 90elseangleDelta = -90endelseangleDelta = math.atan((y-holePoint.y)/(x-holePoint.x))angleDelta = angleDelta * 180 / 3.14159end--圆周率是多少???if x > CLIENT_WIDTH / 2 thenif angleDelta > 0 thenangleDelta = angleDelta - 180elseangleDelta = angleDelta + 180endendtransition.rotateTo(antSprite,{time = 0.1, rotation = -angleDelta})transition.moveTo(antSprite, {time = 5, x = holePoint.x, y = holePoint.y})antSprite:playAnimationForever(display.getAnimationCache(TEXTURE_FILENAME_ANT))endprite是否被点击到了
--sprite是否被点击到了local function isTouchedSprite(sprite, x, y)local position = cc.p(sprite:getPositionX(), sprite:getPositionY())local radio = 30return (position.x - x) * (position.x - x) + (position.y - y) * (position.y - y) < radio * radioend
local function containsPoint(rect, point)
return point.x >= rect.x and point.x <= rect.x + rect.width
and point.y >= rect.y and point.y <= rect.y + rect.height
end
0 0
- 第一个cocos2dx-lua游戏--蚂蚁进洞
- 第一个cocos2dx游戏
- 我的第一个Cocos2dx游戏
- 小球进洞游戏 解密
- 第一个Cocos2d-x Lua游戏
- cocos2dx lua 游戏状态机
- cocos2dx第一个游戏项目helloworld(一)
- cocos2dx第一个游戏项目helloworld(二)
- cocos2dx-lua制作游戏五维图
- 第一个Lua程序
- LUA第一个程序
- 第一个LUA程序
- cocos2dx 动画第一个demo
- 用cocos2dx+lua创建竖屏游戏
- lua-x--第一个lua程序
- 第一个Lua程序 Game.lua
- 开启Lua编程,第一个Lua程序
- 第一个Window游戏。。
- 从性能角度看前缀++和后缀++(++i和i++的深入剖析)
- nodejs初学到express框架使用
- QtDesigner:Calculator Builder Example
- CString::TrimLeft和CString::TrimRight
- CODEVS1048石子归并
- 第一个cocos2dx-lua游戏--蚂蚁进洞
- 51nod 1368:黑白棋 二分图最大匹配
- 八皇后——递归学习
- 主线程和子线程的同步控制
- 1040. 有几个PAT(25)
- 磁盘驱动器
- ——黑马程序员——C语言中一维数组基本概念和初始化
- mysql5.6.26改变默认数据目录问题
- 博客又要搬家了。。 搬回ltwy.me