ios cocos2D Sprites

一、定义:什么是Sprites

Sprites是一个能动画或者转变的2D图像,通过改变他的属性诸如rotation,position,scale,color。

二、创建Sprites

创建Sprites要依据你需要什么的完成方式。你可以通过不同的图像格式创建,例如PNG,JPEG,TIFF等。

1、指定使用的图片

auto mySprite = Sprite::create("mysprite.png");

var mySprite = new cc.Sprite(res.mySprite_png);

这样创建的结果就是使用了全部的图片。sprite同图片的尺寸一样。如果图片大小事200*200那么Sprite就是200*200;

2、创建一个具体大小的Sprite

之前的例子中,创建的Sprite与图像的尺寸一样,如果要创建一个确定指定的图像和指定的大小,如下;

var mySprite = new cc.Sprite(res.mySprite_png,cc.rect(0,0,40,40));



矩形从左上角开始,作为左边原点。而世界的坐标是在左下角。

三、creating a Sprite from a Sprite Sheet

Sprite Sheet将一系列的Sprites组合到一个文件中。通过Sprite sheet可以更好的利用绘制方法配料渲染。他们也可以在减少磁盘和内存的情况下更搞笑的将sprites打包到sheet中。

第一次使用sprite sheet加载,他将全部进入到SpriteFrameCache中。SpriteFrameCache是一个将SpriteFrame对象添加到里面的类,他能快速的取得SpriteFrame.SpriteFrame只载入一次,然后又保持在SpriteFrameCache中。

下面就是一个sprite sheet;


下面详细的观看发生的变化:


如你看到的sprite sheet,他最小化了他们减少了不需要的空间,将所有的sprites绑到一个文件。


1、Loading a Sprite Sheet

将sprite sheet载入到SpriteFrameCache中,或许是AppDelegate:

auto spritecache = SpriteFrameCache::getInstance;

spritecache->addSpriteFramesWithFile("sprites.plist");

Javascript

var spritecache = cc.SpriteFrameCache;

//。plist文件需要通关相关的软件产生

spritecache.addSpriteFramesWithFile(res.sprites_plist);

此时就可以利用SpriteFrameCache创建Sprite对象了。

2、Creating a Sprite from SpriteFrameCache

通过SpriteFrameCache创建Sprite

//在.plist文件中有每个sprite的名称,通过抓取名称,创建

var mysprite = cc.Sprite.createWithSpriteFrameName(res.mySprite_png);

3、Creating a Sprite frome a SpriteFrame

先得到spriteFrame ,然后利用SpriteFrame创建Sprite。

var newspriteFrame = cc.SpriteFrameCache.getSpriteFrameByName(res.sprites_plist);

var newSprite = cc.Sprite.createWithSpriteFrame(newspriteFrame);

3、Tools for creating Sprite Sheets

下面是一些创建sprite sheet 的工具

Cocos Sdudio

ShoeBox

Texture Packer

Zwoptex

四、Sprite Manipulation(操纵)

创建了sprite后,你就能操纵他的很多属性

var mysprite = new Sprite(res.mysprite_png);

1、Anchor point and Position

Anchor Point :是一个设置的坐标点,当设置位置时,指定sprite使用哪部分。只针对转换属性。包含了scale ,rotation ,skew。不包括color和opacity。anchor point使用的坐标系基准点是左下角。默认情况下,所有节点的默认锚点是(0.5,0.5)

设置默哀点比较简单

mySprite.setAnchorPoint(cc._p(0.5,0.5));

//bottom left 

mySprite.setAnchorPoint(cc._p(0,0));

//top left

mySprite.setAnchorPoint(cc._p(0,1));

//bottom right

mySprite.setAnchorPoint(cc._p(1,0));

//top right

mySprite.setAnchorPoint(cc.p(1,1));

实际上可以虚拟一个正方形,四个点的坐标分别为

(0,0),(0,1)-->对应左下、左上

(1,0)(1,1)-->右下,右上

图像在这个正方形田字格内分别移动,靠近设置点。

2、Sprite properties effected by anchor point

使用锚点来影响scale rotation skew 在转换中的值。

 2.1Position

锚点是作为设置位置的起始点。通过颜色的线条和sprite的位置关联。你能注意到当我们改变锚点值的时候,sprite的位置也发生了改变。

按照我的理解,锚点是为了固定在某点然后旋转和其他动画使用的。

2.2Rotation

通过设置rotation的征服度数来改变sprite的角度。证书的顺时针,负数时逆时针

mySprite.setRotation(cc._p(20.0));

mySprite.setRotation(cc._p(-20.0));

mySprite.setRotation(cc._p(60.0));

mySprite.setRoation(cc._p(-60.0));


2.3Scale

利用scale属性,可以单独改变x或者y方向的放大或者同时放大,默认是同时放大一倍。

mySprite.setScale(cc._p(2.0));

mySprite.setScaleX(cc._p(2.0));

mySprite.setScaleY(cc._p(2.0));


2.4Skew

利用Skew属性,可以改变x\y或者同时改变sprite的倾斜度

mySprite.setSkewX(cc._p(20.0));

mySprite.setSkewY(cc._p(20.0));

3、Sprite properties not affected by anchor point

没有收到影响的属性,color  Opacity

改变color,是通过Color3B这个对象,他是RGB值。

使用Color3B定义颜色

mySprite.setColor(cc.color.WHITE);

mySprite.setColor(cc.color(255,255,255));

Opacity

透明度,取值范围是0--255,默认情况下是255,0代表了不可见。

mySprite.setOpacity(30);

五、Polygon Sprite多边形

2Dimage ;多边形的sprite是由多个三角形组成,一般的sprite由两个三角形组成。

1、Why use a Pllygon Sprite?

这里有很多专业的技术术语来描绘像素填充率,但是主要的是多边形依据你的Sprite的多边形绘制。不是简单的使用宽和高围绕的正方形。这节省了很多不必须要的绘制。考虑下述情况:


注意左边和右边的区别。

左边,一个典型的Sprite绘制在一个由两个三角形组成的长方形中。

右边,由许多小的三角形绘制一个多边形。

纯粹的权衡他的性能原因,依据各种因素(如形状、细节、尺寸,华仔屏幕上的数量等细节),但总的来说,现在CPU的顶点像素更高效。

1、AutoPolygon

AutoPolygon是一个辅助类。他的目的是在运行状态下将图像处理为2D多边形网格。

从轨迹中所有的点,到三角网络,在处理过程中的每个步骤都有功能。结果,可以通过Sprite对象创建功能创建一个PolygonSprite,例如

//自动产生多边形

auto pinfo = cc.autopolygon.generatePolygon(res.mysprite_png);

//create a sprite with polygon info

var sprite = new cc.Sprite(pinfo);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • http://www.cocos2d-x.org/docs/programmers-guide/actions/i...
    supory阅读 343评论 0 1
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,837评论 0 6
  • 使用首先需要了解他的工作原理 1.POI结构与常用类 (1)创建Workbook和Sheet (2)创建单元格 (...
    长城ol阅读 8,427评论 2 25
  • 初识chipmunk物理引擎 chipmunk本是一个独立的开源项目,用纯c编写.cocos2d同时整合了chip...
    babybus_break阅读 1,645评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,144评论 25 707