SpriteKitのメモ。AppleのサンプルにSKLabelNodeを使ったものがあったので参考にして「ラベルを動かす」、「ラベルを拡大」、「ラベルをフェードアウト」という感じでiPhoneアプリを書いてみる。
(※ StoryboardでViewのクラスをSKViewに変更しています)
動作イメージ
XcodeからiOS7 iPhone Simulatorで動かすとこんな感じになります。
サンプルコード
#import “ViewController.h”
#import <SpriteKit/SpriteKit.h>
@interface MyScene : SKScene
@property BOOL contentCreated;
@end
@implementation MyScene
– (void)didMoveToView:(SKView *)view
{
if (!self.contentCreated) {
[self createContents];
self.contentCreated = YES;
}
}
– (void)createContents
{
self.backgroundColor = [SKColor blueColor];
self.scaleMode = SKSceneScaleModeAspectFit;
[self addChild:[self newMoveNode]];
[self addChild:[self newZoomNode]];
[self addChild:[self newFadeNode]];
}
– (SKNode*)newMoveNode
{
SKLabelNode *node = [SKLabelNode labelNodeWithFontNamed:@”Chalkduster”];
node.text = @”Move Node”;
node.fontSize = 20;
node.position = CGPointMake(100, 400);
node.name = @”moveNode”;
return node;
}
– (SKNode*)newZoomNode
{
SKLabelNode *node = [SKLabelNode labelNodeWithFontNamed:@”Chalkduster”];
node.text = @”Zoom Node”;
node.fontSize = 12;
node.position = CGPointMake(200, 300);
node.name = @”zoomNode”;
return node;
}
– (SKNode*)newFadeNode
{
SKLabelNode *node = [SKLabelNode labelNodeWithFontNamed:@”Chalkduster”];
node.text = @”Fade Node”;
node.fontSize = 20;
node.position = CGPointMake(150, 200);
node.name = @”fadeNode”;
return node;
}
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
SKAction *action;
for (SKNode *node in self.children) {
if ([node.name isEqual:@”moveNode”]) {
action = [SKAction moveByX:0 y:100.0 duration:4.0];
} else if ([node.name isEqual:@”zoomNode”]) {
action = [SKAction scaleTo:2.0 duration:4.0];
} else if ([node.name isEqual:@”fadeNode”]) {
action = [SKAction fadeOutWithDuration:4.0];
}
node.name = nil;
SKAction *pause = [SKAction waitForDuration:0.5];
SKAction *remove = [SKAction removeFromParent];
SKAction *moveSequence = [SKAction sequence:@[action, pause, remove]];
[node runAction:moveSequence];
}
}
@end
@interface ViewController ()
@end
@implementation ViewController
– (void)viewDidLoad
{
[super viewDidLoad];
SKView *spriteView = (SKView*)self.view;
spriteView.showsDrawCount = YES;
spriteView.showsNodeCount = YES;
spriteView.showsFPS = YES;
}
– (void)viewWillAppear:(BOOL)animated
{
MyScene *myScene = [[MyScene alloc] initWithSize:CGSizeMake(320, 568)];
SKView *spriteView = (SKView*)self.view;
[spriteView presentScene:myScene];
}
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end