环境搭建如前,Studio2.0.6,IDE1.01,framework 3.4rc1,Cocos2d-x 3.3final
环境搭建见:http://blog.youkuaiyun.com/riririreach/article/details/45391885
要实现的是在Studio中建项目,有两个场景,第一个场景是进入程序时显示的场景,场景中有一个按钮,按这个按钮就进入第二个场景
首先在Studio中新建项目:别忘了把选项都选上
这里建的项目直接发布到IDE中,模拟器运行后是一个小项目,背景是农场,上面有个是松鼠还是什么的从左向右滑,整个画面可以按住鼠标拖动
但这不是我想要的,暂时也还没到动画的时候,所以还是先在Studio里把资源编好,发布到IDE后再修改代码调用就行了
目标是两个场景切换,进入程序时显示的场景有个按钮,先弄这个场景
首先,我要把要用的资源文件导入,其实就是三张图片,两张是两个场景的背景图,一张是按钮的背景图
新建项目后有个MainScene.csd,一片黑,按某教程,在控件中拖个精灵过去
HelloWorld.png作为第一个场景的图片直接拖到精灵的位置就行
再从控件中拖个按钮过去
再将button_n.png拖到按钮属性中->背景样式->正常状态的白框中
再编辑一下文本字体颜色什么的就OK了
保存,建第二个场景
在项目上右键->新建文件
选场景,起个名字叫PlayScene吧,新建
后面的操作跟第一个场景一样,就是背景图用的是bg.png,而且这个场景不需要按钮
全部保存,最简单方法就是Ctrl+Shift+S
再依次发布资源,发布到IDE
这样项目就在IDE中打开了
有个问题,新项目src目录下没有刚刚建的两个场景的文件,只有一个main.lua和一个GameScene.lua,在GameScene.lua里会直接建一个场景
背景是个农场,一个小动物从左至右自己滑动,鼠标按住可拖动场景,和我们建的两个场景完全无关。
也就是说需要建立MainScene.lua和PlayScene.lua
然后在main.lua里进行相应的改动
在src下新建两个lua文件,建好都是空白的
MainScene.lua
local MainScene = class("MainScene",function()
return cc.Scene:create()
end)
function MainScene.create()
local scene = MainScene.new()
local rootNode=cc.CSLoader:getInstance():createNodeWithFlatBuffersFile("MainScene.csb")
scene:addChild(rootNode)
return scene
end
return MainScene
local PlayScene = class("PlayScene",function()
return cc.Scene:create()
end)
function PlayScene.create()
local scene = PlayScene.new()
local rootNode=cc.CSLoader:getInstance():createNodeWithFlatBuffersFile("PlayScene.csb")
scene:addChild(rootNode)
return scene
end
return PlayScene
先不急,看看main.lua,里面要把MainScene设上,原先的代码就不上,看改完的
local function main()
collectgarbage("collect")
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
-- initialize director
local director = cc.Director:getInstance()
--turn on display FPS
director:setDisplayStats(true)
--set FPS. the default value is 1.0/60 if you don't call this
director:setAnimationInterval(1.0 / 60)
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(640, 960, 2)
--create scene
local scene = require("MainScene")
local gameScene = scene.create()
--gameScene:playBgMusic()
if cc.Director:getInstance():getRunningScene() then
cc.Director:getInstance():replaceScene(gameScene)
else
cc.Director:getInstance():runWithScene(gameScene)
end
end
因为我用的背景图是640*960的,所以分辨率就改成这样,原先是480*320
第二处原先写的是GameScene,现在改成了我造的MainScene
这样运行就显示我要的场景了
然后再回过头看MainScene.lua
得加东西让按钮生效
local MainScene = class("MainScene",function()
return cc.Scene:create()
end)
function MainScene.create()
local scene = MainScene.new()
local rootNode=cc.CSLoader:getInstance():createNodeWithFlatBuffersFile("MainScene.csb")
scene:addChild(rootNode)
<span style="color:#ff0000;">local function onPlay()
local ps=require("PlayScene")
local playScene=ps.create()
if cc.Director:getInstance():getRunningScene() then
cc.Director:getInstance():replaceScene(playScene)
else
cc.Director:getInstance():runWithScene(playScene)
end
end
local btn=rootNode:getChildByName("Button_1")
btn:addTouchEventListener(onPlay)</span>
return scene
end
return MainScene
红字是添加的部分
函数onPlay就是按钮的点击事件,即切换到PlayScene场景
下面local btn=rootNode:getChildByName("Button_1")是获取按钮
如下图,在Studio中点中按钮,右面属性中的名称就是这个name
然后就可以运行了,进入之后先是MainScene
点击Play按钮后
OK,目标实现
追加,分辨率设置
在main.lua中的语句
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(640, 960, cc.ResolutionPolicy.SHOW_ALL)
这个是代表场景的分辨率是640*960,cc.ResolutionPolicy.SHOW_ALL代表是显示全部内容
在此语名前再加一行
cc.Director:getInstance():getOpenGLView():setFrameSize(320,480)
设置模拟器的尺寸是320*480,最终显示出来的就是比例不变,但缩小了一半全内容显示的
好了,完美解决