【Cocos2d-x】Sprite精灵类-创建Sprite精灵对象

精灵在Cocos2d-x中的地位就像一场电影中的主角,男主角/女主角,是一场电影中的灵魂所在。也是我们游戏中的灵魂
无论我们控制的对象还是电脑控制的对象,我们都称之为精灵,或者背景中的图片,也可以称为精灵、只要在游戏场景中的东西,都是可以用精灵来做的。比如菜单,可以做成精灵菜单。
还有些精灵是和物理引擎有关的,有一些物理特效。
本章讲的精灵,只是一般意义上的精灵。

创建Sprite精灵对象

创建精灵对象

创建精灵对象有多种方式,其中常用的函数如下:

static Sprite* create(); //创建一个精灵对象,纹理等属性需要在创建后设置
static Sprite* create(const std:string &filename); //指定图片创建精灵  这种方式在实际项目中很少用。我们不会简单的把每个精灵做一个图片,这样会消耗更多的IO读写时间
//可以放在大图中(合成图),进行一次读取,在使用中再截取,也就是下面的创建方法(这样内存会消耗多,但是IO操作少)
//如果使用的是iOS系统(苹果),图片不能超过2048*2048,这是系统的限制
static Sprite* create(const std::string &filename,const Rect &rect); //指定图片和裁剪的矩形区域来创建精灵
static Sprite* createWithTexture(Texture2D *texture);//指定纹理创建精灵  如果已经有纹理对象了,直接把纹理对象拿过来创建精灵对象
static Sprite* createWithTexture(Texture2D *texture,const Rect &rect,bool rotated=false);//指定纹理和裁剪的矩形区域来创建精灵,第三个参数是否旋转纹理,默认不旋转  从纹理缓存区来裁剪矩形区域创建精灵
//旋转就是,可能某些情况下,我们合图时为了节省空间,将小图旋转再合图了,这个时候就需要旋转了
static Sprite* createWithSpriteFrame(SpriteFrame *pSpriteFrame);//通过一个精灵帧对象创建另一个精灵对象 帧缓存
static Sprite* createWithSpriteFrameName(const std::string &spriteFrameName);//通过精灵帧的名字的创建

Sprite继承关系图:

纹理

无论是计算机中的CPU还是GPU,做运算做处理,它不是对图片进行处理。图片读入到计算机里,需要对图片进行解码。最后,在计算机放的东西,就可以叫做纹理!
实际上,纹理就是由图片或者计算机本身用绘图工具绘画出来的对象。这个东西本身最后的目的是为了放在图片上面,这个过程叫纹理贴图。
在实际中,我们有时候是把纹理叫成图片的。或者图片叫成纹理。一般而言,在游戏里叫纹理或纹理图片,这是没问题的

使用纹理对象创建Sprite对象

场景设计:

两个精灵(具体几个,看美工给几张图咯):
草地图片:



树图片:

这张图上有三棵树,实际上我们不需要全部用到,所以不能简单的把树图片放到草地图片上面。
而且摆放位置也不同。对于第二种图片,我们可以先读到内存里,形成一个纹理对象,然后从这个纹理对象中截图
从里面裁剪出来来创建精灵对象。
裁剪有两种方式,一是通过它的纹理缓存来裁剪。也可以从大图文件直接进行裁剪。

不管是哪种方式,我们都需要去量树的坐标,Rect的参数是一样的!
去画图工具中量坐标:
我们需要的参数是:左上角坐标,还有宽和高

从纹理中创建tree精灵:

auto tree1 = Sprite::create("tree1.png", Rect(608, 36, 300, 298));//左上角的坐标,宽,高
//指定大图,指定Rect获取树的截图
tree1->setPosition(Vec2(200,230));
this->addChild(tree1,0)
Texture2D* cache = Director::getInstance()->getTextureCache()->addImage("tree1.png");
auto tree2 = Sprite::create();
tree2->setTexture(cache);
tree2->setTextureRect(Rect(70,72,187,267));
tree2->setPosition(Vec2(500,200));//设置精灵位置
this->addChild(tree2,0);
//通过纹理缓存截取树

平时我们玩游戏的时候,遇到游戏中loading的画面时,基本上就是在缓存纹理,经过这个步骤后,我们玩游戏会快很多。因为不会去临时加载图片

实例:


bool HelloWorld::init()
{
    if ( !Layer::init() )
    {
        return false;
    }

    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    //背景精灵
    auto background = Sprite::create("background.png");//背景图
    //background->setAnchorPoint(Vec2::ZERO);//指定锚点(默认坐标为0,0)或者:
    background->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));//指定位置(默认锚点为0.5,0.5)
    this->addChild(background,0);

    auto tree1 = Sprite::create("tree1.png", Rect(608, 36, 300, 298));//左上角的坐标,宽,高
    //指定大图,指定Rect获取树的截图
    tree1->setPosition(Vec2(200,230));
    this->addChild(tree1,0);

    Texture2D* cache = Director::getInstance()->getTextureCache()->addImage("tree1.png");
    auto tree2 = Sprite::create();
    tree2->setTexture(cache);
    tree2->setTextureRect(Rect(70, 72, 187, 267));
    tree2->setPosition(Vec2(500, 200));//设置精灵位置
    this->addChild(tree2, 0);
    //通过纹理缓存截取树

    return true;
}

源代码下载地址:

GITHUB源码下载地址:点我进行下载

本文章由[谙忆]编写, 所有权利保留。
欢迎转载,分享是进步的源泉。

转载请注明出处:http://chenhaoxiang.cn

本文源自人生之旅_谙忆的博客

时间: 2024-09-15 09:10:25

【Cocos2d-x】Sprite精灵类-创建Sprite精灵对象的相关文章

Cocos2d-x Lua中Sprite精灵类

精灵类是Sprite,它的类图如下图所示. Sprite类图Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的子类有:PhysicsSprite和Skin.PhysicsSprite是物理引擎精灵类,Skin是皮肤精灵类用于骨骼动画.创建Sprite精灵对象创建精灵对象有多种方式,其中常用的函数如下:cc.Sprite:create ().创建一个精灵对象,纹理[ 纹理(texture),表示物体表面细节的一幅或几幅二维图形,也称纹理贴图,当把纹理按照

《Cocos2D权威指南》——3.6 CCSprite精灵类

3.6 CCSprite精灵类 CCSprite是Cocos2D游戏开发中最常用的类,用图片把精灵(sprite)显示在屏幕上. 在游戏开发中,经常会遇到精灵(sprite)这个术语.精灵是一个图像,可以在屏幕上独立地移动.一个精灵可能是玩家角色.敌人,或者是大的背景图像.一般情况下,精灵来自于开发者所准备的PNG或PVRTC图像.一旦图像载入内存,就会将精灵转换成纹理图,从而被iPhone GPU用于在屏幕上渲染.3.6.1 CCSprite类的属性及方法 生成精灵的最简单方法是把图片文件加载

实例:使用纹理对象创建Sprite对象

精灵类是Sprite,它的类图如下图所示: Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的派生类有:PhysicsSprite和Skin.PhysicsSprite是物理引擎精灵类,Skin是皮肤精灵类用于骨骼动画. 使用纹理Texture2D对象创建Sprite对象是使用createWithTexture函数实现的.我们会通过一个实例介绍纹理对象创建Sprite对象使用,这个实例如下面第一张图所示,其中地面上的草是放在背景中的,场景中的两棵树是从

Cocos2d-JS中的Sprite精灵类

精灵类是cc.Sprite,它的类图如下图所示.cc.Sprite类直接继承了cc.Node类,具有cc.Node基本特征. 创建Sprite精灵对象创建精灵对象可以使用构造函数实现,它们接受相同的参数,这些参数非常灵活.归纳起来创建精灵对象有4种主要的方式:1. 根据图片资源路径创建 //图片资源路径 var sp1 = new cc.Sprite("res/background.png"); //图片资源路径和裁剪的矩形区域 var sp2 = new cc.Sprite(&quo

《Cocos2d 跨平台游戏开发指南(第2版)》一1.7 创建自定义精灵类

1.7 创建自定义精灵类 前面我们只是考虑如何把一个精灵添加到场景中,然而,以后可能想要一个单独的精灵类,以便你能为它添加自己的行为.在这一部分,我们将讨论如何通过扩展基本的CCSprite类来创建自定义的精灵类. 1.7.1 准备工作 让我们一起看一下如何创建一个自定义精灵类,它拥有自己的运动,并且更新函数. 为此,我们要先创建新文件. 1.在菜单栏中,依次选择File-New-File,在iOS的Source下,选择Cocoa Touch Class,单击Next按钮,如图1-19所示. 2

cocos2d x-cocos如何将事件监听封装到自定义的精灵类中,求一个demo

问题描述 cocos如何将事件监听封装到自定义的精灵类中,求一个demo cocos如何将事件监听封装到自定义的精灵类中,求一个demo.每次创建新的精灵时就会添加触摸监听.在其他层中可以拖拽移动这些添加到层中的精灵 解决方案 把你的方法放进init()里面,继承layer或者node,create()后就会调用.具体的点击事件,你可以百度,很多 解决方案二: 把你的方法放进init()里面,继承layer或者node,create()后就会调用.具体的点击事件,你可以百度,很多 解决方案三:

实例:Cocos2d-js中使用纹理对象创建Sprite对象

本节我们会通过一个实例介绍纹理对象创建Sprite对象使用,这个实例如图5-2所示,其中地面上的草是放在背景(如下图所示)中的,场景中的两棵树是从后图所示的"树"纹理图片中截取出来的,图5-5所示是树的纹理坐标,注意它的坐标原点在左上角.  创建Sprite对象实例  场景背景图片 "树"纹理图片 "树"纹理图片 下面我们看看app.js 中HelloWorldLayer中初始化代码如下:  var HelloWorldLayer = cc.La

[windows+cocos2dx]CCSprite精灵类

序言 回顾cocos2dx,之前在mac+Xcode平台学习了一遍cocos2dx,一年时间不接触cocos了,一直在搞Unity3d,现在还是就之前所学温故温故,但不再用Xcode来写,用常用的Windows+VS2012做为开发环境来回顾cocos2dx.从CCSprite精灵类开始回顾起. CCSprite多种创建方式 创建CCSprite精灵类有好多中方式,好多构造函数,这里列举集中创建形式,包括要显示某个部分和缓存帧,2D贴图创建和普通创建等. if ( !CCLayer::init(

编写MyLayer,2 锚点,3 精灵的创建,4 zorder

 1 编写MyLayer 头文件:MyLayer.h #include "cocos2d.h" USING_NS_CC;   //代表的是: using namespace cocos2d   (通过F12进行查看)   //继承CCLayer class MyLayer :public CCLayer { public:     //没有构造函数和析构函数     CREATE_FUNC(MyLayer);     /*static MyLayer *create();*/