游戏启动时有很多资源需要加载和更新,在加载界面可以预先将音乐、音效加载内存,还有很重要的一点,也是我们选择lua的重要原因之一——进行游戏内部的更新。所以加载界面是必不少的。
CCSpriteFrameCache
精灵是游戏中必不少的一部分,精灵的主要创建方式有两种,一种是通过图片文件的文件名,另一种是通过精灵帧SpriteFrame。在开发过程中我们大部分时间使用的都是第二种方式。那为什么不直接纹理资源创建CCSprite对象呢?这是一个十分巧妙的设计方法,将图片加载和创建对象分开进行处理。这样就可以事先将纹理资源加载到内存中,然后在适当的时机创建CCSprite。
CCSpriteFrameCache为我们提供了一个管理纹理资源的简单的方法。这样避免了文件和内存间频繁的操作,运行速度。一些常用的精灵帧可以一直存在于缓存池中。
plist文件的制作,参考这篇博文http://blog.csdn.net/yifuteli_kevin/article/details/22599853
现在开始制作加载界面,第一步肯定是创建图层,然后添加一点动画(以免被人认为程序卡死了)。新建一个文件WelcomeLayer.lua,在create方法中创建加载界面的图层和动画。
module("WelcomeLayer",package.seeall) require "Lua/GameLayer" function create() local layer = CCLayer:create() CCSpriteFrameCache:sharedSpriteFrameCache():addSpriteFramesWithFile("Images/shoot_background.plist") local background = CCSprite:createWithSpriteFrameName("background.png") background:setAnchorPoint(ccp(0,0)) background:setPosition(ccp(0,0)) layer:addChild(background) local loading = CCSprite:createWithSpriteFrameName(game_loading1.png") local copyRight = CCSprite:createWithSpriteFrameName("shoot_copyright.png") copyRight:setPosition(visibleSize.width/2,visibleSize.height/2 + loading:getContentSize().height/2) layer:addChild(copyRight) loading:setPosition(visibleSize.width/2,visibleSize.height/2 - copyRight:getContentSize().height/2) local animation = CCAnimation:create() animation:setDelayPerUnit(0.2) animation:addSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName("game_loading1.png")) animation:addSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName("game_loading2.png")) animation:addSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName("game_loading3.png")) local animate = CCAnimate:create(animation) local actionDone = CCCallFunc:create(finish) local repeatAction = CCRepeat:create(animate,1) local sequence = CCSequence:createWithTwoActions(repeatAction,actionDone) loading:runAction(sequence) layer:addChild(loading) return layer end
第二步.当动画完成后,或者是更新完成切换到游戏场景界面
function finish() --local sceneGame = CCScene:create() --sceneGame:addChild(GameLayer.create()) --CCDirector:sharedDirector():replaceScene(sceneGame) end
这样当然还不能运行,还要将图层加载到一个场景中,第一个场景当然是main.lua中创建,要不然还叫什么main文件。
local sceneGame = CCScene:create() sceneGame:addChild(WelcomeLayer.create()) CCDirector:sharedDirector():runWithScene(sceneGame)
并且在main文件获取可视界面的大小,这个参数在很多地方都需要使用,就将他定义成全局变量吧
visibleSize = CCDirector:sharedDirector():getVisibleSize()
第一个界面就出来了,看来使用Lua还是很方便、简单的
效果图: