iPadでゲームを作ろうとしています。ゲームの場合、Hay Day や Clash of Clans のようなスクロールする背景が必要です。これには Cocos2D を使用し、拡張子は CCLayerPanZoom です。しかし、これでは素敵なスクロール効果は得られません (指の動きを止めてもスクロールは止まりませんが、ゆっくりと停止します)。そして、この拡張クラスのズーム機能は 100% 良くないと思います。
これに対する解決策や良いクラスはありますか?
ありがとうございます。
iPadでゲームを作ろうとしています。ゲームの場合、Hay Day や Clash of Clans のようなスクロールする背景が必要です。これには Cocos2D を使用し、拡張子は CCLayerPanZoom です。しかし、これでは素敵なスクロール効果は得られません (指の動きを止めてもスクロールは止まりませんが、ゆっくりと停止します)。そして、この拡張クラスのズーム機能は 100% 良くないと思います。
これに対する解決策や良いクラスはありますか?
ありがとうございます。
CCLayer を使用して、移動したいすべての子をこのレイヤーに追加します。すべてを移動する場合は、CCLayer を update で移動します。
レイヤー座標を現実世界の座標に変換するには、以下の関数を使用します:
-(CGRect)worldBoundingBox {
CGRect rect = CGRectMake(0, 0, contentSize_.width,contentSize_.height);
return CGRectApplyAffineTransform(rect, [self nodeToWorldTransform]);
}
ああ少年。最近のプロトタイプでこの問題に取り組んだばかりですが、先のことは申し訳ありません。これを行うにはいくつかの方法がありますが、どちらもクリーンでもシンプルでもありません。
より直感的なアプローチは、カメラの位置を移動することです。これは、シーンの CCCamera を操作することで実行できます。この意味で、飛行機で上空を飛んでいるかのように、世界中をスクロールします。すべてのオブジェクトが「現実世界」の位置を維持するため、オブジェクト間の衝突検出は単純なままです。ゲーム ワールドでスプライトが (100,100) にある場合、カメラを左に 500 スクロールしても、スプライトは (100,100) のままです。
残念ながら、これはタッチ入力に関連する多くの問題を引き起こします。タッチ座標が画面の解像度に制限されているため、「このタッチがこのノード上にある」かどうかを簡単に確認できなくなりました。カメラが (1000,1000) にあり、画面の中央にあるスプライトをタッチすると、そのタッチ位置は (320,280) (画面の中央) に登録されます。すべてのタッチ計算には、カメラのオフセットを含める必要があります。これは、覚えるのが難しく、繰り返し含めるのが面倒です。
2 番目の手法は、ワールドを CCLayer に配置し、そのレイヤーをカメラの下に移動することです。このアプローチは面倒だと思ったので、あまり長くは追求しませんでした。