使用cocos2d-x v3.1开发小游戏(基本框架)

小游戏的组成

  • 欢迎界面

在游戏资源未全部加载完之前就需要载入,避免进入游戏会有一段黑屏时间。

可以用来展示游戏名称或者开发者logo。

  • 开始菜单界面

一般用于显示游戏名称和关卡选择(或者称游戏难度选择)。

可以外加一些设置性功能,如声音开关,帮助入口等等。

如果游戏设置内容较多可以把设置作为一个单独界面,在开始菜单上提供入口即可。

有的小游戏是以弹窗方式的菜单

  • 主游戏界面

游戏的中心部分,比如2048游戏的格子滑动界面,扫雷游戏的扫雷界面,贪吃蛇游戏的蛇移动的界面,等等。

小游戏拥有这一个界面也能算一个小游戏,但是没有其他界面会使游戏缺少更多选择。

游戏的主要逻辑都是在完成这个界面。

  • 游戏结束界面

游戏结束一般都会有个分数,用于展示本次游戏得分和历史最高得分对比。

在这个界面上可以添加再玩一次的按钮,让玩家重新玩一次。

大多数小游戏都是以弹窗的方式展示游戏结果。

  • 排行榜界面 (可选)

游戏中有分数这个概念就会有排名。

可以是单机的排行榜,也可以是联机的排行榜(需要服务器保存数据)。

排行榜可以促进玩家拿到更高的分数(也是有缺点的,看到其他玩家玩的分数太高了而放弃了)。

cocos2d-x v3.1 lua 框架的使用

  • lua代码结构

src
├── conf.lua                  # 配置文件,一些不变的配置保存在这里
├── GameOverScene.lua         # 游戏结束的界面
├── GameScene.lua             # 游戏主逻辑界面
├── HelloScene.lua            # 欢迎界面,在这里做资源更新检测
├── main.lua                  # 游戏lua脚本的入口
├── MainMenuScene.lua         # 游戏主菜单界面
├── RankScene.lua             # 排行榜界面
└── util.lua                  # 通用功能函数实现
每个XXOOScene.lua 文件的样子如下:
local XXOOScene = {}

XXOOScene.newScene = function ()
    local scene = cc.Scene:create()
    -- do other XXOO things
    return scene
end

return XXOOScene
关于Scene界面跳转,在util中封装一个通用函数用于界面跳转。
function util.toScene(scene)
    -- 增加一个统一的界面跳转动画
    scene = cc.TransitionSlideInR:create(0.5, scene)
    if cc.Director:getInstance():getRunningScene() then
        cc.Director:getInstance():replaceScene(scene)
    else
        cc.Director:getInstance():runWithScene(scene)
    end
end
main.lua用户进入HelloScene界面
  • HelloScene = require("src/HelloScene")
    
    local function main()
        cc.FileUtils:getInstance():addSearchResolutionsOrder("src")
        cc.FileUtils:getInstance():addSearchResolutionsOrder("res")
    
        HelloScene.newScene()
    end
    
    local status, msg = xpcall(main, __G__TRACKBACK__)
    if not status then
        error(msg)
    end

    游戏启动logo的Scene特殊处理

因为加载lua资源需要时间,待所有资源都加载完再创建游戏启动界面会出现启动的时候黑屏。我在1G的安卓机上测试需要5秒才能进入到lua创建的Scene。

解决方案:在 C++ 中创建启动画面,HelloScene.lua中不做创建Scene的操作,直接getRunningScene。

  • AppDelegate::applicationDidFinishLaunching () {
    
        // ... other xxoo things
    
        auto scene = Scene::create();
        auto s = Director::getInstance()->getWinSize();
        auto layer = LayerColor::create(Color4B(255, 255, 255, 255), s.width, s.height);
        auto logo = Sprite::create("res/logo.png");
        layer->addChild(logo);
        logo->setPosition(Vec2(s.width*0.5,s.height*0.7));
        scene->addChild(layer,0);
        director->runWithScene(scene);
    
        // 特殊处理,延迟加载lua(创建好logoScene再加载)
        auto action = CallFunc::create(startLua);
        layer->runAction(action);
    
        return true;
    }

    cocos2d-x v3.1 引擎的精简

起因: 引擎编译完之后发现lib文件相比2.x版本的大了不少。由于是做小游戏,一般都会有用不到的引擎部分,比我我就没用到ui编辑器,所以就想办法不编译ui编辑器部分。

步骤:

  • 找到mk文件: $ find . -name "Android.mk"
  • 修改mk文件,把与ui编辑器相关的语句注释掉。
  • 编译,在编译错误提示中找出还有什么需要注释的代码。我遇到的问题主要是CCB那些。需要在lua_cocos2dx_extension_manual.cpp中把CCB的代码注释。
  • CCLuaStack.cpp中也需要注释几个注册函数。

我还精简了物理引擎,刚开始是用到了的,但后面看小游戏用不上就把它也干掉了(大概省下1M)。

  • cocos/scripting/lua-bindings/auto/ 下的文件生成

看README后执行生成命令,遇到了一些问题:

  • 问题1:官方只提供ubuntu 64位的libclang.so文件,在32位机子上跑会报下面这个错误

  • LibclangError: libclang.so: wrong ELF class: ELFCLASS64. To provide a path to libclang use Config.set_library_path() or Config.set_library_file().
  • 解决方法:在llvm官网下载4.3版本的llvm和clang。编译生成libclang.so.3.4。拷贝到bindings-generator/libclang/下覆盖libclang.so文件。怎么编译的那个博客现在找不到了,步骤大概是:
  • clang-3.4.src.tar.gz 和 llvm-3.4.src.tar.gz 。解压,然后把clang目录拷贝到llvm-3.4/tools/下。编译,在llvm-3.4同一个目录下建一个build文件夹,进入到build,执行cmake ../llvm-3.4/CMakeLists.txt

文字描述可能不清晰,目录结构如下:

. -> build
| ->llvm-3.4  -> tools -> clang -> CMakeLists.txt
             |-> CMakeLists.txt
  • 问题2: 找不到头文件,报错出现unkown type name ,原因是官方配置的android_headers路径和我电脑上的不一样,主要是gcc的版本,我的是4.8的,官方配置是4.7。如下:

  • details = "unknown type name ‘__locale_t‘"
  • 解决方法:修改cocos2dx.ini中的android_headers 的值把/cxx-stl/gnu-libstdc++/4.7/ 改成/cxx-stl/gnu-libstdc++/4.8/ 。有两个地方要修改。这个问题要看自己的安卓ndk的配置情况,也许你的还是4.6呢,自己可以去ndk对应的路径下找找看自己的ndk版本。

全民顶爆菊花

应用宝:http://android.myapp.com/myapp/detail.htm?apkName=com.hanxi.runtodie

百度手机助手:http://as.baidu.com/a/item?docid=6678809

豌豆荚:http://www.wandoujia.com/apps/com.hanxi.runtodie

代码地址:https://github.com/hanxi/cocos2d-x-v3.1

使用cocos2d-x v3.1开发小游戏(基本框架)

时间: 2024-07-31 20:45:35

使用cocos2d-x v3.1开发小游戏(基本框架)的相关文章

csdn vip文章:Unity游戏开发-小游戏-非常简单的游戏-unity-

原文https://blog.csdn.net/qq_20484877/article/details/81841190 1*创建物体 Create菜单下 3D Object菜单下Cube 1.1设置属性x100   z100作为地面  1.2在创建一个立方体物体 1.3 Create菜单下 3D Object菜单下Cube 1.4复制立方体 创建一个空物体放立方体 代码 #pragma strict function Start () { } var speed : int =5; var s

易语言开发小游戏

1.程序部分.程序集 窗口程序集1.程序集变量 数组, 整数型, , "3".程序集变量 冠军, 整数型.程序集变量 终点, 整数型.程序集变量 到终点个数, 整数型 .子程序 显示物体 动画物体.缩放比 = 212动画物体.类型值 = 0数组 [1] = 动画框.创建物体 (动画物体, 10, 30, 真, “1”)动画框.置层次 (数组 [1], 1)动画框.置图片 (数组 [1], #兔子一号, ) 动画物体.缩放比 = 500数组 [2] = 动画框.创建物体 (动画物体, 1

用Vue开发小程序的框架

捉只晒氯掣斗侣慰才俣既淘匮蔡恃杜亓姥诘掩辗持萍妒园由普毯扛焙惩诼牧鸵推撬滥扯蒂奖傧酪记召惩刨狈伊仆篮卵背显娇页庸计醒滩远谷独仑克着登枪页状俜展沙掳焊率豪虐颐帜椭辈张荡首秦畔略蚀腾啦倜胀拦徘讯液懊思鄙懒兆撬崩膊谫嫌垦闻奔哪赌椿萄咸怯雇质装饭篮偾矫乃谙憾赌托谪貌颂爸量饺突质孤诜撤殉诚侵唇 9bi1ot嗡恍挚云泊幼http://p.baidu.com/ihome/center?uid=cfe6616263613266363034e3b1&h1ix=3bg0g3dy必枷懊忌浪簿http://p.baid

Python开发接水果小游戏

我研发的Python游戏引擎Pylash已经更新到1.4了.现在我们就来使用它完成一个极其简单的小游戏:接水果.以下是游戏截图: 游戏操作说明:点击屏幕左右两边或者使用键盘方向键控制人物移动,使人物与水果接触得分,碰到非水果的物品,如碎玻璃,就会game over. 接下来是详尽的开发过程,篇幅较长,请看官耐心阅读. Pylash项目地址 由于本次开发用到了pylash,大家可以先去Github上对引擎进行了解. https://github.com/yuehaowang/pylash_engi

使用Python开发一个超级简单的接水果小游戏,零基础也可以学会

Pylash项目地址 创建项目 这样的话我们的项目就创建好了,然后只用往Main.py里填写代码运行即可. 编写Hello World小程序 编写游戏 有以上对pylash的小小了解,我们接下来可以开始编写游戏了.首先我们把第四行以后所有代码删除. 引入所需 全局变量 游戏里面要用到一些全局变量,大家先浏览一遍,不同知道它们是干什么的,之后会用到: 加载资源 创建开始界面 在main函数中我们调用了gameInit函数,所以添加这个函数: 开始游戏 舞台层鼠标点击事件的监听器是startGame

【开发记录】微信小游戏开发入门——俄罗斯方块

叨叨 我在前一阵子,打算做一个微信小游戏,当然是单机的,只是为了了解小游戏开发的过程,最终选择了俄罗斯方块这一经典小游戏作为demo,源代码已托管值github,当然,这个游戏demo对用不并不友好,但是已经可以让我入门小程序开发了XD. demo地址:https://github.com/nbclw/Laya_Brick 准备 在任何开发前都需要对要开发的东西有一定的了解.准备: 小游戏原理:微信小游戏是属于H5游戏的一种吧,我是这样理解的:在H5中,有一个叫Canvas(画布)的存在,与电脑

小游戏专场:腾讯云Game-Tech技术沙龙上海站顺利落下帷幕

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 9月14日腾讯云GAME-TECH技术沙龙小游戏专场在上海顺利举办,此次技术沙龙由腾讯云的资深专家,以及Layabox游戏引擎的大牛为游戏从业者带来了众多技术干货,例如腾讯游戏云小游戏解决方案.微信小游戏入门与常见问题解惑.H5游戏语音解决方案.腾讯云数据库小游戏应用实践经验.微信小游戏运营及技术优化等.针对这些技术主题,专家大牛们与现场的游戏同仁们进行了深入的经验分享和讨论,并为游戏从业者解答了疑惑

多端小程序、小游戏兼容

当下存在的小程序/小游戏 已经开放的 内测中或将要开放的 多平台兼容的问题 没有统一标准 开发工具黑盒.不统一 API平台互相不兼容,同一平台前后版本也不兼容 业务差异 平台规范不同 兼容问题总结 现有工具 小程序开发 小游戏开发 微信小程序转其它小程序 工具小结 理论上的兼容方式 API兼容库 开发转换工具 多平台入口 本方案总结 相对实际的方案 统一技术栈 多平台开发方式 老项目迁移 总结 目前,小程序/小游戏成为潮流,BAT等大公司纷纷推出了小程序/小游戏,我们的兼容问题,也就提上了日程

跨端开发小程序

在微信小程序中,每个页面都是由.js..wxss..wxmk和.json四个部分构成,代码结构比较复杂.另外,由于对ES6语法和sass等css预处理支持的不友好,导致开发效率很低,所以早早就有用vue.js来开发小程序的框架,比如webpy和mpvue,但是基本都是单纯的开发微信小程序. 可是,随着微信小程序.网页H5.头条小程序.百度小程序.支付宝小程序.快运用.原生APP的增多,每个都独立开发的话,每个前端估计都要吐血了,所以,就出现了跨端开发的框架.现在基本对多端支持足够好的,就是tar