cocos2d-x 3.0 中所有对象几乎都可以用create函数来创建,其他的创建方式也是有create函数衍生。

下面来介绍下create函数创建一般对象的方法,省得开发中经常忘记啥的。

1、精灵Sprite的4种创建方式

(1)根据图片资源路径来创建

?

1
2
3
4
//根据图片路径来创建
auto sprite1 = Sprite::create(filepath);
//根据图片路径来创建,并设置要显示的图片大小
auto sprite2 = Sprite::create(filepath,Rect(         0         ,         0         ,width,height));

(2)根据plist文件中的frame name创建,图片名称前要加#符号来区分

?

1
2
//参数:帧名字,frame name
auto sprite = Sprite::create(         '#ball.png'         );

(3)根据缓存plist中的sprite frame来创建,这种用的比较多

?

1
2
3
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(         "loadingAndHP.plist"         ,        "loadingAndHP.png"         );         //加载图片资源作为缓存 
//从缓存图片中根据图片名字来创建
auto loading_bk=Sprite::createWithSpriteFrameName(         "loading_bk.png"         );

(4)根据纹理texture创建

?

1
2
3
4
5
6
//根据纹理图片来创建
auto batch = SpriteBatchNode::create(         "Images/grossini_dance_atlas.png"                 1         );        //加载缓存纹理
//根据纹理来创建精灵
auto sprite = Sprite::createWithTexture(batch->getTexture());
//根据纹理来创建精灵,并设置显示区域大小
auto sprite = Sprite::createWithTexture(batch->getTexture(), Rect(x, y, width, height));


2、文字LabelTTF的创建方式

(1)根据字体、大小等多参数创建

?

1
2
3
4
5
6
auto center = LabelTTF::create(         "hello cocos2d-x"         ,         //要显示字符串
                                         "Paint Boy"         ,         //字体
                                          32         ,         //字号
                                          Size(s.width/         2         ,         200         ),         //显示的宽和高
                                          TextHAlignment::CENTER,         //显示的位置,定位
                                          TextVAlignment::TOP);

(2)根据自定义对象FontDefinition来创建

?

1
2
3
4
5
6
7
8
9
10
11
12
FontDefinition shadowTextDef;
shadowTextDef._fontSize =         20         ;         //字号
shadowTextDef._fontName = std::string(         "Marker Felt"         );         //字体
shadowTextDef._shadow._shadowEnabled =         true         ;         //设置是否有阴影
shadowTextDef._shadow._shadowOffset  = shadowOffset;
shadowTextDef._shadow._shadowOpacity =         1.0         ;         //设置透明度
shadowTextDef._shadow._shadowBlur    =         1.0         ;
shadowTextDef._fontFillColor   = tintColorRed;
// shadow only label
auto fontShadow = LabelTTF::createWithFontDefinition(         "Shadow Only Red Text"         , shadowTextDef);         //根据自定义的字体创建要显示的内容

3、对于3.0中SpriteBatchNode,不鼓励使用,文档看这里点击打开链接,在此不再赘述SpriteBatchNode的用法。

4、帧动画创建方式

通过多张图片文件来创建一个动画,

?

1
2
3
4
5
6
7
8
9
Animation* animation = Animation::create();
animation->setDelayPerUnit(         1.0         / fps);
for         (         int         i =         0         ; i <= count; i++) {
             const         char         *filename = String::createWithFormat(fmt, i)->getCString();
             SpriteFrame* frame = SpriteFrameCache::getInstance()->spriteFrameByName(
                         filename);
             animation->addSpriteFrame(frame);
}

Animation是由Sprite frame帧组、单个frame延时,持续时间等组成的,它是一组“数据”,而Animate是一个Action,它是基于Animation对象创建的。

5、序列帧动画Sprite sheet animation

(1)通过.plist文件来创建

?

1
2
3
4
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(filename);         //加载.plist文件到缓存中
AnimationCache* cache = AnimationCache::getInstance()->addAnimationsWithFile(filename);         //根据动画.plist文件来创建动画缓存
Animation* animation = cache->animationByName(filename);         //直接从缓存中创建动画
Animate* animate = Animate::create(animation);         //生成动画动作

(2)通过数组来创建

?

1
2
3
4
5
6
7
8
9
Array* animFrames = Array::createWithCapacity(         15         );
char         str[         100         ] = {         0         };
for         (         int         i =         1         ; i <         15         ; i++)
{
             sprintf(str,         "grossini_dance_%02d.png"         , i);
             SpriteFrame* frame = cache->spriteFrameByName( str );
             animFrames->addObject(frame);
}
Animation* animation = Animation::createWithSpriteFrames(animFrames,         0         .3f);

好了,这篇简单介绍了游戏中经常要用到的对象的创建方式,对于游戏中的其他元素,可以参考游戏源码的demo中的创建方式,这个demo值得好好研究学习。

原文地址:http://www.2cto.com/kf/201407/321084.html

转 cocos2d-x 3.0 常用对象的创建方式相关推荐

  1. c++类对象的创建方式

    对象创建限制在堆或栈 c++类对象的创建方式 对象创建限制在堆或栈 C++ 中的类的对象的建立模式 如何将类限制在堆上呢? C++ 中的类的对象的建立模式 C++ 中的类的对象的建立模式分为两张:静态 ...

  2. C++ 控制对象的创建方式和数量

    我们知道,程序内存布局将内存划分为堆.栈.BSS 段.数据段和代码段.既然如此,我们称位于堆上的对象叫堆对象,位于栈上的对象的叫栈对象,位于BSS段和数据段的对象叫全局对象或静态对象.通常情况下,对象 ...

  3. c#类属性和实例属性_Visual C#类和对象的创建方式,定义类,实例化对象,实例讲解...

    定义类 类由class member类成员组成,包含字段.属性.方法和事件.其中字段和属性为类的数据成员,用来存储数据:方法负责数据的传递和运算.使用类之前,要进行声明,声明的语法如下: Class ...

  4. JavaScript对象的创建方式

    JavaScript对象创建 1.直接式 //1.直接创建对象var student = new Object();student.name = "zhangsan";studen ...

  5. activexobject对象不能创建_【设计模式】建造者模式:你创建对象的方式有它丝滑吗?...

    目录 什么是建造者模式 为什么要使用建造者模式 构造函数创建对象 set方式构建对象 java实现建造者模式 第一种实现方式 第二种方式 建造者模式与构造函数的对比 建造者模式与工厂模式的对比 总结 ...

  6. 041_对象的创建和销毁

    1. 对象的创建和销毁都在JavaScript执行过程中发生, 理解这种方式的含义对理解整个语言至关重要. 2. 声明和实例化 2.1. 对象的创建方式是用关键字new后面跟上实例化的类的名字: va ...

  7. DOM_05之DOM、BOM常用对象

    1.HTML DOM常用对象之Table:①创建:createTHead():createTBody():createTFoot():②删除:deleteTHead():deleteTFoot():③ ...

  8. JS重点语法及常用对象总结

    1.JS简介 2.JS三种引入方式         外部引用法         内部引用法         元素属性引用 3.JS语法基础         数据类型         特殊运算符     ...

  9. 【JavaScript】JS的变量、数组、计算器案例、函数、类、常用对象的方法

    目录 01-js-js的声明和引入 <!DOCTYPE html> <html><head><meta charset="UTF-8"&g ...

最新文章

  1. Linux---管理网络
  2. sed awk 笔记(二)
  3. 如何才能使用内存小或者显存小的设备训练神经网络
  4. redis 集群搭建_一文轻松搞懂redis集群原理及搭建与使用
  5. JAVA进阶教学之(Object类中的equals方法)
  6. javabean连接mysql数据库,jsp+javabean 链接 mysql 数据库
  7. python字符串填充_填充函数(Python)字符串.zfi
  8. 服务器数据库带宽费开票项目,服务器带宽和访问数据库速度
  9. 【英语学习】【WOTD】hoodwink 释义/词源/示例
  10. Bzoj3576 [Hnoi2014]江南乐
  11. 如何在 Mac 上的“照片”中更改和增强视频?
  12. 重装机兵3 完美攻略修正版
  13. RT-Thread在正点原子Apollo上为 QSPI FLASH W25Q256移植FATFS文件系统
  14. ndk编译 toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe
  15. python 读取传入参数
  16. 南卡和苹果蓝牙耳机哪个好?高颜值且音质好的蓝牙耳机推荐
  17. java第一周的实验题,待优化(李老师)
  18. [数据结构与算法]-二叉查找树(BLT)介绍及其实现(Java)
  19. plink, vcftool计算等位基因频率(allele frequency,vcf)
  20. DCA、NRI、IDI

热门文章

  1. oracle 14108,ORA-14108:非法分区扩展表名的语法
  2. python调用自定义函数返回值的类型_生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)...
  3. ikvm Java中异常_使用IKVMC将Java转换为.NET库 – 警告IKVMC0108:...
  4. HDLBits 系列(34)Serial two's complememter(Mealy and Moore FSM)
  5. MATLAB中的三角函数单位问题
  6. 解读ADC采样芯片(EV10AQ190A)的工作模式(四通道模式)
  7. 一个NODE_ENV 引发的血案
  8. 洛谷 P2415 集合求和【数学公式/模拟】
  9. iOS UITableView的方法解析
  10. DataTable分页控件设计(适用于Gridview和Repeater)