SpriteKit项目——小妖精漫步----纹理贴图集(Texture Atlas)

一、为什么要使用纹理贴图?
–应用程序在为精灵图片分配内存空间时,需要分配超过图片尺寸的,并且是最小的2的幂次的尺寸。例如,一张图片的长和宽分别是129px和65px,则分配的内存空间需要是256*128*每个像素占用的内存字节数。可以发现实际的图片信息大约只占用了内存空间的1/4,也就是说将近3/4的内存空间被浪费了。一次每通过图片创建一个精灵,就会发生内存浪费的现象。精灵数量越多,内存的浪费越严重!
•注:要使用纹理贴图集,项目名称及保存目录不能包含中文!
二、SpriteKit项目——小妖精漫步
•竖屏演示
•初始小妖精站在屏幕中间发呆
•点击屏幕的任意位置后:
Ø小妖精旋转至对应方向
Ø按照恒定的速度行走至目标点
 
三、开发步骤:加载贴图集

// 1. 加载贴图集

SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"Goblin_Walk"];

 

// 2. 使用纹理图填充数组

NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:28];

 

for (NSInteger i = 1; i < 29; i++) {

    NSString *name = [NSString stringWithFormat:@"goblin_walk_%04d", i];

    SKTexture *texture = [atlas textureNamed:name];

 

    [arrayM addObject:texture];

}

 

_walkFrames = arrayM;

 

四、小妖精行走Action

创建小妖精图像精灵

SKSpriteNode *goblin = [SKSpriteNode spriteNodeWithTexture:_walkFrames[0]];

goblin.position = CGPointMake(self.size.width / 2, self.size.height / 2);

[self addChild:goblin];

_goblin = goblin;

 

// 4. 小妖精行走

SKAction *walkAction = [SKAction animateWithTextures:_walkFrames timePerFrame:0.1f];

[goblin runAction:[SKAction repeatActionForever:walkAction]];

 

五、根据点击位置旋转方向

// 旋转小妖精

CGPoint location = [[touches anyObject] locationInNode:self];

CGPoint offset = CGPointMake(location.x - _goblin.position.x, location.y - _goblin.position.y);

 

CGFloat angle = atan2f(offset.y, offset.x) - M_PI_2;

 

_goblin.zRotation = angle;

六、行走不骗

七、添加发呆动画,行走至目标点

/ 计算行走距离

CGFloat distance = sqrtf(powf(offset.x, 2.0) + powf(offset.y, 2.0));

CGFloat duration = distance / self.size.height * 8.0;

 

// 删除所有操作

[_goblin removeAllActions];

 

[self goblinRepeatFrame:_walkFrames];

// 定义行走动作

SKAction *moveTo = [SKAction moveTo:to duration:duration];

 

[_goblin runAction:moveTo completion:^{

    [_goblin removeAllActions];

    [self goblinRepeatFrame:_idleFrames];

}];

posted on 2013-12-21 12:02  林源  阅读(1799)  评论(0编辑  收藏  举报

导航