本例题用到的API函数:
1、setAnchorPoint(ccp(0.5,0.5)) 设置锚点的位置
2、setScale(2.0f) 改变图片(sprite)的大小
3、setPosition(ccp(0,0)); 图片放置的位置
4、schedule(fun(),time);设置定时器 参数1(回调函数)参数2 (多长时间触发一次)
5、ccDrawColor4B(225,0,0,255); 绘图函数参数是R、G、B、透明度
6、ccDrawLine(ccp(0,0)); 绘制线
7、setRotation(); 设置旋转角度
8、ignoreAnchorPointForPosition() 忽略锚点 参数 true 、false
9、getPositionX(),getPositionY() 获取坐标点
10、CCRectMake() 取一个矩形,参数 0,0,420,380 含义:从图片的0,0点开始取,取420*380大小
11、autorelease()内存托管
12、CCSprite::createWithTexture() 根据纹理创建精灵,无create方法,需要自己new 参数 CCTexture2D *texture
函数原型: static CCSprite* createWithTexture(CCTexture2D *pTexture);
CCTexture2D *texture = new CCTexture2D();
13、texture->initWithImage(); 初始化图片 无create()方法 需要自己new 参数 图片名称
函数原型: bool CCTexture2D::initWithImage(CCImage *uiImage)
CCImage *image = new CCImage();
14、initWithImageFile() 初始化图片文件
参数 图片文件路径及图片名称
函数原型:bool CCImage::initWithImageFile(const char * strPath, EImageFormat eImgFmt/* = eFmtPng*/)
initWithImageFile("sprite/1.png");
12-14函数用法:
CCImage *image = new CCImage(); //new一个图片
image->initWithImageFile("sprite/1.png");//获取图片内容
CCTexture2D *texture = new CCTexture2D();//new一个纹理
texture->autorelease();//内存托管
texture->initWithImage(image);//对图片进行初始化
CCSprite *picture =createWithTexture(texture);//创建纹理
15、setZorder 设置覆盖顺序。参数int型整数,值越大,离着自己越近,覆盖值小的图。
函数原型:void CCNode::setZOrder(int z)
锚点的基本概念:
1、锚点的坐标位置是根据精灵确定的。图片的左下角为(0,0)坐标,逆时针旋转一次为(0,0,)(1,0)(1,1)(0,1)
2、锚点默认的点是(0.5,0.5)
一、锚点的影响:
1、锚点影响了位置
①锚点影响了在layer里放置的位置。如果锚点设置为(0.5,0.5)的时候,位置如下:
如果锚点设置为(0,0)点的话,图片放置如下:
当锚点设置为(0,1)时候,依次类推。
锚点的设置是根据精灵本身的坐标改变的。
2、影响了缩放
设置缩放,图片是根据锚点进行缩放,当改变图片(sprite)的大小时,是根据锚点为中心点进行缩放的。
改变图片大小的函数setScale(),如果把图片放大两倍
如图:
3、影响了旋转
图片旋转,是根据锚点的位置进行旋转的。
代码如下:
1、LayerAnchorPoint.h文件
-
#ifndef __LayerAnchorPoint__
-
#define __LayerAnchorPoint__
-
-
#include "cocos2d.h"
-
USING_NS_CC;
-
class LayerAnchorPoint:public CCLayer
-
{
-
public:
-
CREATE_FUN(T011LayerAnchorPoint);
-
bool init();
-
static CCScene *scene();
-
void draw();
-
void myschedule(float dt);
-
CCSprite *spr;
-
-
}
-
-
#endif
2、T01LayerAnchorPoint.cpp文件
-
#include "LayerAnchorPoint.h"
-
-
CCScene *LayerAnchorPoint::scene()
-
{
-
CCScene *scene = CCScene::create();
-
LayerAnchorPoint *layer =LayerAnchorPoint::create();
-
scene->addChild(layer);
-
return scene;
-
}
-
-
bool LayerAnchorPoint::init()
-
{
-
CCLayer::init();
-
CCSize winSize = CCDirector::shareDirector()->getWinSize();
-
spr->CCSprite::create("1.png");
-
spr->setPosition(ccp(winSize.width/2,winSize.height/2));
-
-
//设置锚点的位置
-
spr->setAnchorPoint(ccp(0,1));
-
//改变sprite的大小
-
spr->setScale(2.0f);
-
addChild(spr);
-
-
//设置定时器
-
schedule(schedule_selector(T01LayerAnchorPoint::mySchedule),2)
-
return true;
-
}
-
void LayerAnchorPoint::draw()
-
{
-
ccDrawColor4B(255, 0, 0, 255);//绘图RGB,透明度
-
ccDrawLine(ccp(0,winSize.height/2),ccp(winSize.width,winSize.height/2));
-
ccDrawLine(ccp(winSize.width / 2, 0), ccp(winSize.width / 2, winSize.height));
-
}
-
-
-
void LayerAnchorPoint::mySchedule(float dt)
-
{
-
static float ro = 0;
-
ro += 30;
-
spr->setRotation(ro);//设置旋转角度
-
}
二、忽略锚点
忽略锚点是把sprite的坐标置为(0,0)点
当sprite不忽略锚点的时候默认是挂在(0.5,0.5);
不忽略锚点:见图3.1
忽略锚点见图3.4
大部分节点是不忽略锚点的,layer是忽略锚点的
精灵基本概念:
CCSprite
创建精灵的五种方法
//1、CCRectMake画矩形
-
CCSprite *bg = CCSprite::create("sprite/1.jpg",CCRectMake(0,0,480,320));
-
bg->setAnchorPoint(ccp(0, 0));
-
bg->setPosition(CCPointZero);
-
addChild(bg);
//2、createWithTexture
-
CCImage *image = new CCImage();
-
image->initWithImageFile("sprite/2.png");
-
-
CCTexture2D *texture = new CCTexture2D();
-
texture->autorelease();
-
texture->initWithImage(image);
-
CCSprite * plant = CCSprite::createWithTexture(texture);//texture纹理
-
plant->setPosition(ccp(100, winSize.height / 2));
-
addChild(plant);
//3、CCTextureCache
-
CCTexture2D * texture2 = CCTextureCache::sharedTextureCache()->addImage("sprite/3.png");//加入缓存
-
-
CCSprite *bullet = CCSprite::createWithTexture(texture2);
-
-
bullet->setPosition(ccp(200, winSize.height / 2 +11));
-
addChild(bullet);
//4、CCSpriteFrameCache
-
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite/4.plist");
-
-
//CCSpriteFrame *sf = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("4-1.png");
-
//CCSprite *zombie = CCSprite::createWithSpriteFrame(sf);
-
CCSprite *zombie = CCSprite::createWithSpriteFrameName("4-1.png");
-
-
zombie->setPosition(ccp(400, winSize.height / 2));
-
addChild(zombie);
//5、CCSpriteFrame
-
CCSpriteFrame *frame = CCSpriteFrame::create("sprite/5.png",CCRectMake(0,0,80,80));
-
CCSprite *sun = CCSprite::createWithSpriteFrame(frame);
-
-
sun->setPosition(ccp(400, winSize.height / 2 + 50));
-
addChild(sun);
-
return true;
阅读(2473) | 评论(0) | 转发(0) |