最近学习cocos2d,稍微了解了一下cc的元素,但是关系不是很清楚,先研究了一下代码,有个形象的概念。
代码
require "app/views/GameScene"
local MainScene = class("MainScene", cc.load("mvc").ViewBase)
local size = cc.Director:getInstance():getWinSize()
local isPlaying = false
local cclog = function(...)
print(string.format(...))
end
function MainScene:onCreate()
local layer = MainScene:createLayer()
self:addChild(layer)
end
function MainScene:createLayer()
local layer = cc.Layer:create()
--SpriteFrameCache一般用来处理plist文件(这个文件指定了每个独立的精灵在这张“大图”里面的位置和大小),
--该文件对应一张包含多个精灵的大图,plist文件可以使用TexturePacker制作
local spriteFrame = cc.SpriteFrameCache:getInstance()
spriteFrame:addSpriteFrames("run.plist")
--从spriteFrame中读取图片,创建背景精灵并设置锚点,加入到层中
local bg = cc.Sprite:createWithSpriteFrameName("background.png")
bg:setPosition(cc.p(size.width/2, size.height/2))
layer:addChild(bg)
--创建默认的图片精灵并设置锚点,加入到层中
local sprite = cc.Sprite:createWithSpriteFrameName("h1.png")
sprite:setPosition(cc.p(size.width/2, size.height/2))
layer:addChild(sprite)
--toggle按钮菜单。
local goSprite = cc.Sprite:createWithSpriteFrameName("go.png")
local stopSprite = cc.Sprite:createWithSpriteFrameName("stop.png")
--精灵菜单类是MenuItemSprite,图片菜单类是MenuItemImage
local goToggleMenuItem = cc.MenuItemSprite:create(goSprite, goSprite)
local stopToggleMenuItem = cc.MenuItemSprite:create(stopSprite, stopSprite)
local toggleMenuItem = cc.MenuItemToggle:create(goToggleMenuItem, stopToggleMenuItem)
--设置按钮的锚点--OpenGL坐标系:该坐标系原点在屏幕左下角,x轴向右,y轴向上
--先获得屏幕坐标,在调用convertToGL转成OpenGl坐标系
toggleMenuItem:setPosition(cc.Director:getInstance():convertToGL(cc.p(730, 540)))
local mn = cc.Menu:create(toggleMenuItem)
mn:setPosition(cc.p(0, 0))
--添加到层中
layer:addChild(mn)
local function OnAction(menuItemSender)
if not isPlaying then
--///动画开始//
local animation = cc.Animation:create() -- 创建动画
for i=1,4 do
local frameName = string.format("h%d.png",i)
cclog("frameName = %s",frameName)
local spriteFrame = spriteFrame:getSpriteFrameByName(frameName)
animation:addSpriteFrame(spriteFrame) -- 向动画添加图片
end
animation:setDelayPerUnit(0.15) --设置动画帧率
animation:setRestoreOriginalFrame(true) --设置动画播放完毕后是否回到第一帧
local action = cc.Animate:create(animation) --用动画创建精灵动作
sprite:runAction(cc.RepeatForever:create(action)) --让精灵来完成动作
--//动画结束///
isPlaying = true
else
sprite:stopAllActions()
isPlaying = false
end
end
toggleMenuItem:registerScriptTapHandler(OnAction)-- 按钮事件,将回掉函数注册到按钮
return layer
end
return MainScene
知识点总结
一、sprite创建三个步骤:加载图片,设置锚点,添加到图层。
二、动画创建过程:创建动画对象,添加图片,设置帧率,创建动作,精灵完成动作。