在介绍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. JS的预编译和执行顺序 详析

    原文:JS的预编译和执行顺序 详析 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题   代码:   复制代码 代码一 <ht ...

  2. 树状DP

    紫皮,各种,非原创 树状数组在我的理解就是在决策过程中具有层次关系,像是树一样,具有上下级关系或者上级对上级一定程度的限制条件 uva 12186 工人的请愿书 下属中不小于 T% 的人签字时会签字递 ...

  3. 深入理解extern使用方法

    一. extern做变量声明 l  声明externkeyword的全局变量和函数可以使得它们可以跨文件被訪问. 我们一般把全部的全局变量和全局函数的实现都放在一个*.cpp文件中面,然后用一个同名的 ...

  4. 在JDBC中使用PreparedStatement代替Statement,同时预防SQL注入

    本篇讲诉为何在JDBC操作数据库的过程中,要使用PreparedStatement对象来代替Statement对象. 在前面的JDBC学习中,对于Statement对象,我们已经知道是封装SQL语句并 ...

  5. DRP分销系统总结

    上个月看完的分销系统的视频,用了漫长的时间看这个项目视频,能安慰自己的是不光是看视频了,还做了很多自己想做的事情,比如驾照拿下来了,比如参加了一些考试,比如讲了一些课程等等.把这个系统的总结总算是补上 ...

  6. Android剪切板(ClipboardManager) 复制文本

    Android也有剪切板(ClipboardManager) 注意:导包的时候 API 11之前:  android.text.ClipboardManagerAPI 11之后:  android.c ...

  7. Wireshark入门与进阶---数据包捕获与保存的最基本流程

    Wireshark入门与进阶系列(一) "君子生非异也.善假于物也"---荀子 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原 ...

  8. 介绍SAP预留函数创建搜索帮助

    紧接上一节介绍的SAP预定义的出口函数F4IF_SHLP_EXIT_EXAMPLE创建搜索帮助, 该函数主要有两个部分: Changing接口的参数属性如下: SHLP:搜索帮助的基础描述,包括搜索帮 ...

  9. jdom dom4j解析xml不对dtd doctype进行验证(转)

    一.写在所有之前:因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了.二. ...

  10. map标签的详细使用参数

    map标签必须成对出现,即 <map> ....</map> 同时map必须和area配合使用. img标签里的usermap属性值必须与map标签里的id和name值完全一致 ...