トップ «前の日記(2014-01-12) 最新 次の日記(2014-02-04)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|

2014-01-13 [OSX][iOS]Sprite Kit(その1)

最近の流れはプログラマでもUIを他人任せにしないということだろうか。iOS7のUIやのUIKit Dynamics、そして、今回取り上げるSprite Kitから、そんなメッセージを感じた。

Sprite Kitは、2Dゲーム開発をサポートしてくれるフレームワークで、OS標準のフレームワークに含まれていることからゲーム以外にも利用の用途はあると思う。

主なクラスは、描画領域となるSKViewと、ゲームの1画面に対応するSKScene、画面に置かれる要素となるSKNodeとそのサブクラス、画面遷移のアニメーションを担当するSKTransition、ノードの動作を担当するSKActionだ。

今回は、XcodeのiOSのひな形SpriteKit Gameで生成されるプロジェクトの中身を見て行こうと思う。

SpriteKit Gameのひな形から、Spiritusという名前でプロジェクトを作成(GitHubにサンプルコードを用意したので、そちらを参照してほしい)。

ひな形から生成されたプロジェクトでは、SpriteKit.frameworkがリンクされ、以下のようにSpriteKit.hがインポートされているが、最新の開発環境ではLLVM clangのModulesに対応されているので、以下のインポート分を記述するだけで対応できるが、ひな形は以前の最新の記述を採用していないようだ。

@import SpriteKit;

一個だけ生成されたビューコントローラで、画面全体に配置してSKViewに、デバッグ用の情報表示を設定して、シーンを一個追加している。

@implementation ViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
	
    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;          /* frame rateを表示 */
    skView.showsNodeCount = YES;    /* ノード個数を表示 */
    skView.showsDrawCount = YES;    /* 描画個数を表示 */
    
    // Create and configure the scene.
    SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    
    // Present the scene.
    [skView presentScene:scene];
}
 :
@end

つぎに、ひな形から生成されたシーンMySceneの中身を見てみよう。

シーンが開かれたら、中央に『Hello, World!』と記述されたラベルのノードを追加している。


@implementation MyScene
 
-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
        /* Setup your scene here */
        
        self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];
        
        SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
        
        myLabel.text = @"Hello, World!";
        myLabel.fontSize = 30;
        myLabel.position = CGPointMake(CGRectGetMidX(self.frame),
                                       CGRectGetMidY(self.frame));
        
        [self addChild:myLabel];
    }
    return self;
}
 :
@end

そして、このシーンが表示されている画面がタッチされると、宇宙船の画像が貼られた、回転するアクションを追加したノードを追加している。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */
    
    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInNode:self];
        
        SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
        
        sprite.position = location;
        
        SKAction *action = [SKAction rotateByAngle:M_PI duration:1];
        
        [sprite runAction:[SKAction repeatActionForever:action]];
        
        [self addChild:sprite];
    }
}

次回は、このサンプルポードをカスタマイズしてみたいと思っている。

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/Spiritus - GitHub

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2014-01-12) 最新 次の日記(2014-02-04)» 編集