Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178821
  • 博文数量: 18
  • 博客积分: 334
  • 博客等级: 入伍新兵
  • 技术积分: 233
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-20 14:45
文章分类

全部博文(18)

文章存档

2015年(5)

2013年(7)

2012年(6)

我的朋友

分类: C/C++

2015-12-28 17:20:45

本例题用到的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文件

点击(此处)折叠或打开

  1. #ifndef __LayerAnchorPoint__
  2. #define __LayerAnchorPoint__

  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5. class LayerAnchorPoint:public CCLayer
  6. {
  7.     public:
  8.         CREATE_FUN(T011LayerAnchorPoint);
  9.         bool init();
  10.         static CCScene *scene();
  11.         void draw();
  12.         void myschedule(float dt);
  13.         CCSprite *spr;

  14. }

  15. #endif


2、T01LayerAnchorPoint.cpp文件


点击(此处)折叠或打开

  1. #include "LayerAnchorPoint.h"

  2. CCScene *LayerAnchorPoint::scene()
  3. {
  4.     CCScene *scene = CCScene::create();
  5.     LayerAnchorPoint *layer =LayerAnchorPoint::create();
  6.     scene->addChild(layer);
  7.     return scene;
  8. }

  9. bool LayerAnchorPoint::init()
  10. {
  11.       CCLayer::init();
  12.       CCSize winSize = CCDirector::shareDirector()->getWinSize();
  13.       spr->CCSprite::create("1.png");
  14.       spr->setPosition(ccp(winSize.width/2,winSize.height/2));

  15.       //设置锚点的位置
  16.       spr->setAnchorPoint(ccp(0,1));
  17.       //改变sprite的大小
  18.       spr->setScale(2.0f);
  19.       addChild(spr);

  20.        //设置定时器
  21.        schedule(schedule_selector(T01LayerAnchorPoint::mySchedule),2)
  22.       return true;
  23. }
  24. void LayerAnchorPoint::draw()
  25. {
  26.     ccDrawColor4B(255, 0, 0, 255);//绘图RGB,透明度
  27.     ccDrawLine(ccp(0,winSize.height/2),ccp(winSize.width,winSize.height/2));
  28.     ccDrawLine(ccp(winSize.width / 2, 0), ccp(winSize.width / 2, winSize.height));
  29. }


  30. void LayerAnchorPoint::mySchedule(float dt)
  31. {
  32.     static float ro = 0;
  33.     ro += 30;
  34.     spr->setRotation(ro);//设置旋转角度
  35. }



二、忽略锚点

忽略锚点是把sprite的坐标置为(0,0)点
当sprite不忽略锚点的时候默认是挂在(0.5,0.5);
不忽略锚点:见图3.1
忽略锚点见图3.4


大部分节点是不忽略锚点的,layer是忽略锚点的



精灵基本概念:

CCSprite

创建精灵的五种方法

//1、CCRectMake画矩形

点击(此处)折叠或打开

  1. CCSprite *bg = CCSprite::create("sprite/1.jpg",CCRectMake(0,0,480,320));
  2.     bg->setAnchorPoint(ccp(0, 0));
  3.     bg->setPosition(CCPointZero);
  4.     addChild(bg);



    //2、createWithTexture

点击(此处)折叠或打开

  1. CCImage *image = new CCImage();
  2.     image->initWithImageFile("sprite/2.png");

  3.     CCTexture2D *texture = new CCTexture2D();
  4.     texture->autorelease();
  5.     texture->initWithImage(image);
  6.     CCSprite * plant = CCSprite::createWithTexture(texture);//texture纹理
  7.     plant->setPosition(ccp(100, winSize.height / 2));
  8.     addChild(plant);



    //3、CCTextureCache

点击(此处)折叠或打开

  1. CCTexture2D * texture2 = CCTextureCache::sharedTextureCache()->addImage("sprite/3.png");//加入缓存

  2.     CCSprite *bullet = CCSprite::createWithTexture(texture2);

  3.     bullet->setPosition(ccp(200, winSize.height / 2 +11));
  4.     addChild(bullet);



    //4、CCSpriteFrameCache

点击(此处)折叠或打开

  1. CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite/4.plist");

  2.     //CCSpriteFrame *sf = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("4-1.png");
  3.     //CCSprite *zombie = CCSprite::createWithSpriteFrame(sf);
  4.     CCSprite *zombie = CCSprite::createWithSpriteFrameName("4-1.png");

  5.     zombie->setPosition(ccp(400, winSize.height / 2));
  6.     addChild(zombie);



    //5、CCSpriteFrame 

点击(此处)折叠或打开

  1. CCSpriteFrame *frame = CCSpriteFrame::create("sprite/5.png",CCRectMake(0,0,80,80));
  2.     CCSprite *sun = CCSprite::createWithSpriteFrame(frame);

  3.     sun->setPosition(ccp(400, winSize.height / 2 + 50));
  4.     addChild(sun);
  5.     return true;




阅读(2409) | 评论(0) | 转发(0) |
0

上一篇:C语言内存图的理解

下一篇:没有了

给主人留下些什么吧!~~