Cocos2D-X learning 4

废话

今天和王爷一起去传说中的车库咖啡见了一个创业团队,跟他们有了一个小时左右的交流时间,交流的详情就不说了,总之,让我和王爷多了一个很好的话题,在回家的路上,我们就这个话题进行了友好、亲切而又愉快的交流,受益匪浅。
不过,最糟心的是,跑这一趟我竟然感冒了,主要是天气热,出了很多汗,而在地铁通道里风太大,晾了汗了,纠结死我了,明天还要去见一个离得比较近的创业团队,我在犹豫到底还要不要去。

概述

今天随便说说在Cocos2D-X开发中,关于对CCSprite方面的优化,总得来说就是尽可能减少渲染次数,这样可以使游戏运行更有效率,能够空出更多的CPU时间做其它的事情,以增加游戏的流畅与体验。

正文

Cocos2D为图片资源批量加载提供了CCSpriteFrameCache类,此类可以通过使用Sprite Sheet文件来减少图片加载次数,简单来说,就是把多个图片拼成一个大图片,之后通过坐标在大文件上取到相应的图片,这个技术被广泛使用在网页设计及游戏开发中。在这里我使用了一个叫做Zwoptex的软件自动生成大图片及相应的.plist,软件的具体使用方法就不在这里细说了(另外,朋友介绍说Texture Packer是可以更好的做这件事的工具,改天尝试一下)。

另外,Cocos2D还提供了一个CCSpriteBatchNode类,这个类主要作用是,当相同图片资源被重复使用时,通过这个类可以减少使相同的图片只渲染一次,具体做法看下面的代码。
PS: 代码基于上一篇BLOG,只对关键部分进行说明。

GameSceneDH.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef __StudyCocos2D__GameSceneDH__
#define __StudyCocos2D__GameSceneDH__

#include <iostream>
#include "cocos2d.h"

using namespace cocos2d;

class GameSceneDH: public CCLayer {
public:
static CCScene *scene();
virtual bool init();
CREATE_FUNC(GameSceneDH);
};

Read More

Cocos2D-X learning 3 (CCScene and CCMenu)

废话

本来部门计划今天下午全部门去搞团建的,主要活动是开卡丁车、桌游等项目,可惜天不从人愿,早晨有点下雨,好不容易盼到中午晴天,结果Leader又一个通知,说今天事情太多,活动改期到下周了,我勒个去的,废话不多说,进去正题。

概述

今天练习的内容主要是在Cocos2D开发中,对菜单的运用以及场景切换,中间还涉及到对于CCSprite对象的一些操作和schedule的简单应用。

正文

首先用create_project.py建立一个基础项目,然后分别建立两个CCLayer的子类。

StudyCocos2D.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//
// StudyCocos2D.h
// StudyCocos2D
//
// Created by Toby Lee on 14-3-28.
//
//

#ifndef __StudyCocos2D__StudyCocos2D__
#define __StudyCocos2D__StudyCocos2D__

#include <iostream>
#include "cocos2d.h"
using namespace cocos2d;

class StudyCocos2D: public CCLayer {
private:
void onStartClick(CCObject *obj);
public:
static CCScene * scene();
virtual bool init();
CREATE_FUNC(StudyCocos2D);
};

#endif /* defined(__StudyCocos2D__StudyCocos2D__) */

这是一个最简单的头文件,相比上一篇只多了一个私有方法void onStartClick(CCObject *obj),其作用后面再说明。

Read More

关于MySQL网络协议中的数据包序号

对MySQL协议稍作了解后,我们就知道在协议中,服务端与客户端相互之间的通讯都是以包的形式进行的。

在这些包中,有一个固定的特征就是前四个字节用途不变,前三个字节表示数据包的长度,第四个字节表示当前包在本次交互中是序数。

前三个字节最大只能表达16M的长度,这是三个字节表达无符号整型的极限,所以,每次客户端可以接受到的最大数据包为16M+4个字节。

Read More

Cocos2D-X learning 2

概述

今天学习了在Cocos2D-X开发中创建场景,以及在场景中加入图片资源,并通过写一个简单的例子对涉及到的CCLayer和CCSprite进行练习和熟悉。

过程

首先,场景类需要继承于CCLayer,并且必须实现类函数CCScene *scene()和虚函数bool init(),前者用于建立场景并在场景中加入层以备演示CCSprite,而后者则是用于对本场景进行初始化,代码如下:

GameScene.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef __HelloCocos__GameScene__
#define __HelloCocos__GameScene__

#include <iostream>
#include "cocos2d.h"

using namespace cocos2d;

class GameScene: public CCLayer {
private:
public:
virtual bool init();
static CCScene * scene();
CREATE_FUNC(GameScene);
};
#endif /* defined(__HelloCocos__GameScene__) */

以上代码, CREATE_FUNC(GameScene)是一个宏,此宏的功能是为GameScene类创建一个GameScene *GameScene::create()类函数,由于此函数的功能单一,其主要作用就是用来调用对象中的init()方法,因此,使用宏对代码进行简化是一个非常好的方法。

Read More

Cocos2D-X learning 1

最近学了一些关于Cocos2D-X的知道,在这里整理一下。

一直以来我做的都是后端的工作,现在突然有兴趣做一些前端的关于移动程序开发以及游戏开发方面的程序,对很多概念都是非常陌生的,不知道我后端开发方面的经验放在前端有没有一些用处。

Cocos2D的简单介绍

Read More