使用Cocos Code IDE运行lua-test(本人使用的是cocos2d-x 3.3rc0)

本文详细介绍了如何在Cocos Code IDE中运行Cocos2d-x 3.3rc0的Lua-tests,包括创建项目、复制测试文件、修改资源路径,以及将项目打包成APK并安装到真机测试。通过解决加载资源路径问题,成功运行AccelerometerTest,并鼓励程序员保持学习和交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人遇到的问题及解决方法见文尾


《Cocos2d-x-3.2 Lua-tests》文件详解 之 加速器

现在主流的移动游戏开发方法是cocos2d-x + Lua脚本语言做快速开发。经历了几个小游戏的开发过程,体味到了cocos2d-x 和 Lua的强大之处。

但是有些东西掌握地不牢,用的时候不免会捉襟见肘。网上提供的资料也是零零散散的,有时候看起来然人一头雾水。

所以决定将对Lua-tests进行解读,记录下来,形成一套完整的Lua + cocos2d-x教程。一来温故知新,二来与大家交流,共同进步。

接下来的博文中,如有错误的地方,还需要大家不吝指正!

本博文对应的引擎版本和工具:

  • cocos2d-x-3.2 (不要3.0与3.2混用,谁用谁懂的。。。)
  • Cocos Code IDE Build:V1.0.0.RC0
  • Visual Studio 2012 - 用来创建自定义runtime
  • 环境配置如图,windows环境变量的设置从略

顺便提一句,在网上很少能找到专门介绍 cocos2d-x + Lua的文章,本系列博客将只介绍Lua版本。C++先放一边,还有,现在的Cocos Code IDE已经能够将你的项目刷到真机上测试了!!

以下步骤可以在Cocos Code IDE中运行Lua-test,并Package to APK 装到真机上测试:

  1. 进入Cocos Code IDE,在项目管理其空白处右击,选择Cocos Lua Project创建新项目。
  2. 输入一个你想要的非 nil名字,点击下一步,勾选Add Native Codes,点击Finish,IDE会用内置的项目模板给你生成原始项目
  3. 此时打开你的workspace,找到你的项目,会有这几个文件夹:.settings , frameworks,res,runtime,src。
  4. 接下来:删除src,res文件夹下的所有文件
  5. 找到你的cocos2d-x-3.2,一次进入test→lua-tests。里面有project,res,src三个文件夹,30个.lua文件,一个.cocos-project.json文件
  6. 现在,将30个.lua文件复制到你项目的 根文件夹下,然后将res,src中的文件都复制到你项目对应的文件夹中
  7. 进到你项目src文件夹,里面有48个Test文件夹和这几个.lua文件:controller.lua  ,helper.lua  ,mainMenu.lua ,testResource.lua ,VisibelRect.lua。将controlle.lua重命名为main.lua
  8. 回到Cocos Code IDE,刷新项目,就能在项目目录中看到上面提到的所有文件了。然后,选中项目,右键 → Run As → Cocos Luabinding运行

 

到这一步,已经在PC上面完成。

下面上图,刷到真机上:

最后一步,连接你的设备到电脑,点击Refresh,找到你设备之后,Refresh会变成Install,点击即可

还可以点击Open Package Location好到你的apk文件。

刷到你的手机里面,随时感受Cocos2d-x的魅力吧。

 

下面是本文“主题” - 加速器

在Cocos Code IDE一次找到src → AccelerometerTest - 打开AccelerometerTest.lua 就会见到下面的代码

(看懂代码的前提:掌握Lua语法 + 了解Cocos2d-x基本框架)

复制代码
--[[
         每一个test文件是一个Scene,该Scene中包含多个小test,每个test是一个层,主框架是一个Layer,包含主界面菜单,封装了所有Scene都用得到的基本功能
]]--

local function AccelerometerMainLayer()

    local function title()
      return "AccelerometerTest"
    end
    local layer = cc.Layer:create()

    local function onEnter()
        --首先设置layer的可加速属性为true,对layer启用加速器
        layer:setAccelerometerEnabled(true)
     --[[ 
      这个是设置测试的标题:ttf字体标签,
      显示内容:title()方法返回的字符串,
      字体文件:fonts/arial.ttf
      字体大小:32
      添加到层中,设置锚点和坐标
      ]]--
        local label = cc.Label:createWithTTF(title(), "fonts/arial.ttf", 32)
        layer:addChild(label, 1) 
        label:setAnchorPoint(cc.p(0.5, 0.5))
        label:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 50) )
        
        --生成小球 - Sprite
        local ball = cc.Sprite:create("Images/ball.png")
        --设置初始位置
        ball:setPosition(cc.p(VisibleRect:center().x, VisibleRect:center().y))
        layer:addChild(ball)

        local function accelerometerListener(event,x,y,z,timestamp)
        --[[
                         加速事件发生时,会传出多个参数:event,x,y,z,timestamp
                         event:被绑定的物件发出的加速器事件,可以用getCurrentTarget()获取事件的发送者
                         x,y,z:加速器传递的的坐标
        ]]--
            --获取ball
            local target  = event:getCurrentTarget()
            --获取尺寸
            local ballSize = target:getContentSize()
            
            --获取小球初始坐标,存入ptNowX,ptNowY中,并配合加速器传来的坐标x,y进行一系列计算
            local ptNowX,ptNowY    = target:getPosition()
            ptNowX = ptNowX + x * 9.81
            ptNowY = ptNowY + y * 9.81
            
            --设置小球活动的时候x坐标的范围
            local minX  = math.floor(VisibleRect:left().x + ballSize.width / 2.0)
            local maxX  = math.floor(VisibleRect:right().x - ballSize.width / 2.0)
            --进行简单的碰撞判定
            if ptNowX <   minX then
                ptNowX = minX
            elseif ptNowX > maxX then
                ptNowX = maxX
            end
            --设置小球活动的时候y坐标的范围
            local minY  = math.floor(VisibleRect:bottom().y + ballSize.height / 2.0)
            local maxY  = math.floor(VisibleRect:top().y   - ballSize.height / 2.0)
            if ptNowY <   minY then
                ptNowY = minY
            elseif ptNowY > maxY then
                ptNowY = maxY
            end
            --将计算后的ptNowX,ptNowY设置给小球   因为ptNowX,ptNowY与加速器坐标x,y相关,是动态的,所以小球会随加速器动起来
            target:setPosition(cc.p(ptNowX , ptNowY))
        end
        --onEnter()方法入口,注册加速事件侦听器,accelerometerListener()方法定义了事件发生时触发的相关操作(逻辑,动作。。)
        local listerner  = cc.EventListenerAcceleration:create(accelerometerListener)
        --与ball的事件调度器绑定   --不了解cocos2d-x事件调度机制的人,留言交流
        layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listerner,ball)
    end

    local function onExit()
        layer:setAccelerometerEnabled(false)
    end
    
    --载入节点的时候,引擎自动调用onEnter(),开始布局和启用加速器
    --退出的时候,调用onExit(),关闭加速器(仅对本层 关闭
    local function onNodeEvent(event)
        if "enter" == event then
            onEnter()
        elseif "exit" == event then
            onExit()
        end
    end
    --首先给layer注册节点事件,这里是读代码的入口
    layer:registerScriptHandler(onNodeEvent) 
    return layer
end

function AccelerometerMain()
    cclog("AccelerometerMain")
    local scene = cc.Scene:create()
    scene:addChild(AccelerometerMainLayer())
    scene:addChild(CreateBackMenuItem())
    return scene
end
复制代码

注:测试工程的架构不值得大家学习,所以就不做介绍了。

程序猿提高的方法一是保持学习,二是跟保持学习的人交流。

看到太多太多的程序员上网发帖,开口就跪求。。。大量的时间浪费在质量不高的学习资料中,真让人心酸呀。。。

好的程序员是高智慧人群,学习是有方法的。大家共勉

以上转载自博客:http://www.cnblogs.com/apophisx/p/3896163.html

----------------------------------------------------------------------------------------------------------

按照上面的大神的指导,我尝试了一遍把cocos2d-x 3.3rc0上午lua-test加载到Cocos Code IDE上运行,结果出现了下面的错误


我的问题出在没有加载资源的路径




于是我在main.lua中添加了资源的路径


接着,运行一次便成功了,希望看此篇博文的对遇到此类问题的程序猿有用。

ps:转载请著名出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值