Quantcast
Channel: Android*
Viewing all articles
Browse latest Browse all 531

quick-cocos2d-x 游戏开发 [15] —— 项目结构分析、创建新场景

$
0
0

创建完一个新项目之后,我们可以简单的看一看这个项目的文件组成,有这么一个文件层次结构

几个proj.*文件夹就不用说了,是对应的平台的解决方案,res专门存放我们的游戏资源,scripts存放我们的lua代码,sources中有我们熟悉的AppDelegate类,我们主要常用的就两个文件夹,res和scripts(我这不是废话吗)

 

好吧,还是再打开scripts文件夹看下,

该文件下有main.lua,它是程序lua脚本的启动文件

  1. function __G__TRACKBACK__(errorMessage)  
  2.     print("----------------------------------------")  
  3.     print("LUA ERROR: " .. tostring(errorMessage) .. "\n")  
  4.     print(debug.traceback("", 2))  
  5.     print("----------------------------------------")  
  6. end  
  7.   
  8. require("app.MyApp").new():run()  --启动后执行MyApp脚本  

 

启动后,执行MyApp脚本,并且调用run函数

  1. require("config")  
  2. require("framework.init")  
  3.   
  4. local MyApp = class("MyApp", cc.mvc.AppBase)  
  5.   
  6. function MyApp:ctor()  
  7.     MyApp.super.ctor(self)  
  8. end  
  9.   
  10. function MyApp:run()  
  11.     CCFileUtils:sharedFileUtils():addSearchPath("res/")  
  12.     self:enterScene("MainScene")  
  13. end  
  14.   
  15. return MyApp  

 

在run函数中,首先设置了文件资源的搜索路径,设置为res文件夹,接着进入第一个场景,也是脚本给我提供的MainScene.lua,在进入游戏画面前,程序还会初始化一些事情,可以看到第一行代码引入了config.lua,我们可以再接着打开config.lua文件

  1. -- 0 - 不输出任何调试信息, 1 - 输出基本的调试信息, 2 - 输出详细的调试信息  
  2. DEBUG = 1  
  3.   
  4. -- 设置是否在画面中显示渲染帧率等信息  
  5. DEBUG_FPS = true  
  6.   
  7. -- 设置是否输出内存占用信息,true为每10秒一次  
  8. DEBUG_MEM = false  
  9.   
  10. -- 是否载入过时的 API 定义  
  11. LOAD_DEPRECATED_API = false  
  12.   
  13. -- 是否载入短代码API  
  14. LOAD_SHORTCODES_API = true  
  15.   
  16. -- 屏幕方向  
  17. CONFIG_SCREEN_ORIENTATION = "landscape"  
  18.   
  19. -- 设计分辨率大小  
  20. CONFIG_SCREEN_WIDTH  = 960  
  21. CONFIG_SCREEN_HEIGHT = 640  
  22.   
  23. -- 自动缩放模式  
  24. CONFIG_SCREEN_AUTOSCALE = "FIXED_WIDTH" 

 

这里主要配置一下游戏的debug信息,FPS显示,屏幕方向,设计屏幕大小,以及适屏方案

有了这些的初始化,就会进入第一个场景了,再看下MainScene.lua

 

  1. local MainScene = class("MainScene", function()  
  2.     return display.newScene("MainScene")  
  3. end)  
  4.   
  5. function MainScene:ctor()  
  6.     ui.newTTFLabel({text = "Hello, World", size = 64, align = ui.TEXT_ALIGN_CENTER})  
  7.         :pos(display.cx, display.cy)  
  8.         :addTo(self)  
  9. end  
  10.   
  11. function MainScene:onEnter()  
  12. end  
  13.   
  14. function MainScene:onExit()  
  15. end  
  16.   
  17. return MainScene  

 

MainScene的ctor是构造函数,一旦我们new一个对象实例时就会调用ctor,所以它是必须有的,这里面主要做一些场景的界面布局等等,在MainScene中引擎只画了一个文本在上面,就是上节中看到的Hello World。

 

 

在quick中,它弱化了层的地位,反而增强了场景的地位,我们在cocos2d-x中一般都是新建一个layer,游戏中的元素添加到这个layer中,而在quick中,往往我们为了简单些,会直接就添加到scene上。所以你会在samples中看到基本都是加在scene上。


好了,说了这么多,下面我们动手创建一个场景

在scenes文件夹中新建一个MyScene,仿照着MainScene.lua,我们敲点代码,

  1. local MyScene = class("MyScene", function ()  
  2.     return display.newScene("myscene")  
  3. end)  
  4.   
  5. function MyScene:ctor()  
  6.       
  7. end  
  8.   
  9. return MyScene  

 

这样就算新建了一个场景,咱们还是添加点温馨的画面吧,显示一下cocos2d-x经典的画面,在后面的笔记着再来解释添加精灵文本这些。

 

在原来的Cocos2d-x项目中把那张HelloWorld.png图片复制一份到res文件夹下。

完整代码如下,

  1. local MyScene = class("MyScene", function ()  
  2.     return display.newScene("myscene")  
  3. end)  
  4.   
  5. function MyScene:ctor()  
  6.     display.newSprite("HelloWorld.png", display.cx, display.cy):addTo(self)  
  7.   
  8.     ui.newTTFLabel({text = "Hello, World", align = ui.TEXT_ALIGN_CENTER, x = display.cx, y = display.height*0.9}):addTo(self)  
  9. end  
  10.   
  11. return MyScene  

 

然后我们修改启动的第一个场景,在MyApp.lua中,修改self:enterScene("myscene"),记住这其中的字符串是之前创建的那个场景时填写的字符串,如果不一致会找不到该场景的。

 

  • Android
  • Icon Image: 

  • android
  • Game Development
  • Android*
  • Developers
  • Android*
  • Theme Zone: 

    Android

    Include in RSS: 

    1

    Viewing all articles
    Browse latest Browse all 531


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>