首次使用SpriteKit制作动画。动画一组熊步行图像 - 非常基本。然而,虽然应用程序在32位模式模拟器中运行良好,但在64位模拟器中运行时会出现乱码。
这是ViewController -
// CPViewController.h
@interface CPViewController : UIViewController
@end
// CPViewController.m
@implementation CPViewController
- (void)viewDidLoad
{
[super viewDidLoad];
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
SKScene * scene = [CPMyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:scene];
}
@end
// CPMyScene.h
@interface CPMyScene : SKScene
@end
// CPMyScene.m
@implementation CPMyScene {
SKSpriteNode *_bear;
NSArray *_bearWalkingFrames;
}
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
self.backgroundColor = [SKColor blackColor];
NSMutableArray *bearWalkingFrames = [NSMutableArray array];
SKTextureAtlas *bearAtlas = [SKTextureAtlas atlasNamed:@"BearImages"];
NSUInteger frameCount = bearAtlas.textureNames.count;
for (int i=1 ; i<=frameCount ; i++) {
NSString *frameImageName = [NSString stringWithFormat:@"bear%d",i];
SKTexture *frameImage = [bearAtlas textureNamed:frameImageName];
[bearWalkingFrames addObject:frameImage];
}
_bearWalkingFrames = bearWalkingFrames;
SKTexture *firstFrame = _bearWalkingFrames[0];
_bear = [SKSpriteNode spriteNodeWithTexture:firstFrame];
_bear.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:_bear];
[self startWalkingTheBear];
}
return self;
}
-(void) startWalkingTheBear {
[_bear runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:_bearWalkingFrames timePerFrame:0.1f resize:NO restore:YES]] withKey:@"WalkingBear"];
}
@end
图像为233 x 145像素。
以下是32位模式下的模拟器中的视频 -
这是64位模式下的模拟器中的视频(不工作 - 图像边界错误或其他) -
参考文献:
http://www.raywenderlich.com/45152/sprite-kit-tutorial-animations-and-texture-atlases - 代码主要是来自这里,除了为iPhone和iPad而不是iPad定制。
答案 0 :(得分:0)
解决了它。我不得不将@ 2x图像添加到图像atlas文件夹中。 @ 2x图像的大小不是非2x图像的两倍,而只是非@ 2x图像的副本,只是用@ 2x重命名。这真的很有趣。