SpriteKitで地面を無限スクロールする

開発するiPhoneゲームアプリでは 耳で空を飛べる特殊能力を持つキャラクターの うさ犬 を何処まで遠く飛ばせるかを競うものにしたいと考えました。 ゲーム画面としてはうさ犬を中央に配置して 地面の側をスクロールして飛んでいるように見せる ゲームとしては定番の処理を施す目論見です。

地面の無限スクロール

然うとなると地面は無限にスクロールしなければなりません。 但し無限の横幅を持つ地面の画像を用意するのは不可能です。 其処で此れ又ゲームとしては定番の処理として 一定幅の地面の画像が右からスクロールして左に消えると同時にタイミング良く同じ画像インスタンスを生成し 繰り返しスクロールさせて恰も無限に地面が続くように見せる手法を用います。

スポンサーリンク
日付:2014年3月31日
開発機:MacBook Air(11-inch, Mid 2013)
MacOSバージョン:OS X 10.9.2
Xcodeバージョン:5.1
言語:Objective-C
主関連アプリ:うさ犬が行く

さてアップル社純正の2Dゲーム専用フレームワーク SpriteKit と雖も標準で其の如き処理を実行してくれるメソッドなどは用意されていませんから 地面を無限スクロールする処理を実装する必要があります。

ネットを繰ってみればサイト @kitano_ow 's blog の2014年3月26日の記事が御誂え向きの情報として見付かりましたので以下に引用するコードを試してみました。

【Xcode5】Xcodeの使い方 SpriteKit 編 Vol15 〜 地面や背景の無限ループ 〜
SKSpriteNode *ground = [SKSpriteNode spriteNodeWithImageNamed:@"ground"];
ground.position = CGPointMake(self.size.width, ground.size.height/2);
[ground runAction:[SKAction repeatActionForever:
    [SKAction sequence:@[
      [SKAction moveToX:0.0 duration:1.0],
      [SKAction moveToX:self.size.width duration:0.0]
      ]
    ]
  ]
];
[self addChild:ground];

しかし上記コードを参照したコードでは手元では残念ながら塩梅良くは動いてくれませんでした。 恐らくはiPhoneアプリの横幅として標準の640pxの倍、 即ち1280pxの画像を用意すればいいのだろうと当たりを付け、 更には此れを二分割して順繰りに繰り出してやれば良いのではないかと考えました。 詰まりは連続的に表示可能な地面の横幅640pxの画像を一つ用意して -(id)initWithSize:(CGSize)size 関数内に於いてスプライトノードを二つ生成して順繰りに繰り出してやろうと云う算段です。 実装コードとしては以下の如くなります。

/* 背景の地面の無限スクロール */
SKSpriteNode *ground1 = [SKSpriteNode spriteNodeWithImageNamed:@"ground"];
ground1.position = CGPointMake(0.0, ground1.size.height/2);
[ground1 runAction:[SKAction repeatActionForever:
  [SKAction sequence:@[
    [SKAction moveToX:-self.size.width/2 duration:3.0],
    [SKAction moveToX:0.0 duration:0.0]
  ]]]
];
SKSpriteNode *ground2 = [SKSpriteNode spriteNodeWithImageNamed:@"ground"];
ground2.position = CGPointMake(self.size.width, ground2.size.height/2);
[ground2 runAction:[SKAction repeatActionForever:
  [SKAction sequence:@[
    [SKAction moveToX:self.size.width/2 duration:3.0],
    [SKAction moveToX:self.size.width duration:0.0]
  ]]]
];
[self addChild:ground1];
[self addChild:ground2];

上記実装コードは即ち CGPointMakeで生成したポイント に移動アニメーションの処理 [SKAction moveToX:任意のポジション duration:任意の速度] が終わったら次のシークエンス [SKAction moveToX:CGPointMakeで生成したポイント duration:0.0] に無時間で戻し此の間隙を別系統の地面インスタンスが埋める一連の工程で 以て目論見は達成されました。

なおゲームアプリ うさ犬が行く はアップル社謹製のプログラミング言語 Swift で最終的には実装されていますが此の開発初期段階では未だ Objective-C での試行錯誤となっています。

うさ犬が行く
無料:カテゴリ: ゲーム:4+ 評価
バージョン: 1.0(リリース: 2015年10月16日)
サイズ : 19.7 MB
互換性: iOS 7.1 以降。iPhone、iPad、および iPod touch に対応。
スポンサーリンク

「SpriteKitで地面を無限スクロールする」への1件のフィードバック

コメントは受け付けていません。