您的位置:首页 > 移动开发 > Cocos引擎

quick-cocos2dx 实例 ------ nightclub

2013-12-16 13:54 288 查看
--[[
今天开始学习第一个sample: NightClub。
这个示例看似简单,实际用到了quick的很多功能,
如:音频、Tiles地图、touch事件、批次渲染、动画、动作等

下面开始着手逐行抄写分析MainScene.lua
]]

--[[
首先,定义一个新的场景类,类名是“MainScene”。
而对于何时实例化这个类,则是由AppBase的enterScene完成,
所以我们不用关心在哪调用new函数,只需要在使用时调用app:enterScene("场景名")
]]
local MainScene = class("MainScene", function()
return display.newScene("MainScene")
end)

-- 构造函数
function MainScene:ctor()
-- 地图, 用bgTitle.png瓦片拼接而成
local ground = display.newTilesSprite("bgTile.png");
self:addChild(ground);

-- 触摸层。
self.touchLayer = display.newLayer();
self:addChild(self.touchLayer)

-- 舞台批渲染节点
self.stageNode = display.newBatchNode("stage.png", 100)
self:addChild(self.stageNode)

-- player批处理渲染节点
self.playerNode = display.newBatchNode("player.png",  100000)
self:addChild(self.playerNode)
self.resIds = {
"player_f0006","player_f0015","player_f0016","player_f0018","player_f0021",
"player_f0025","player_f0026","player_f0032","player_f0033","player_f0037",
"player_f0038","player_f0046","player_f0057","player_f0067","player_f0068",
"player_f0069","player_f0070","player_f0073","player_f0208","player_f0209",
}

-- 动画名字及动画帧数
self.actionNames = {"dance_a_1", "dance_a_2", "stand_1", "stand_2", "walk_1", "walk_2"}
self.actionNums = {8, 8, 4, 4, 8, 8}

-- 存储创建出的对象
self.objs = {}

end

--[[
创建单个对象
@param resId
@param actionId
@param x
@param y
@param isFixed
]]
function MainScene:genObject(resId, actionId, x, y, isFixed)
-- 创建帧序列
local frames = display.newFrames(resId .. "_" .. self.actionNames[actionId] .."_%02d.png", 1, self.actionNums[actionId])
local sprite = display.newSprite(frames[1], x, y)

-- 一定概率水平翻转(朝向)
if math.random(1, 2) == 1 then
sprite:setFlipX(true)
end
if isFixed == nil then
self.objs[#self.objs + 1] = sprite
end
-- 添加到player批渲染结点
self.playerNode:addChild(sprite);
-- 创建动画
local animation = display.newAnimation(frames, math.random(1, 2) / 15)
-- 播放动画
sprite:playAnimationForever(animation)
end

--[[
创建players
@param num:个数
]]
function MainScene:genObjects(num)
for i = 1, num do
local rand1 = math.random(1, #self.resIds)
local actId = math.random(1, #self.actionNames)

local x = math.random(15, display.width - 15)
local y = math.random(120, display.height - 75)

self:genObject(self.resIds[rand1], actId, x, y)
end
end

--[[
创建舞台
@param x
@param y
]]
function MainScene:genStageObject(x, y)
local frames = display.newFrames("bg%02d.png", 1, 4);
local sprite = display.newSprite(frames[1], x, y)
self.stageNode:addChild(sprite);
local animation = display.newAnimation(frames, math.random(1, 2) / 10)
sprite:playAnimationForever(animation)
end

--[[
创建舞台+舞台上的player
]]
function MainScene:genInitObjects()
local ofstX = 58
local ofstY = 112
for i = 0, 8 do
self:genStageObject(ofstX + i * 105, ofstY)
local rand1 = math.random(1, #self.resIds)
self:genObject(self.resIds[rand1], 1, ofstX + i * 105, ofstY - 15, true)
end
end

--[[
touch事件处理函数
@param event
@param x
@param y
]]
function MainScene:onTouch(event, x, y)
print (event)
if("began" == event) then
return true
end
end

--[[
进入场景
]]
function MainScene:onEnter()
-- 播放背景音乐
audio.playMusic("sound/newdali.mp3", true)
-- 加载plist
display.addSpriteFramesWithFile("stage.plist", "stage.png")
display.addSpriteFramesWithFile("player.plist", "player.png")
-- 创建object
self:genInitObjects()
self:genObjects(91)

-- 注册touch事件处理函数
-- 单点触摸
self.touchLayer:addTouchEventListener(function(event, x, y)
return self:onTouch(event, x, y)
end)
self.touchLayer:setTouchEnabled(true)

end

return MainScene
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: