Bagaimana cara membuat latar belakang scrolling tanpa akhir?

8

Saya perlu menambahkan latar belakang gulir ke permainan saya, gambarnya 512x512px. Ini untuk permainan mobil dengan lalu lintas dua arah dan saya ingin dapat menyeberang ke sisi yang berlawanan dan mengemudi melawan lalu lintas juga. Game ini dalam mode potret dan saya menggunakan cocos2d.

Bagaimana saya bisa membuat ini dengan cara sebaik mungkin?

David Holmes
sumber
Apakah latar belakang membungkus x dan y atau hanya dalam satu arah?
Ricket
Juga apa dimensi layarnya? Yaitu apakah layar akan selalu lebih kecil dari 512x512?
Ricket

Jawaban:

7

Saya pada dasarnya akan membuat tilemap 2x2 di mana ubinnya berukuran 512x512 dan semuanya sama. Gulir melaluinya seperti biasa tetapi segera setelah X mendapatkan lebih dari 512 kurangi 512 (atau lakukan modulo 512 - tapi waspadalah terhadap angka negatif), sama untuk Y. Jadi, alih-alih satu poli Anda menggambar 4, meskipun hanya 1 yang akan terlihat sebagian besar waktu, tetapi pada kasus perbatasan semua 4 terlihat (ketika Anda turun 400 turun dan 400 ke kanan misalnya). Dengan cara ini akan bergulir selamanya.

Tentu saja Anda juga dapat menggunakan 4 sprite sebagai ganti tilemap. Satu di worldPos, satu di worldPos + (512,0), satu di worldPos + (0,512) dan satu di worldPos + (512,512).
Pastikan worldPos selalu modulo 512 dan sekali lagi itu harus bergulir selamanya.

Diedit untuk menambahkan beberapa kode: Tidak

diuji, tidak dicentang sintaks.
Sangat sulit dikodekan untuk menyelesaikan masalah ini. Akan lebih baik dengan larik yang sebenarnya untuk peta, tetapi untuk masalah khusus ini harusnya berfungsi.
Asumsikan 0,00 berada di kiri atas layar.

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);
}
Kaj
sumber
Dalam kasus modulo, angka negatif tidak menjadi masalah (setidaknya untuk Objective-C; di Jawa, mereka).
Ricket
Betulkah? Oke ... tergantung mesin, saya kira iPhone diberkati. Belum menyentuh Objective-C selama satu setengah tahun.
Kaj
Yah sebenarnya, sejujurnya saya belum benar-benar mencobanya di Objective-C. Saya membuat tebakan berdasarkan fakta bahwa AFAIK Java adalah satu-satunya di mana% tidak modulo, itu "sisa". Bahasa lain yang saya lihat menangani% seperti modulo; -1% 3 seharusnya 2. Tetapi di Jawa, itu 1. Saya belum benar-benar menguji Objective-C tetapi jika berperilaku seperti itu seharusnya maka -1% 3 adalah 2 dan memang modulo akan bekerja dengan benar bahkan untuk angka negatif.
Ricket
Tidak, di C itu (tampaknya, terlalu malas untuk memeriksa standar pada jam durhaka ini) tergantung mesin. Saya baru saja memverifikasi di laptop saya bahwa -5% 3 sama dengan -2.
Kaj
Bisakah seseorang memposting beberapa kode, semua angka ini hanya membuat saya pusing. Saya sudah berkembang selama hampir 3 bulan jadi saya belum ahli. Saya suka 4 sprite cara Kaj bicarakan, sepertinya cara termudah. Bisakah Anda menunjukkan kepada saya contoh kode untuk ini, saya belajar lebih cepat dari melihat kode dan bermain-main dengannya. Saya telah mengubah ukuran gambar menjadi 512x320px. Adakah yang bisa membantu saya? David
David Holmes
2

Jika saya mengerti Anda dengan benar, Anda dapat membuat satu set gambar. Setiap gambar memiliki titik masuk dan titik keluar. Untuk mempermudah, Anda dapat membuat semua titik masuk dan keluar dari lokasi yang sama. Kemudian, Anda dapat secara acak pergi di antara gambar yang berbeda sehingga pemain tidak akan menemui level yang sepenuhnya berlebihan. Jika Anda ingin mencampuradukkan hal-hal sedikit, Anda dapat membuat gambar yang memiliki pintu masuk dan keluar yang berbeda. Anda hanya perlu melakukan lebih banyak pekerjaan untuk memastikan keluar dari satu gambar cocok dengan pintu masuk gambar berikutnya.

zooropa
sumber