スプライト キットを使い始めたのですが、無限の横スクロール ゲームを作成するにはどうすればよいでしょうか? スプライト キットのドキュメントを読み、シーンの前処理を読みました。コンテンツがシーンよりも大きい場合は、シーンの位置を再調整できると述べられています。試してみたところうまくいきましたが、背景画像全体をスクロールすると、シーンのデフォルトの背景が表示され始めました。無限の背景を作成するにはどうすればよいですか? 彼の問題について説明している適切なドキュメントや記事を教えてくれる人はいますか? ありがとうございました。
質問する
11592 次
4 に答える
1
SpriteKit と Swift を使用したこの正確な参照のコード例を以下に示します。
func background1() {
let backgroundTexture = SKTexture(imageNamed: "bg")
//move background right to left; replace
let shiftBackground = SKAction.moveByX(-backgroundTexture.size().width, y: 0, duration: 15)
let replaceBackground = SKAction.moveByX(backgroundTexture.size().width, y:0, duration: 0)
let movingAndReplacingBackground = SKAction.repeatActionForever(SKAction.sequence([shiftBackground,replaceBackground]))
for var i:CGFloat = 0; i<3; i++ {
//defining background; giving it height and moving width
let background = SKSpriteNode(texture:backgroundTexture)
background.position = CGPoint(x: backgroundTexture.size().width/2 + (backgroundTexture.size().width * i), y: CGRectGetMidY(self.frame))
background.size.height = self.frame.height
background.zPosition = -20
background.runAction(movingAndReplacingBackground)
self.addChild(background)
- 画像で SKTexture として作成された一定の backgroundTexture を作成します。
- 背景を左に移動するための定数 (shiftBackground) と、現在表示されている背景の右側に背景の別のインスタンスを追加するための定数 (replaceBackground) を作成します。
- 永久に繰り返す SKAction として定数 (movingAndReplaceingBackground) を作成し、関数 repeatActionForever のパラメーターを SKAction.sequence に設定して、shiftBackground 定数と replaceBackground 定数を参照します。
- 背景の定義を定義するループを作成します。(変数 i について、i の量が 3 未満の場合、i を 1 増やします。
- ループ内で、テクスチャ、位置、サイズ、および zPosition (兄弟の順序がオフになっている場合) を保護し、次に、movingAndReplaceingBackground をアクションとして呼び出します。これにより、シーケンスが繰り返されます。
- 最後に、ループの最後の部分で背景を追加します。反復が 3 回未満の場合はいつでも、このアクションを実行します。最初の背景が画面の左端に達するとすぐに、ノードが 2 に削除されるため、ループ内でアクションが再度実行されます。
視差背景の場合、この関数を 4 回コピーし、変数の名前を変更し、shiftBackground 定数の「期間」を変更し、距離に基づいて異なる速度を取得できるため、これを関数にラップしました。
これが役立つことを願っています!Swift が Swift 3 になると、この「C スタイル」の for ループは非推奨になるため、長期的にはまだそれを修正する方法がわかりません。
于 2016-08-31T17:38:12.970 に答える
0
私は無限のタイル スクローラーのライブラリに取り組んできました。うまくいけば、サイド スクローラーの出発点になる可能性があります。
tableView のようなデリゲートを使用しているので、タイルやあらゆる種類のノードをスクローラーに簡単に提供できることを願っています。まだ衝突ロジックを実装していませんが、それも追加する予定です。
于 2015-03-05T09:32:59.350 に答える