您的位置:首页 > 移动开发 > Cocos引擎

Cocos精灵

2016-03-27 10:32 387 查看

精灵

创建精灵

精灵可以通过图片、纹理、精灵帧来创建,至少挂在layer上(当然可以挂在其他精灵上)。

创建方法: Sprite在Layer中的init()函数中直接创建,建好之后应该addChild这个精灵

class
SpriteCreate : public
Layer
{public:
static
Scene* createScene()//创建自定义scene及自定义Layer(要是静态方法,以便调用)
{ Scene* scene =
Scene::create();
Layer* layer =
T010301SpriteCreate::create();
scene->addChild(layer);
return scene;}
bool init()
{
Layer::init();
// 演示精灵创建的代码
// 通过文件创建
Sprite* sprite =
Sprite::create("Images/blocks.png");
addChild(sprite);
sprite->setPosition(200, 200);//精灵的属性——位置
// 通过纹理创建精灵,纹理是图片在内存中的表现
Texture2D* texture =
Director::getInstance()->getTextureCache()->addImage("Images/b1.png");
Sprite* sprite =
Sprite::createWithTexture(texture);
// 通过精灵帧来创建精灵,理解为一张大图包含了很多精灵资源,那么每个精灵图只占一部分
Texture2D* texture =
Director::getInstance()->getTextureCache()->addImage("Images/blocks.png");
SpriteFrame* frame =
SpriteFrame::createWithTexture(texture,Rect(0, 0, 32, 32)); //Rect表示了该精灵在大图中的位置
Sprite* sprite =
Sprite::createWithSpriteFrame(frame);

精灵属性

锚点
锚点是精灵的位置的对齐点,精灵锚点的默认值是(.5f,.5f),一种百分比表达方式,(1,1)表示右上角,(0,0)表示左下角Vec2类有常量定义了常用的锚点值
Sprite* sprite =
Sprite::create("Images/blocks.png");
sprite->setAnchorPoint(Vec2(0, 0)); //设置锚点位置(0,0)
sprite->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT); //更洋气的设置方法
旋转
以顺时针方向,以锚点为中心,旋转参数指定的角度 :sprite->setRotation(30);
变形旋转:sprite->setRotationX(30); 以及 sprite->setRotationY(30);
这个是最新的变形旋转:sprite->setRotationSkewX(180);
缩放:
按照参数指定的值,缩放比例
sprite->setScale(0.5f); 以及 sprite->setScaleX(2.0f);
颜色:
基本方式:sprite->setColor(Color3B(255, 0, 0));
更洋气的方式:sprite->setColor(Color3B::WHITE);
可见度和透明度:
sprite->setVisible(false);
sprite->setOpacity(128); // 0 ~ 255,255表示不透明,0表示透明
翻转:
沿着X轴旋转:有true和false两种sprite->setFlippedX(true);
名字和标示:
Name和Tag都是用来标识精灵的,如果标识重复,可能会出现异常
sprite->setName("abc");//
必须唯一
sprite->setTag(1);
this->getChildByName("abc");
this->getChildByTag(1);
// 更换精灵显示的图片,这个是实现动画的基础(帧动画)
用:
sprite->setTexture("Images/b1.png");
或者:SpriteFrame* frame =
SpriteFrame::create("Images/b1.png",
Rect(0, 0, 79, 46));
sprite->setSpriteFrame(frame);
大小和位置:
Rectrc = sprite->getBoundingBox();注意BoundingBox是没有set方法的
内容尺寸:
Size sz =sprite->getContentSize();Size只表示大小不表示位置
sprite->setContentSize(Size(32, 32));
sprite->setTextureRect(Rect(0, 0, 32,32));相当于截取
数据:

SetUserData()和SetUserObject()用来记录精灵数据和对象,往往第二个用的比较多

自定义精灵类

class
Hero : public
Sprite //自定义的精灵类
{public:
static
Hero* create()
{Hero* ret =
new Hero;
ret->init();
ret->autorelease();
return ret;}
bool init(){
Sprite::init();//
初始化Hero相关的参数父类的init()
setTexture("Images/elephant1_Diffuse.png");//
Sprite::initWithFile("Images/elephant1_Diffuse.png");//用文件直接创建,也可以用其他的:Sprite::initWithTexture或者Sprite::initWithSpriteFrame
return
true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: