在介绍CCSprite之前,先要理解游戏开发中的一个核心概念:精灵。精灵也称为游戏对象,它能够用来表示游戏中的不论什么物体,比方敌人、子弹、甚至是一个背景图片、一段文字。CCSprite能够说是在cocos2d中最经常使用的一个类,能够称之为"精灵类",它能够以图片的形式将精灵显示到屏幕上。

创建精灵

在谈怎么创建一个精灵之前,先了解下游戏开发中还有一个核心概念:纹理。纹理事实上就是用来描写叙述物体表面细节的图形,也称为纹理贴图,把纹理依照特定的方式映射到物体表面上的时候能使物体看上去更加真实。我们将纹理映射到屏幕上就可以显示相应的图形。

1.创建精灵最简单的方式就是给精灵指定一张图片文件,cocos2d会利用这张图片生成纹理对象(CCTexture2D)并载入到纹理缓存库中(CCTextureCache),终于由精灵来控制纹理显示在屏幕中的位置。

[java] view
plain
copy

  1. // 加入精灵到图层中
  2. - (id)init {
  3. if (self = [super init]) {
  4. CCSprite *sprite = [CCSprite spriteWithFile:@"lufy.png"];
  5. CGSize winSize = [CCDirector sharedDirector].winSize;
  6. sprite.position = ccp(winSize.width * 0.5f , winSize.height * 0.5f);
  7. [self addChild:sprite];
  8. }
  9. return self;
  10. }

为了保证可以正常读取图片资源,要把你的图片文件放在Resource目录中

执行效果:

其它经常使用设置

1> 设置精灵的不透明度

[java] view
plain
copy

  1. // 大概为半透明
  2. sprite.opacity = 125;

opacity的取值范围是0-255,0代表全然透明,255代表全然不透明

2> 给精灵着色

[java] view
plain
copy

  1. // 红色
  2. sprite.color = ccc3(255, 0, 0);

3> 水平镜像

[java] view
plain
copy

  1. sprite.flipX = YES;

4> 垂直镜像

[java] view
plain
copy

  1. sprite.flipY = YES;

如果flipX和flipY一起使用

[java] view
plain
copy

  1. sprite.flipX = YES;
  2. sprite.flipY = YES;

2.能够指定一个范围仅仅载入图片的某个矩形区域

这张图片的原大小是100x100的

[java] view
plain
copy

  1. CCSprite *sprite = [CCSprite spriteWithFile:@"lufy.png" rect:CGRectMake(0, 0, 50, 50)];

仅仅载入了图片左上角50x50的区域

3.能够直接传入一个纹理对象(CCTexture2D)

[java] view
plain
copy

  1. // 创建纹理对象
  2. CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"lufy.png"];
  3. // 传入纹理对象,生成精灵
  4. CCSprite *sprite = [CCSprite spriteWithTexture:texture];

CCTextureCache是专门用来缓存CCTexture2D对象的,它内部有个NSMutableDictionary *textures_字典,key是图片名称,vale是CCTexture2D对象。当调用它的addImage:方法加入图片时,会先依据图片名查找字典中是否存在相应的CCTexture2D对象,假设有就直接返回;假设没有,就会依据图片名称去载入CCTexture2D对象,载入完成后将CCTexture2D对象放入字典中。

或者指定一个范围仅仅载入图片的某个矩形区域

[java] view
plain
copy

  1. CCSprite *sprite = [CCSprite spriteWithTexture:texture rect:CGRectMake(0, 0, 50, 50)];

纹理的大小

眼下位置,iOS设备仅仅支持尺寸为"2的n次幂"的纹理,因此每张纹理的宽和高都仅仅可能为:2、4、8、16、32、64、128、256、512、1024和2048像素。也就是说纹理的宽高仅仅能是上述数值的组合,比方2x4,32x32,512x64等。

我们在制作纹理图片的时候,最好图片的尺寸都符合上述要求,不然坏处多多。

比方,有一张260x260像素的32位色图,它本应该在内存中大概占270KB(260 x 260 x 32 / 8 = 270400B),但受纹理尺寸的限制,纹理的尺寸必须是2的n次幂,系统会自己主动生成一张最接近原图尺寸的(但不能偏小,要能包括原图像)、宽高都为2的n次幂的纹理,于是系统将生成一张512x512像素的纹理,所以终于会占用1MB的内存(512 x 512 x 32 / 8 = 1048576B),实际占用的内存居然是所需内存的4倍。解决的方法就是将这张260x260像素的图像改为256x256像素,系统也将生成256x256像素的纹理。

HD和SD图像

iOS的像素分别率随设备的硬件而变化,iPhone第一次引入了高分辨率的视网膜屏幕(Retina显示屏幕),像素分辨率为960x640,刚好是前一代iPod和iPhone像素分辨率(480x320)的两倍。通常会将Retina显示屏幕使用的图像称为高分辨率(HD)图像,非Retina显示屏幕使用的图像称为标准分辨率(SD)图像。

以下来看看各代iOS设备的规格參数

设备 最大纹理尺寸 像素分辨率 坐标系
iPhone 2G\3G\3GS、iPod Touch
1024x1024
480x320 480x320
iPhone4、iPhone4s 2048x2048
960x640 480x320
iPad、iPad2 2048x2048 1024x768 1024x768

尽管这些设备的像素分辨率不同,但幸运的是,cocos2d的坐标系统跟UIKit一样与像素无关,它使用的是点坐标系,而不是像素坐标系,即以点为单位,不是以像素为单位。在Retina显示屏幕的设备上,1点是2像素;在非Retina显示屏幕的设备上,1点就是1像素。因此通过点来表示位置,坐标在两种设备上是同样的。

假设游戏执行在具有Retina显示屏幕的设备上,cocos2d会先尝试载入带有-hd后缀的图片。比方你在具有Retina显示屏幕的设备上载入ball.png,它会首先尝试载入ball-hd.png,假设该文件不存在或者非Retina显示屏幕,将载入标准分辨率(SD)图片ball.png。因此为了更好地支持Retina显示屏,通常会使用HD分辨率创建全部图片,然后把宽高都缩小50%,另存为SD分辨率图片。

只是,要想cocos2d会自己主动载入HD图片,还须要开启对Retina显示屏幕的支持

[java] view
plain
copy

  1. [[CCDirector sharedDirector] enableRetinaDisplay:YES];

CCLabelTTF

CCLabelTTF继承自CCSprite,能够用来显示文本

[java] view
plain
copy

  1. CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"Courier New" fontSize:20];
  2. label.position = ccp(winSize.width * 0.5f , winSize.height * 0.5f);
  3. [self addChild:label];

能够通过color属性设置文字颜色

[java] view
plain
copy

  1. // 红色
  2. label.color = ccc3(255, 0, 0);


原文地址:http://blog.csdn.net/q199109106q/article/details/8603163
感谢作者~!

cocos2D(四)---- CCSprite的更多相关文章

  1. [cocos2d]关于CCSprite的若干问题与误区

    文章 [cocos2d] 利用texture atlases生成动画 中介绍了如何生成动画并绑定在CCSprite实例上. 使用该代码遇到了几个问题,值得mark下 问题1.多实例 问题描述: 新建一 ...

  2. cocos2D(三)---- 第一cocos2d的程序代码分析

    在第一讲中已经新建了第一个cocos2d程序,执行效果例如以下: 在这讲中我们来分析下里面的代码,了解cocos2d的工作原理,看看屏幕上的这个"Hello World"是怎样显示 ...

  3. 三、第一个cocos2d程序的代码分析

    http://blog.csdn.net/q199109106q/article/details/8591706 在第一讲中已经新建了第一个cocos2d程序,运行效果如下: 在这讲中我们来分析下里面 ...

  4. 基于cocos2d开发的android小游戏——採花仙

    /*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...

  5. cocos2d-android学习四 ---- 精灵的创建

    上篇文章我们创建了一个黑乎乎的界面.以下我们就给它增加一个精灵. 我们这次就一起来学习精灵的基础知识. 1.什么是精灵 游戏中全部会动的对象都是精灵,能够是主人公,背景元素,一个子弹或者是敌人. 一个 ...

  6. 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人

    8月9日,晴. "江城如画里,山晓望晴空. 雨水夹明镜.双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机载入子弹和音效及背景音乐,本篇主要加入敌机. 本篇要用到的几个函数解 ...

  7. Cocos2d-android (03) 向量

    向量的基本运算及动作 import org.cocos2d.actions.interval.CCJumpBy; import org.cocos2d.actions.interval.CCMoveB ...

  8. cocos2d_android 瞬间动作

    该文章所写的瞬间动作主要有CCFlipX,CCFlipY,CCHide,CCShow 当中CCFlipX是以Y轴为中心旋转,CCFlipY是以X轴为中心旋转,CCHide将精灵对象隐藏,CCShow将 ...

  9. Cocos2d-android (05) 渐变动画(颜色,淡入淡出。。。)

    淡入淡出.颜色渐变及动作重复执行 import org.cocos2d.actions.base.CCRepeatForever; import org.cocos2d.actions.interva ...

  10. Cocos2d-android (04) 执行多个动作

    先后.同时执行多个动作及动作序列执行结束后的事件 import org.cocos2d.actions.instant.CCCallFunc; import org.cocos2d.actions.i ...

随机推荐

  1. Git本地分支版本号过低导致的push错误 error: failed to push some refs to ... 及兴许amend

    今天在用git的时候遇到了一个问题.在想远程分支push的时候,出现了以下的错误: ! [remote rejected] master -> refs/for/master (change 1 ...

  2. fileziller 恢复 站点管理器 内的ftp帐号方法

    由于系统坏了重装了系统,以前的fileziller中配置的服务器链接信息列表很多,新装fileziller后即使复制以前的安装目录过来,站点管理器内还是空荡荡的. 这些服务器链接的配置信息非常重要,如 ...

  3. android第一天-------环境搭建

    今天正式第一天学习android的. 1.昨晚下班后回家跟同事刘江龙打了四把dota.还好,都赢了把对面虐成狗了.大多都是1300到1450的局,玩的很爽. 2.dota打完后给在湖南常德的女朋友打了 ...

  4. Endnote从头开始五:修改output style(转载)

    Endnote从头开始五:修改output style Endnote中虽然有大量的期刊格式,但是并不能囊括所有我们需要的style,所以学会自己制作或编辑已有的期刊格式是很重要的,本节内容是Endn ...

  5. 火炬之光模型导出(Unity载入火炬之光的模型)

    先说明几点.导出方案可行,測试通过. python和blender的版本号一定要用下文中所说的.新的Python或者是新的Blender版本号都无法完美导入. 导入导出脚本能够选择 (http://c ...

  6. Android 事件处理

    目的:通过全面的分析Android的鼠标和键盘事件.了解Android中如何接收和处理键盘和鼠标事件,以及如何用代码来产生事件. 主要学习内容: 1. 接收并处理鼠标事件:按下.弹起.移动.双击.长按 ...

  7. c# in depth之泛型的类型约束详细

    类型约束 1.引用类型约束 这种约束(表示成T:class,必须是为类型参数指定的第一个约束)用于确保使用的类型实参是引用类型,这可能是任何类,接口,数组,委托或者已知是引用类型的另一个类型参数. 例 ...

  8. 基于visual Studio2013解决面试题之0307最后谁剩下

     题目

  9. Boost Thread学习笔记五

    多线程编程中还有一个重要的概念:Thread Local Store(TLS,线程局部存储),在boost中,TLS也被称作TSS,Thread Specific Storage.boost::thr ...

  10. Android菜鸟的成长笔记(5)——Android系统源代码你下载了吗?

    原文:Android菜鸟的成长笔记(5)--Android系统源代码你下载了吗? 在上一篇中我们用Android系统源代码分析了我们前面写的代码,有的朋友可能就会问怎么才能下载到Google官方的源代 ...