zoukankan      html  css  js  c++  java
  • quick-cocos2d-x游戏开发【2】——项目结构分析、创建新场景

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


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


    好吧,还是再打开scripts目录看下。

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

    function __G__TRACKBACK__(errorMessage)
        print("----------------------------------------")
        print("LUA ERROR: " .. tostring(errorMessage) .. "
    ")
        print(debug.traceback("", 2))
        print("----------------------------------------")
    end
    
    require("app.MyApp").new():run()  --启动后运行MyApp脚本


    启动后,运行MyApp脚本,而且调用run函数

    require("config")
    require("framework.init")
    
    local MyApp = class("MyApp", cc.mvc.AppBase)
    
    function MyApp:ctor()
        MyApp.super.ctor(self)
    end
    
    function MyApp:run()
        CCFileUtils:sharedFileUtils():addSearchPath("res/")
        self:enterScene("MainScene")
    end
    
    return MyApp

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

    -- 0 - 不输出不论什么调试信息, 1 - 输出主要的调试信息, 2 - 输出具体的调试信息
    DEBUG = 1
    
    -- 设置是否在画面中显示渲染帧率等信息
    DEBUG_FPS = true
    
    -- 设置是否输出内存占用信息,true为每10秒一次
    DEBUG_MEM = false
    
    -- 是否加载过时的 API 定义
    LOAD_DEPRECATED_API = false
    
    -- 是否加载短代码API
    LOAD_SHORTCODES_API = true
    
    -- 屏幕方向
    CONFIG_SCREEN_ORIENTATION = "landscape"
    
    -- 设计分辨率大小
    CONFIG_SCREEN_WIDTH  = 960
    CONFIG_SCREEN_HEIGHT = 640
    
    -- 自己主动缩放模式
    CONFIG_SCREEN_AUTOSCALE = "FIXED_WIDTH"

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

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

    local MainScene = class("MainScene", function()
        return display.newScene("MainScene")
    end)
    
    function MainScene:ctor()
        ui.newTTFLabel({text = "Hello, World", size = 64, align = ui.TEXT_ALIGN_CENTER})
            :pos(display.cx, display.cy)
            :addTo(self)
    end
    
    function MainScene:onEnter()
    end
    
    function MainScene:onExit()
    end
    
    return MainScene

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


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


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

    在scenes目录中新建一个MyScene。仿照着MainScene.lua,我们敲点代码,

    local MyScene = class("MyScene", function ()
    	return display.newScene("myscene")
    end)
    
    function MyScene:ctor()
    	
    end
    
    return MyScene

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

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

    完整代码例如以下。

    local MyScene = class("MyScene", function ()
    	return display.newScene("myscene")
    end)
    
    function MyScene:ctor()
    	display.newSprite("HelloWorld.png", display.cx, display.cy):addTo(self)
    
    	ui.newTTFLabel({text = "Hello, World", align = ui.TEXT_ALIGN_CENTER, x = display.cx, y = display.height*0.9}):addTo(self)
    end
    
    return MyScene

    然后我们改动启动的第一个场景,在MyApp.lua中。改动self:enterScene("myscene"),记住这当中的字符串是之前创建的那个场景时填写的字符串。假设不一致会找不到该场景的。最后我们用player模拟器跑一下看下效果。



    哈哈。够经典,够温馨吧。仅仅是button没加,后面再说。大家也赶紧来试试吧。

    如有错误之处,还请批评指出。

  • 相关阅读:
    python 希尔排序
    python 选择排序
    python 插入排序
    怎么根据返回数量,来渲染点赞星星的个数变高量?
    avalon $computed不起作用?
    移动端点击事件兼容问题,在pc端可以点,在手机上不可以点
    移动端弹出遮罩层禁止页面滚动,遮罩里面的框允许滚动如何实现。
    移动端,如何禁止弹窗下面内容滚动/页面滚动
    avalon数据已更新,视图未更新的bug修复
    Python 导入分部分项前的 数据处理
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7073122.html
Copyright © 2011-2022 走看看