转 cocos2d-x 3.0 常用对象的创建方式

简介:

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值得好好研究学习。

目录
相关文章
使用Unity获取所有子对象及拓展方法的使用
这个问题还是比较简单的,无非就是一个for循环就可以全部获取到了,但是我喜欢简单直达,有没有直接就能获取到所有的子对象函数呢,搜了好久都没有,所以我准备写一个扩展函数,来自己补充这个函数,一起来看一下吧。
|
图形学
Unity 项目中委托Delegate用法案例
Unity中Delegate的用法场景 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) China...
1483 0
|
Android开发 图形学

热门文章

最新文章