zoukankan      html  css  js  c++  java
  • cocos2D(四)---- CCSprite

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


    创建精灵

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


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

    [java] view plaincopy
    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 plaincopy
    1. // 大概为半透明  
    2. sprite.opacity = 125;  

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



    2> 给精灵着色

    [java] view plaincopy
    1. // 红色  
    2. sprite.color = ccc3(25500);  



    3> 水平镜像

    [java] view plaincopy
    1. sprite.flipX = YES;  


    4> 垂直镜像

    [java] view plaincopy
    1. sprite.flipY = YES;  


    果flipX和flipY一起使用

    [java] view plaincopy
    1. sprite.flipX = YES;  
    2. sprite.flipY = YES;  


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

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

    [java] view plaincopy
    1. CCSprite *sprite = [CCSprite spriteWithFile:@"lufy.png" rect:CGRectMake(005050)];  

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


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

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

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

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

    [java] view plaincopy
    1. CCSprite *sprite = [CCSprite spriteWithTexture:texture rect:CGRectMake(005050)];  

    纹理的大小

    眼下位置,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 2G3G3GS、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 plaincopy
    1. [[CCDirector sharedDirector] enableRetinaDisplay:YES];  

    CCLabelTTF

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

    [java] view plaincopy
    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 plaincopy
    1. // 红色  
    2. label.color = ccc3(25500);  



    原文地址:http://blog.csdn.net/q199109106q/article/details/8603163
    感谢作者~!
  • 相关阅读:
    JS加载机制
    js原型和原型链(用代码理解代码)
    解决echarts图形由于label过长导致文字显示不全问题
    微信小程序setData()异常
    Add GNOME to a CentOS Minimal Install
    vim的tab缩进及用空格设置
    ORA-12547: TNS:lost contact
    python+Django实现Nagios自动化添加监控项目
    python <tab>自动补全
    电信服务规范
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4353074.html
Copyright © 2011-2022 走看看