無限のスクロール背景を作成する方法は?


8

ゲームにスクロールする背景を追加する必要があります。画像は512x512pxです。それは双方向の交通のある自動車ゲームのためのものであり、私は反対側に渡って交通に対しても運転できるようになりたいと思っています。ゲームはポートレートモードで、cocos2dを使用しています。

これを可能な限り最善の方法で作成するにはどうすればよいですか?


背景はxとyに沿って折り返されますか、それとも一方向のみに折り返されますか
リケット

また、画面の寸法は何ですか?つまり、画面は常に512x512より小さくなりますか?
リケット

回答:


7

基本的に、2x2タイルマップを作成しますが、タイルはたまたま512x512で、すべて同じです。通常と同じようにスクロールしますが、Xが512を超えるとすぐに512を減算します(または512を法として、負の数に注意してください)。Yと同じです。1つのポリゴンの代わりに4を描画すると、1つしか表示されません。ほとんどの場合ですが、ボーダーケースでは4つすべてが表示されます(たとえば、400を下に、400を右に移動した場合)。このように、それは永遠にスクロールするはずです。

もちろん、タイルマップの代わりに4つのスプライトを使用することもできます。1つはworldPos、もう1つはworldPos +(512,0)、1つはworldPos +(0,512)、もう1つはworldPos +(512,512)です。
worldPosが常に512を法とすることを確認してください。また、永久にスクロールするはずです。

いくつかのコードを追加するために編集:

未テスト、構文チェックなし。
この問題を解決するために非常にハードコードされています。マップの実際の配列の方が良いでしょうが、この特定の問題ではこれでうまくいくはずです。
画面の左上を0,0と想定します。

void DrawBG( int worldX, int worldY)
{
   const int tileW = 512;
   const int tileH = 320;

   int worldXMod = worldX % tileW;
   if (worldXMod < 0) worldXMod += tileW;   // handle negative numbers

   int worldYMod = worldY % tileH;
   if (worldYMod < 0) worldYMod += tileH;   // handle negative numbers

   int tileLeft = -worldXMod;
   int tileTop  = -worldYMod;

   int spriteTopLeftY = tileLeft;
   int spriteTopLeftY = tileTop;

   int spriteTopRightX = spriteTopLeftX + tileW;
   int spriteTopRightY = spriteTopLeftY;

   int spriteBottomLeftX = spriteTopLeftX;
   int spriteBottomLeftY = spriteTopLeftY + TileH;

   int spriteBottomRightX = spriteTopRightX;
   int spriteBottomRightY = spriteBottomLeftY;

   // whatever the syntax of sprite drawing or setting its position is...
   DrawSprite(spriteTopLeftX, spriteTopLeftY);
   DrawSprite(spriteTopRightX, spriteTopRightY);
   DrawSprite(spriteBottomLeftX, spriteBottonLeftY);
   DrawSprite(spriteBottomRightX, spriteBottomRightY);
}

モジュロの場合、負の数は問題になりません(少なくともObjective-Cの場合、Javaでは問題になります)。
Ricket

本当に?わかりました...それはマシンに依存します、私はiPhoneが祝福されていると思います。Objective-Cに1年半触れていません。
Kaj 2010

実のところ、正直に言うと、Objective-Cでは実際に試したことがありません。私は、AFAIK Javaが%が剰余でない唯一の存在であるという事実に基づいて、知識に基づいた推測を行っています。それは、「残り」です。私が見た他のどの言語もmoduloのように処理します。-1%3は2です。ただし、Javaでは1です。文字どおりObjective-Cをテストしていませんが、想定どおりに動作する場合、-1%3は2であり、負の数値でもmoduloは正しく機能します。
リケット

いいえ、Cではそれは(どうやら、この不思議な時間に標準をチェックするのが面倒すぎる)マシンに依存しています。ラップトップで-5%3が-2であることを確認しました。
Kaj

誰かがいくつかのコードを投稿できますか?これらの数字はすべて私をめまいにします。ほぼ3か月間開発を続けてきたので、まだ専門家ではありません。Kajが話している4つのスプライトが好きで、一番簡単な方法のように思えます。このためのコードサンプルを見せていただけますか。コードを見て、それをいじることから、より速く学習できます。画像サイズを512x320pxに変更しました。誰か私を助けてくれますか?デビッド
デビッドホームズ

2

私が正しく理解していれば、一連の画像を作成できます。各画像には、入口点と出口点があります。物事を簡単にするために、すべての入口点と出口を同じ場所にすることができます。その後、プレーヤーが完全に冗長なレベルに遭遇しないように、ランダムに異なる画像間を移動できます。物事を少し混ぜたい場合は、入口と出口が異なる画像を作成できます。1つの画像の出口が次の画像の入口と一致することを確認するには、もう少し作業を行う必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.