小游戏的组成

  • 欢迎界面

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

可以用来展示游戏名称或者开发者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(, , , ), 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,);
    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开发小游戏(基本框架)的更多相关文章

  1. Cocos开发小游戏如何实现微信排行榜

    当游戏开发进入尾声,要引入微信数据的时候,需要了解和微信相关的接口了. 关系数据链 开放数据域 相关接口如下: wx.getFriendCloudStorage() 获取当前用户也玩该小游戏的好友的用 ...

  2. 三、微信小游戏开发 --- 小游戏API调用Platform

    微信小游戏API Platform主要是Egret用于来调用平台的SDK的. 在Egret中使用接口定义Platform. Egret项目中默认的platform值是DebugPlatform. 发布 ...

  3. Java开发小游戏 用键盘控制精灵在游戏中上下左右跑动 窗体小游戏可打包下载,解压后双击start运行

    package com.swift; import java.awt.Point; import java.awt.event.KeyEvent; import com.rupeng.game.Gam ...

  4. Laya 小游戏通用框架设计理念

    当前在用laya做小游戏开发,做了几个项目,总结了一下游戏中所需要的一些模块,大概理了一下,然后写成一套自己习惯使用的框架 总结了一下其中的模块 大概要分为一下模块 1.Base 模块    存放一些 ...

  5. 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)

    回顾 上一节我们搭建了游戏的骨架,添加了四个游戏场景,分别是加载.开始.游戏.结束.那么这一节我们来介绍加载这个场景,顺带丰富一下各个场景的基本内容. Phaser.Loader Phaser框架自带 ...

  6. Egret白鹭开发小游戏中容易犯的错

    在游戏开发过程中遇到问题,请首先查阅:http://developer.egret.com/cn/github/egret-docs/Engine2D/minigame/minigameFAQ/ind ...

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

    原文https://blog.csdn.net/qq_20484877/article/details/81841190 1*创建物体 Create菜单下 3D Object菜单下Cube 1.1设置 ...

  8. Egret白鹭开发小游戏之自定义load加载界面

    刚接触不久就遇到困难------自定义loading.想和其他获取图片方式一样获取加载界面的图片,结果发现资源还没加载就需要图片,在网上百度了许多,都没有找到正确的方式,通过自己的摸索,终于,,,我成 ...

  9. iOS开发小技巧--高斯模糊框架的应用

    事件背景:彩票项目中点击检查更新之后的操作,高斯模糊效果并弹出HUD 注意:在应用别人的框架的时候,最好封装一下下. 新建一个类  继承自高斯模糊的类. 使用方法:新建一个高斯模糊类的View,添加到 ...

随机推荐

  1. C# async await 学习笔记1

    由于我的开发工具为vs.net 2010(.net 4.0),需先做以下两步才能进行: 1.下载并安装Async CTP (http://www.microsoft.com/en-us/downloa ...

  2. 将枚举定义生成SQL中的Case-When-then语句

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. centos6.4 无法进入图形界面的问题及解决

    在安装了ngnix及pcre.openssl.zlib.lua等模块之后,进不了图形界面. 解决的方法如下: Ctrl+Alt+F5,输入账号和密码 vim /etc/inittab #将等级5改为等 ...

  4. [转]一个文件上传的jquery插件

    http://www.jb51.net/article/51547.htm 这篇文章主要介绍了使用ajaxfileupload.js实现ajax上传文件php版,需要的朋友可以参考下     无论是P ...

  5. 作业七:团队项目——Alpha版本冲刺阶段-01

    昨天进展:准备开发环境,安装软件. 今天安排:软件框架设计. 小组一共三人,陈芝航因家里有事,与我们进行了QQ视屏会议.

  6. [ThingWorx] Install PostgreSQL Issue

    ThingWorx application need PostgreSQL, I try configurate it in macbook. The first step is install Po ...

  7. javascript变量名提升

    预解析的过程 代码的执行过程 程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此时进行标记.所谓的标记就是让js解释器直到有这个名字,后面在使用名字的时候,不会出现未定义的错误,这个标记就 ...

  8. ftp 操作,支持断点续传或者继续下载。

    1.ftpclient 类 public class FTPClient:IDisposable { public static object _obj = new object(); #region ...

  9. Why we need template on Django ?

    Let's create a simple website by django ... step01: django-admin startproject x01 step02: cd x01 ls ...

  10. js程序设计03——面向对象

    ECMAScript中有2中属性:数据属性.访问器属性. 数据属性是为了指定某对象的指定key上的一些行为,比如value是否可删除.修改.key可循环遍历等特点.而访问器属性不包含数据值,包含一堆g ...