[iOS 10] SpriteKit の Tile Map をつかってミニゲームをつくってみた #2

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回の続きです。
キャラを表示して初期配置の処理まで作ります。

キャラクターを配置する

ペンギン2羽とランデブー時の画像を追加します。

sk_tile_game_02_01

キャラクターを画面に追加します。
追加したらノードの Name に名前をセットしておきます。

sk_tile_game_02_02

キャラクターを初期位置に配置します。ランデブー時の画像は非表示にしておきます。

#import "GameScene.h"

@implementation GameScene {
    SKTileMapNode *_tileMap;
    SKSpriteNode *_emperor;
    SKSpriteNode *_gentoo;
    SKSpriteNode *_rendezvous;
    CGPoint _emperorIndex;
    CGPoint _gentooIndex;
}

- (void)didMoveToView:(SKView *)view {
    _tileMap = (SKTileMapNode *)[self childNodeWithName:@"tileMap"];
    _emperor = (SKSpriteNode *)[self childNodeWithName:@"emperor"];
    _gentoo = (SKSpriteNode *)[self childNodeWithName:@"gentoo"];
    _rendezvous = (SKSpriteNode *)[self childNodeWithName:@"rendezvous"];
    
    // エンペラーペンギンとジェンツーペンギンの座標をセット
    _emperorIndex = CGPointMake(5, 10);
    _gentooIndex = CGPointMake(8, 7);
    _emperor.position = [self convertPlayerPoint:_emperorIndex];
    _gentoo.position = [self convertPlayerPoint:_gentooIndex];
    
    // ランデブー画像の座標セットと非表示
    _rendezvous.position = _gentoo.position;
    _rendezvous.hidden = YES;
}

-(CGPoint)convertPlayerPoint:(CGPoint)tileMapIndex {
    CGPoint playerPoint = [_tileMap centerOfTileAtColumn:tileMapIndex.x
                                                     row:tileMapIndex.y];
    return [_tileMap convertPoint:playerPoint
                           toNode:_emperor.parent];
}

- (void)swipe:(CMSSwipe)swipe {
    // ここにフリック処理
}

@end

SKTileMapNodecenterOfTileAtColumn:row: メソッドでタイルの座標を取得することができます。

今回はここまで。
ではでは。