Membuat karakter bergerak di sepanjang lereng melengkung di Dunia dengan gravitasi

10

Saya telah melihat game ini

Celana Fancy 2 . Dan hal yang saya perhatikan selain dari fisika dan animasi yang indah adalah karakternya bergerak di sepanjang lereng, bahkan lereng yang melengkung. Saya memiliki sedikit pengalaman dalam Box2d, tetapi konsep lereng melengkung ini baru bagi saya. Ini akan sangat membantu saya jika seseorang memberi tahu saya tentang konsep ini dan implementasinya. Bahkan jika implementasi tidak di box2d, itu disambut baik

Wisnu
sumber
2
Metanet, orang-orang yang melakukan N (yang ada di Flash) memiliki tutorial tentang bagaimana mereka melakukan tabrakan yang mencakup bagaimana mereka menghitung kurva: metanetsoftware.com/technique/tutorialA.html
CodexArcanum

Jawaban:

5

Bagaimana Anda mendapatkan kurva di Box2D?

Dalam versi Box2D yang belum dirilis , ada dua tipe bentuk baru, b2LoopShape dan b2EdgeShape , yang memungkinkan Anda membuat kurva dari urutan segmen garis.

Dalam versi yang dirilis, Anda dapat menggunakan beberapa kotak kecil yang diatur pada sudut untuk mendapatkan efek yang sama, tetapi tubuh cenderung melakukan hal-hal yang tidak stabil dan tidak terduga di dekat titik koneksi. Jadi saya akan merekomendasikan menggunakan versi yang belum dirilis.

Bagaimana bisa karakter jatuh kurva?

Buat karakter menjadi roda! Pertanyaan saya tentang fisika platformer memiliki beberapa diskusi tentang ini , tetapi ide dasarnya adalah untuk memasang tubuh karakter Anda pada roda yang berputar, dan bergerak dengan menerapkan kekuatan rotasi ke roda. Meskipun (sebenarnya, karena) roda memiliki gesekan, gaya ke bawah dari gravitasi akan menyebabkannya berputar menuruni lereng - seperti roda nyata. Dengan mengubah parameter motor sambungan revolute , Anda dapat membuatnya menahan rotasi sebanyak yang diperlukan untuk menghindarkannya dari tanjakan kecil.

Masyarakat
sumber
Saya setuju dengan Anda, dalam menggunakan b2LoopShape saya bisa membuat kemiringan sesuai keinginan saya. Tetapi, mengikuti tautan yang Anda poskan; Masalahnya adalah, itu tidak mengarah ke port flash box2d hanya versi c ++. 1.) Apakah Anda punya saran untuk itu? atau 2.) Apakah Anda tahu ada mesin fisika lain untuk flash yang memungkinkan penciptaan lereng melengkung?
Wisnu
Saya tidak berpikir port Flash Box2D up-to-date dengan tipe sambungan / bentuk baru. Saya tidak tahu mesin fisika apa yang tersedia untuk Flash selain Box2D.
@ Joe: Jika saya bertanya kepada Anda, apakah mungkin jika saya mencoba menulis kelas AS untuk b2LoopShape? Sehingga saya bisa memasukkannya ke dalam api Box2d Flash. Di mana saya harus mulai melangkah? Ada petunjuk?
Wisnu
1

Fancy Pants dibuat dalam Flash, dan Flash memiliki metode khusus yang disebut 'hitTest' yang memungkinkan Anda untuk menguji piksel (dalam hal ini, ia mungkin melakukan 2-3 pixel hitTests di sepanjang bagian bawah karakter Fancy Pants) terhadap apa pun yang diambil dalam objek klip video yang ditunjuk. Mungkin agak sulit untuk membuatnya terasa benar, tetapi fungsi bawaan ini adalah mengapa begitu banyak game Flash bertabrakan dengan lereng melengkung. Prosesnya jauh lebih rumit untuk kebanyakan mesin lain, dan biasanya harus dilakukan secara manual, tetapi ada beberapa metode yang berbeda.

Metode yang paling saya kenal adalah jika mesin Anda berbasis ubin (pikirkan Sonic the Hedgehog), ubin yang ditunjuk sebagai melengkung masing-masing dapat memiliki rumus yang menentukan posisi tabrakan 'Y' berdasarkan posisi karakter 'X' saat ini. di ubin itu. Anda harus menentukan formula berdasarkan seberapa curam lereng dan seberapa tinggi kurva yang Anda cari. Anda dapat menggunakan kalkulator grafik atau program grafik untuk bereksperimen dengan formula. Anda dapat memiliki beberapa ubin dengan kurva dan rumus berbeda yang dikaitkan dengannya dengan cara ini.

Brian Cable
sumber
Sonic tidak memiliki rumus kurva untuk ubin. Ini menggunakan peta ketinggian 2d untuk setiap piksel.
AttackingHobo
@AttackingHobo: Bisakah Anda memberi tahu saya apa peta 2dhight untuk setiap piksel atau dapatkah Anda mengarahkan saya ke tempat di mana saya dapat menggunakannya untuk di game flash saya?
Wisnu
2
info.sonicretro.org/Sonic_Physics_Guide Lihatlah ini. Saya tidak tahu apakah ini akan membantu Anda jika Anda menggunakan kotak 2d. Anda mungkin harus memutar mesin fisika Anda sendiri.
AttackingHobo
@Attacking Hobo: Apakah ada keuntungan atau kemungkinan dalam "melakukan" lereng melengkung Jika saya mencoba membuat kelas AS 3.0 yang memungkinkan loop dalam api box2d?
Wisnu