`
hzy3774
  • 浏览: 992392 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Cocos2d-x 使用Lua开发基础

 
阅读更多

Coos2d-x网站:http://www.cocos2d-x.org/

 Windows下开发,所以下载源码解压后先用build-win32.bat编译可执行文件,编译完后在HelloLua或者multi-platform-lua工程中修改一下C++源代码,不改也可以。

main.c:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

#ifdef USE_WIN32_CONSOLE
    AllocConsole();
    freopen("CONIN$", "r", stdin);
    freopen("CONOUT$", "w", stdout);
    freopen("CONOUT$", "w", stderr);
#endif

    // create the application instance
    AppDelegate app;

	CCUserDefault* userDefault = CCUserDefault::sharedUserDefault();	//用于从XML文件读取用户配置
	std::string viewName = userDefault->getStringForKey("viewName", "WinApp");
	float viewWidth = userDefault->getFloatForKey("viewWidth", 480);
	float viewHeight = userDefault->getFloatForKey("viewHeight", 320);
	float zoomFactor = userDefault->getFloatForKey("zoomFactor", 1);

    CCEGLView* eglView = CCEGLView::sharedOpenGLView();
    eglView->setViewName(viewName.c_str());
    eglView->setFrameSize(viewWidth, viewHeight);
	eglView->setFrameZoomFactor(zoomFactor);

    int ret = CCApplication::sharedApplication()->run();

#ifdef USE_WIN32_CONSOLE
    FreeConsole();
#endif

    return ret;
}

 修改了一些地方,将一些配置从xml文件中读取,免得以后对要他们修改还要重新编译:

CCUserDefault* userDefault = CCUserDefault::sharedUserDefault();	//用于从XML文件读取用户配置
	std::string viewName = userDefault->getStringForKey("viewName", "WinApp");
	float viewWidth = userDefault->getFloatForKey("viewWidth", 480);
	float viewHeight = userDefault->getFloatForKey("viewHeight", 320);
	float zoomFactor = userDefault->getFloatForKey("zoomFactor", 1);

    CCEGLView* eglView = CCEGLView::sharedOpenGLView();
    eglView->setViewName(viewName.c_str());
    eglView->setFrameSize(viewWidth, viewHeight);
	eglView->setFrameZoomFactor(zoomFactor);

CCUserDefault会利用tinyxml2读写xml文件,从而保存或者读取我们所需要的基本类型数据。

这样也避免了转码操作。

在AppDelegate初始化时加载Lua文件,主要就改了一下路径:

std::string searchPath = _userDefault->getStringForKey("searchPath", "script");
	std::string scriptName = _userDefault->getStringForKey("scriptName", "main.lua");
    //std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");
	CCFileUtils::sharedFileUtils()->addSearchPath(searchPath.c_str());
    pEngine->executeScriptFile(scriptName.c_str());

 这样启动时就去执行script/main.lua

编译后就不用管C++代码了,以后的lua代码修改后也不用再编译。

现在有了可执行文件,拷到没装VisualStudio的PC上也可以开发cocos了

 下面写lua代码:

local function main()
  -- avoid memory leak
  collectgarbage("setpause", 100)
  collectgarbage("setstepmul", 5000)
  print(os.date())  --打印系统时间
  
  local scene = CCScene:create()
  local layer = CCLayer:create()
  layer:setTouchEnabled(true)
  layer:registerScriptTouchHandler(function(eventType, x, y)  --响应屏幕触摸事件
    if eventType == "began" then
      print(eventType, x, y)
      return true
    elseif eventType == "ended" then
      print(eventType, x, y)
    end
  end)
  
  scene:addChild(layer)
  CCDirector:sharedDirector():setDisplayStats(true);
  CCDirector:sharedDirector():runWithScene(scene)
end

main()

 debug程序通过print打印

 参照LuaTest代码写一个小电子时钟程序

local function main()
  -- avoid memory leak
  collectgarbage("setpause", 100)
  collectgarbage("setstepmul", 5000)
  
  --获取定时任务队列
  local scheduler = CCDirector:sharedDirector():getScheduler()
  --获取屏幕尺寸
  local winSize = CCDirector:sharedDirector():getWinSize()
  --创建layer
  local layer = CCLayer:create()
  
  --获取位图字体
  local bmpFontTime = CCLabelBMFont:create(os.date('%X'), "bitmapFontTest3.fnt")
  local bmpFontDate = CCLabelBMFont:create(os.date('%x'), "bitmapFontTest3.fnt")
  local bmpFontFast = CCLabelBMFont:create('0', "bitmapFontTest3.fnt")
  --设置坐标
  bmpFontTime:setPosition(winSize.width / 2, winSize.height / 2)
  bmpFontDate:setPosition(winSize.width / 2, winSize.height / 2 + 48)
  bmpFontFast:setPosition(winSize.width / 2, winSize.height / 2 - 48)
  --添加到layer   
  layer:addChild(bmpFontTime)
  layer:addChild(bmpFontDate)
  layer:addChild(bmpFontFast)
  
  --定时器响应函数
  local function secondInterval(dt)
    print(dt, os.date('%X'))
    bmpFontTime:setString(os.date('%X'))
    bmpFontDate:setString(os.date('%x'))
  end
  
  --定时器响应函数
  local interval = 0
  local function fastInterval(dt)
    interval = interval+1
    print(interval)
    bmpFontFast:setString(interval)
  end

  --设置定时任务
  local schedulerEntry1 = nil
  local schedulerEntry2 = nil
  layer:registerScriptHandler(function(event)
    if event == "enter" then
      print('schedule enter')
      schedulerEntry1 = scheduler:scheduleScriptFunc(secondInterval, 1.0, false)
      schedulerEntry2 = scheduler:scheduleScriptFunc(fastInterval, 0.1, false)
    elseif event== "exit" then
      print('schedule exit')
      scheduler:unscheduleScriptEntry(schedulerEntry1)
      scheduler:unscheduleScriptEntry(schedulerEntry2)
      if CCDirector:sharedDirector():isPaused() then
          CCDirector:sharedDirector():resume()
      end
    end
  end)
  
  --响应屏幕触摸事件
  layer:setTouchEnabled(true)
  layer:registerScriptTouchHandler(function(eventType, x, y)
    if eventType == "began" then
      print(eventType, x, y)
      return true
    elseif eventType == "ended" then
      print(eventType, x, y)
      CCDirector:sharedDirector():setDisplayStats(not CCDirector:sharedDirector():isDisplayStats());
    end
  end)
  
  local scene = CCScene:create()
  scene:addChild(layer)
  CCDirector:sharedDirector():runWithScene(scene)
end

main()

 

 

 新手。

  • 大小: 71.2 KB
分享到:
评论

相关推荐

    Cocos2d-x实战lua卷

    《Cocos2d-x实战Lua卷》是一本深入探讨Cocos2d-x游戏开发与lua脚本结合使用的专业书籍。Cocos2d-x是一个开源的游戏引擎,广泛应用于2D游戏开发,而Lua则是一种轻量级的脚本语言,以其简洁易学、高效灵活的特点,常被...

    Cocos2d-x之Lua核心编程 ,刘克男,杨雍著 ,P227

    Cocos2d-x是一款广泛使用的开源游戏开发框架,它支持多种语言,其中Lua以其轻量级、易学易用的特性,成为许多开发者首选的脚本语言。以下将详细阐述Cocos2d-x与Lua结合的核心编程知识点。 1. Lua简介:Lua是一种...

    Cocos2d-x之Lua核心编程 配套代码

    通过研究这个配套代码,你可以掌握Cocos2d-x和Lua的结合使用,从而提升你的游戏开发技能。记得实践是检验真理的唯一标准,动手操作和修改代码,将理论知识应用到实际项目中,是学习过程中不可或缺的部分。

    关东升_Cocos2d-x实战 Lua卷

    总之,《Cocos2d-x实战 Lua卷》是一本非常适合希望使用Lua进行游戏开发的初学者和进阶读者的书籍。通过系统学习书中内容,不仅能够掌握必要的编程技能,还能培养解决实际问题的能力,对于未来的职业发展大有裨益。

    Cocos2d-x实战:Lua卷

    通过《Cocos2d-x实战:Lua卷》这本书,你将能够从零开始,逐步掌握使用Cocos2d-x和Lua开发游戏的全过程,从而提升你的游戏开发技能,无论你是初学者还是有一定经验的开发者,都能从中获益良多。阅读PDF文件,跟随...

    关东升-Cocos2d-x实战:Lua卷

    《Cocos2d-x实战:Lua卷》这本书主要介绍了如何利用Lua进行游戏开发,并且涵盖了从基础到高级的各种主题,对于希望使用Lua进行游戏开发的学习者来说是一本非常实用的指南。 #### 三、书籍内容概览 《Cocos2d-x实战...

    Cocos2d-x实战C++卷关东升著完整版pdf

    Cocos2d-x基于C++,但也支持Lua和JavaScript,但本书主要关注C++的使用。C++作为一门强大的系统级编程语言,提供了面向对象的特性,使得游戏开发中的对象管理和性能优化更为高效。读者需要理解C++的基本语法、类与...

    cocos2d-x-3.1.zip

    总的来说,Cocos2d-x 3.1是游戏开发者学习2D游戏开发的一个重要参考点,虽然它已经不是最新的版本,但其核心概念和机制在后续版本中仍然保持一致,是理解整个Cocos2d-x框架的基础。解压并研究“cocos2d-x-3.1”中的...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...

    cocos2d-x与lua

    与完全使用Lua开发的引擎(如CoronaSDK)相比,cocos2d-x与Lua结合的方案具有更明显的性能优势。这意味着即便是在对性能要求较高的游戏场景中,开发者也能获得良好的表现。此外,cocos2d-x+Lua的方案扩展能力不受...

    cocos2d-lua版消消乐源码

    - **cocos2d-x**:这是一个跨平台的游戏开发框架,支持2D图形渲染,动画,物理引擎等功能,使用C++编写,提供lua接口。 2. **游戏结构** - **res**目录:包含了游戏的所有资源,如图片、音频、精灵表等。在lua中...

    cocos2d-x 跑酷源码

    3. `lua`:Lua脚本文件夹,cocos2d-x支持使用Lua作为脚本语言,提供灵活的游戏逻辑实现。 4. `proj.android` / `proj.ios_mac`:针对不同平台的构建项目,用于编译和打包应用。 二、cocos2d-x基础组件 1. `Scene`...

    cocos2d-x手机游戏开发

    总之,《cocos2d-x手机游戏开发》这本书会引导你逐步掌握利用cocos2d-x开发Android游戏的全过程,从基础概念到高级技术,助你成为一名熟练的cocos2d-x游戏开发者。通过阅读“COCOS2D-X手机游戏开发.pdf”这份资料,...

    Cocos2d-x学习笔记

    - 学习渲染流程:Cocos2d-x使用OpenGL作为渲染接口,初学者需要学习OpenGL基础以及Cocos2d-x中的渲染流程和优化技巧。 - 掌握事件处理:游戏中的事件处理是交互的核心,需要学习如何响应用户输入和处理游戏中各种...

    cocos2d-x实战_lua卷

    《Cocos2d-x实战_Lua卷》是一本专注于Cocos2d-x游戏开发的实践指南,主要聚焦于使用Lua语言进行游戏编程。Cocos2d-x是一个开源的游戏引擎,广泛应用于2D游戏开发,因其跨平台性、性能优异以及丰富的社区支持而备受...

    Cocos2d-x实战++Lua卷.pdf

    根据提供的文件信息,本文将重点围绕“Cocos2d-x实战++Lua卷”这一主题进行深入探讨,并结合描述部分给出的知识点,详细阐述Cocos2d-x与Lua在游戏开发中的应用。 ### Cocos2d-x简介 Cocos2d-x是一款开源的游戏引擎...

Global site tag (gtag.js) - Google Analytics