俯瞰 cocos2d-x 02 创建精灵

写在开篇

我所期望的愿景是: 使用3ds max 创建一个自己的世界 , 使用 unity3D给我的世界加上逻辑和交互 , 然后匹配到多个终端 ,让世界沉浸在我的世界中...

                                                                                                                                                                                                                                                                        ---- 我

================================  

    通过上一篇的内容,你已经对场景的切换有了大概的了解,为了照顾全新手,截图比较多.... 从本篇开始,不再截图了...如果有问题,请留言

   如果你成功完成了上一篇的代码,那么你就已经有了一个基本的框架.你可以在原来文件的基础上进行修改.或者是重新建立文件,这个取决于你.


  这篇我们来讲解一下创建精灵的几种方式.

  (如果你不清楚精灵是什么,请自行百度补课)

  .h文件 (请不要在意类名)

#ifndef __HelloWorldDemo__ForthScene__
#define __HelloWorldDemo__ForthScene__

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

class ForthScene:public Layer
{
public:
    static Scene* scene();
    CREATE_FUNC(ForthScene);
    bool init();
};

#endif /* defined(__HelloWorldDemo__ForthScene__) */

请注意,这个代码是最基本的代码框架, 让你新建一个类,请不假思索的把以上的代码敲上....请注意: 

static Scene* scene();

这个 scene的命名一般是2.x的习惯,到了3.x之后, 一般命名为 createScene .这只是个命名习惯,你要命名为:zzz 也是没有问题的.所以,请知晓,那这里就改了,大家知道就好.


#include "ForthScene.h"


Scene* ForthScene::scene()
{
    Scene *scene = Scene::create();
    Layer *layer = ForthScene::create();
    
    scene->addChild(layer);

    return  scene;
}
bool ForthScene::init(){

    Layer::init();

    return true; 	
}
   
以上是 .cpp文件的基本代码. 

有了以上的两部分,就是一个最基本的 自定义类的模版了.所以,如果你嫌麻烦,可以保留一份,以后拷贝用.但是新手请坚持写,因为为了熟练度

我们的操作应该在 init方法中,至于原因.这个以后我们也会提到(考虑到新人的接受能力,关于方法的调用顺序等内容,我们将放在后面讲解,如果现在就迫不及待了,请参考官方文档),现在请记住,你的操作放到init方法中.

 Sprite *sp1 = Sprite::create();
 Sprite *sp2 = Sprite::create("CloseNormal.png");
 Sprite *sp3 = Sprite::create("HelloWorld.png",Rect(10, 10, 20, 20));

第一种是直接创建一个精灵,但是这个精灵什么都没有,所以,如果使用第一种方法创建的,还是需要通过:

   sp1 = Sprite::create("CloseNormal.png");

所以,第一种方式,除了特定场合,基本没用.

sp2 和 sp3 的方式就非常明了了 . 通过图片,创建, sp3多了一个矩形的参数,就是显示图片的矩形大小区域.

以上三个是比较原始的创建精灵的方法,效率也是比较低的.
会重复打开文件,加载到内存,打开文件,加载到内存,引出了下面的方式
 

    //2.通过纹理去创建精灵
    Texture2D* texture = TextureCache::sharedTextureCache()->addImage("CloseSelected.png");
    Sprite *spr = Sprite::createWithTexture(texture);
    //Sprite::createWithTexture(<#cocos2d::Texture2D *texture#>, <#const cocos2d::Rect &rect#>)
    addChild(spr);
    
    
    //3.通过精灵帧创建精灵
    SpriteFrame *frame = SpriteFrame::createWithTexture(texture,Rect(0, 0, 80, 80));
    spr=Sprite::createWithSpriteFrame(frame);
    
    Size size = texture->getContentSize();
   
    //4.通过精灵帧缓存创建精灵:区别是文理用的是文件名,帧是自己取得
    SpriteFrameCache::sharedSpriteFrameCache()->addSpriteFrame(frame, "myFrame");
    spr = Sprite::createWithSpriteFrameName("myFrame");
    

这三种的效率是比较高的 .

创建好了精灵,然后

   //0 取得可视区域(窗口)的大小
    Size visibleSize = Director::getInstance()->getVisibleSize();
    //1 创建精灵
    Sprite * sp = Sprite::create("CloseNormal.png");
    //2 添加到 Layer
    addChild(sp);
    //3 设置显示位置
    sp->setPosition(Point(visibleSize.width/2,visibleSize.height/2));

以上就是一个完整创建并显示一个精灵的过程.


需要说明的是,很多初学者纠结 先 addChild 还是先 setPosition .其实结果都一样,就是显示是一帧一帧的.当前帧设置了各种属性,到下一帧才会显示出来. 所以在当前帧,无论先做什么,都是合理的.
















  

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值