Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Physics
Gamedevelopment

Apa yang ada di dalam Mesin Fisika Proyektil?

by
Length:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Ridho Aulia (you can also view the original English article)

Pada artikel ini, kita akan memeriksa penggunaan fisika untuk mensimulasikan efek proyektil dalam game seperti Angry Birds. Kita akan melihat dasar-dasar penggunaan fisika 2D di ruang dunia game, seperti membuat objek dan menerapkan impuls dan kekuatan.

Mesin Fisika

Mengapa menggunakan mesin fisika? Apa yang sebenarnya ia lakukan?

Mesin fisika membantu kita melakukan dua hal yang sangat penting untuk game kita:

  1. Mendeteksi tabrakan antara objek dalam game kita.
  2. Mensimulasikan gaya dan hasil gerak objek kita dari tabrakan itu ..

Deteksi tabrakan: Permainan tidak akan terlalu menyenangkan jika karakter Anda jatuh ke lantai sebelum Anda bisa melompat, atau jika, ketika Anda menabrak musuh dengan kaki Anda, Anda jatuh tepat. Deteksi tabrakan menggunakan mesin fisika memungkinkan untuk mendengarkan kontak yang sangat tepat, dan memungkinkan interaksi antara objek yang akan disimulasikan menggunakan kekuatan.

Simulasi kekuatan: Setelah tabrakan, apa yang harus terjadi? Logika game bisa disebut, Anda bisa melambung, objek game lain bisa melambung, atau Anda tidak bisa bergerak lebih jauh. Ini semua ditangani di belakang layar, menggunakan kekuatan mesin yang dihitung. Tetapi kekuatan tidak terbatas pada kontak; kekuatan lain, seperti gravitasi dan impuls, dapat terjadi, tanpa objek yang benar-benar bersentuhan. Kekuatan mempengaruhi aksi dalam game dan pergerakan objek, karakter, dan bahkan ruang-dunia itu sendiri.

.

Kita akan melihat bagaimana mesin fisika bekerja dengan cepat, tetapi terlebih dahulu mari kita lihat mesin apa yang mungkin ingin Anda gunakan, dan mengapa Anda memutuskan untuk menggunakannya, berdasarkan kebutuhan khusus Anda.

Memilih Mesin Anda

Saat pertama kali mulai berpikir tentang penggunaan fisika dalam permainan Anda, Anda perlu memutuskan bagaimana Anda ingin mendekati masalah, dan apa yang akan Anda perlukan dalam hal simulasi. Anda memiliki dua pilihan untuk menggunakan fisika:

  1. Menggunakan mesin fisika yang ada.
  2. Membuat sendiri simulasi fisika

Menggunakan Mesin Fisika yang Ada

Beberapa pilihan yang sangat baik tersedia untuk mesin fisika yang telah ditentukan dan siap pakai. Salah satu pilihan paling populer untuk game 2D adalah Box2D; Ini adalah mesin tulis C + + asli, namun memiliki wrappers, port, dan ekstensi yang memungkinkannya digunakan di hampir semua platform 2D. Pilihan populer lainnya adalah Chipmunk 2D, yang digunakan di beberapa mesin permainan utama, seperti Cocos2D.

Membuat Mesin Sendiri

Dalam beberapa game, menggunakan mesin yang sudah ditentukan sebelumnya belum tentu merupakan pilihan yang optimal. Menggunakan mesin fisika dapat menyebabkan beberapa overhead yang tidak perlu ketika fungsi penuhnya tidak diperlukan. Dalam kasus-kasus seperti platformer sederhana atau game jenis pemecah batu bata — di mana Anda tidak memerlukan deteksi tabrakan pixel-sempurna atau beberapa kemampuan mesin lainnya — mungkin tidak perlu menghabiskan sumber daya yang bisa lebih baik digunakan di tempat lain.

Membangun mesin Anda sendiri dapat memberi Anda lebih banyak fleksibilitas daripada produk akhir, tetapi juga dapat membuat segalanya lebih rumit jika Anda berurusan dengan lebih dari beberapa contoh karakter dan objek.

Loop Game

Sebelum membahas properti dan detail simulasi fisika, mari kita lihat bagaimana itu disebut dalam loop adegan game Anda.

Loop permainan yang khas akan berjalan melalui hal-hal berikut untuk setiap frame, agar bisa:

  1. Masukan
  2. Perbarui / Logika Game
  3. Mensimulasikan Fisika Game
  4. Membuat Layar / Adegan

Ini berarti bahwa menghitung fisika dihasilkan adalah tugas terakhir dilakukan dalam lingkaran sebelum layar diperbarui. Ini masuk akal, seperti titik simulasi untuk bereaksi terhadap apa yang telah terjadi dalam permainan dunia-ruang.

Perhatikan bahwa gambar ini menunjukkan bahwa fisika disimulasikan selama setiap bingkai loop game Anda. Ini dapat menghasilkan beberapa overhead besar jika simulasi Anda menjadi terlalu besar atau rumit. Untuk alasan ini, yang terbaik adalah menjaga manajemen game dan panggilan ke simulasi dan pendengarnya terbatas.

Fisika Tingkat Tetap vs Bingkai Tergantung

Masuk akal sekarang untuk membahas dua metode polling yang berbeda simulasi fisika: tingkat dependen tetap vs bingkai. Pertimbangkan pembaruan (void): metode yang konsisten dalam sebagian besar loop game. Loop ini disebut sekali per frame dari adegan game. Jika metode "simulasi fisika" Anda dipanggil dari pembaruan (void) :, fisika dunia game Anda akan bergantung pada frame-rate Anda, dan ini dapat menyebabkan beberapa simulasi yang berombak dan tidak realistis. Di iOS, efek ini dikurangi dengan penggunaan properti Boolean usesPreciseCollisionDetection, tetapi bagaimana dengan mesin lain?

Pertimbangkan segmen kode berikut:

Kode ini dirancang untuk mengkompensasi masalah dengan nilai delta untuk waktu. Pertimbangkan situasi di mana Anda memainkan game di telepon dan mendapat telepon: itu akan membantu game Anda untuk mengatur ulang delta Anda kembali ke 1/60 yang diharapkan (untuk game 60 fps).

Ini sebenarnya adalah langkah pertama ke diskusi tentang decoupling simulasi fisika dari langkah-waktu dari metode pembaruan (void):. Sementara interval waktu yang dimodifikasi pasti akan membantu dalam panggilan simulasi fisika yang lebih stabil, itu tidak benar untuk semua situasi. Untuk melakukan ini, kita harus benar-benar menghapus panggilan simulasi fisika dari loop rendering game, dan membuat siklus tetap untuk menjalankannya. Contohnya; jika game Anda dimaksudkan untuk berjalan pada 60 fps, Anda mengatur fisika untuk mensimulasikan 60 kali per detik. Decoupling ini menghilangkan segala kekhawatiran masalah render yang menyebabkan umpan balik berombak dalam simulasi fisika Anda.

Singkatnya, berhati-hatilah dalam penerapan fisika Anda. Jika Anda menemukan diri Anda menggunakan mesin di lingkungan tempat Anda mengenakan pajak sumber daya sistem, pertimbangkan simulasi fisika langkah tetap untuk menjaga keadilan dan kesetiaan.

Dari Sprite ke Tubuh Fisika

Sprite adalah gambar yang ditampilkan di layar game Anda. Sprite tidak memiliki properti secara default dalam simulasi fisika. Anda dapat "memalsukan" beberapa perilaku dunia fisik dengan menggunakan properti sprite seperti kotak pembatas dan panggilan persimpangan, tetapi kemudian Anda harus menulis sendiri semua logika yang dihasilkan. Bukankah lebih baik jika permainan bisa menangani semua ini untuk kita?

Dalam cuplikan ini, kita membuat sprite:

.... dan sebut tabrakan antara dua sprite:

Bentuk Tubuh

Badan fisika adalah bentuk "sederhana" yang menentukan ukuran kasar dan bentuk sprite Anda, atau mungkin mendefinisikan area aktif sprite Anda. Pertimbangkan yang berikut ini:

Badan fisika tidak ditentukan oleh gambar sprite Anda, dan biasanya tidak terlihat di dalam gim. Anda membuat bentuk secara dinamis, seringkali dengan memanggil metode untuk menggambar bentuk yang akan membentuk tubuh, atau dengan menggunakan program untuk membantu Anda menggambar dan menentukan tubuh. Anda kemudian menempelkan tubuh ke sprite, dan mendapatkan akses ke efek dan properti yang disimulasikan ditugaskan ke tubuh itu.

Anda dapat memiliki banyak badan fisika yang diikat ke satu sprite. Ambil contoh, sprite dari seorang pahlawan yang membawa pedang. Masuk akal untuk membuat satu tubuh untuk karakter pahlawan, dan satu lagi untuk pedang yang dibawanya. Ini akan memungkinkan Anda untuk membuat logika game berdasarkan pada tabrakan antara badan yang berbeda.

Dalam pseudocode, logikanya akan terlihat seperti ini:

Menghubungkan Tubuh Fisika dengan Sprite

Pertimbangkan situasi permainan luar angkasa, di mana Anda memiliki kapal pahlawan dan kapal musuh:

Anda mungkin ingin membuat tubuh fisika pemain sedikit lebih kecil dari gambar dasar sprite karena dua alasan:

Tabrakan Visual yang Ditingkatkan: Ketika seorang pemain bertabrakan dengan benda di dalam game Anda, dengan membuat badan fisika yang lebih kecil ini, gambar sprite akan tumpang tindih sementara pada titik kontak, yang terlihat bagus secara visual. (Lebih jauh ke titik ini: saat menggambar nilai-z, pertahankan karakter pemain Anda di depan hierarki adegan.)

User-Persceived Fairness: Untuk membuat game Anda terasa "adil" bagi pemain, jaga tubuh yang bertabrakan terbatas pada sebagian besar objek, dan jauh dari tonjolan asing seperti sirip belakang gambar di atas. Dengan cara ini, tidak akan ada "hit murah" untuk mengganggu para pemain game Anda. Sebaliknya, Anda biasanya ingin tubuh fisika musuh setidaknya menjadi ukuran gambar dasar; jika kita memberikan pahlawan ruang kita laser untuk menembak musuhnya, tubuh musuh yang agak terlalu besar membuatnya lebih masuk akal bagi pemain kita untuk mendapatkan pukulan. Juga pertimbangkan pendekatan yang sama untuk ubin di platformer atau permainan puzzle yang mengharuskan pemain Anda untuk melompat dari platform ke platform. Pemain terbiasa dengan sedikit "grace" dalam jenis permainan ini; memperluas tubuh fisika sedikit akan membantu menjaga game Anda cukup "adil".

Kendala Mesin 2D yang khas

Ada dua jenis utama badan fisika:

  1. Badan berbasis-tepi
  2. Badan berbasis-volume

Badan berbasis-tepi adalah garis statis dan tidak bergerak yang menciptakan batas bagi benda lain untuk bertabrakan. Ini memiliki ruang negatif di dalamnya yang tidak memiliki efek pada tubuh. Aplikasi yang bagus untuk ini adalah membuat batas di sekitar layar Anda untuk memuat benda apa pun di dalamnya.

Badan berbasis-volume memiliki volume dan massa, dan dapat berupa dinamis atau statis. Karena benda-benda ini memiliki massa, benda memantul darinya dan mereka dapat dipengaruhi oleh kontak paksa. Badan berbasis volume dapat berupa salah satu dari empat bentuk utama:

  1. Lingkaran
  2. Persegi panjang
  3. Rantai
  4. Poligon Kompleks

Ada beberapa kendala untuk menggunakan benda dalam mesin fisika 2D khas Anda. Berikut adalah dua batasan utama:

Badan Fisika Cembung

Jika bentuknya cembung, berarti tidak ada sudut bagian dalam kurang dari 180 derajat.

Untuk menjadi jelas, dimungkinkan untuk menjalankan simulasi fisika pada bentuk cekung, tetapi biaya pemrosesan sangat tinggi sehingga tidak realistis untuk 2D, terutama ketika berjalan pada perangkat genggam atau kurang kuat. Bentuk seperti cekung dapat dibangun dengan menghubungkan bersama dua bentuk cembung menggunakan sesuatu yang disebut Sambungan Statis. Sendi adalah fitur hebat lain yang tersedia dengan mesin 2D, tetapi berada di luar ruang lingkup diskusi ini.

Badan Fisika Kaku

Ketika bola menabrak dinding, di dunia "nyata" hal seperti ini akan terjadi:

Sprite karakter Anda bisa menjalani jenis transformasi ini, namun tubuh fisikanya tidak bisa. Anda dapat mengontrol sifat-sifat tertentu dari tubuh untuk memengaruhi "guncangannya", tetapi sebenarnya ia tidak dapat memiliki bentuk yang bisa berubah. Ini dikenal sebagai Tubuh Kaku, yang berarti bahwa tubuh itu sendiri tidak dapat dideformasi atau diperas.

Properti Tubuh Fisika

Mari kita lihat sekilas beberapa sifat paling berguna yang tersedia pada badan fisika tipikal:

  1. Restitusi adalah ukuran seberapa "goyang" suatu objek. Secara lebih formal, ini adalah ukuran berapa banyak energi yang ditahan suatu benda setelah bertabrakan dengan benda lain.
  2. Densitas adalah ukuran seberapa "berat" suatu objek. Ini digunakan sebagai kualitas relatif — misalnya, batu akan lebih padat daripada bola, sehingga ketika bola mengenai batu, itu akan terpengaruh lebih berat.
  3. Gesekan adalah ukuran seberapa "licin" suatu objek. Ini digunakan ketika satu objek meluncur di sepanjang yang lain, dan menentukan berapa lama untuk berhenti.
  4. Jika suatu benda dinamis, maka kekuatan yang dipaksakan padanya oleh dunia dan benda-benda lain akan memiliki efek; jika itu adalah tubuh yang statis, maka mereka tidak akan.
  5. Rotasi biasanya merupakan variabel Boolean yang dapat diatur pada tubuh fisika. Dalam kasus-kasus tertentu Anda mungkin ingin membatasi benda dan tidak membiarkannya berputar, tetapi Anda ingin kekuatan masih diterapkan pada objek itu.

Sebagian besar mesin memiliki lebih banyak properti yang tersedia daripada ini, tetapi untuk keperluan diskusi ini, ini sudah cukup untuk memulai.

Gerak dan Momentum


Dalam dunia fisika yang disimulasikan, benda digerakkan oleh penerapan kekuatan dan impuls.

Kekuatan: Kekuatan umum biasanya memengaruhi tubuh secara lebih bertahap daripada impuls. Kekuatan ini adalah gaya konstan yang diterapkan dalam satuan waktu (seperti gravitasi atau mesin).

Impuls (Impulse Forces): Impuls adalah penyesuaian yang segera diterapkan pada momentum tubuh. Impuls biasanya diterapkan pada simulasi berdasarkan masukan pengguna.

Apa Selanjutnya?

Sekarang setelah Anda memahami teorinya, cara terbaik untuk memperkuat pemahaman Anda tentang mesin fisika proyektil adalah dengan membuatnya sendiri. Selanjutnya, saya akan memecah kode untuk permainan berbasis fisika sederhana yang telah saya tulis, sehingga Anda dapat melihat dengan tepat cara kerjanya!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.