Proyek tahap awal yang mencoba untuk port Game Flash Incredibots 2 CE ke TypeScript dan Pixi.js.
Instruksi Lingkungan Pengembangan yang berikut tidak berlaku untuk versi HTML5.
Terima kasih telah mengunduh Incredibots! Bersiaplah untuk membangun, mengendalikan, dan berbagi kreasi robot Anda sendiri di taman bermain berbasis fisika!
Untuk menjalankan Incredibots atau Incredibots2, cukup buka file Incredibots.html atau Incredibots2.html di browser web dengan flash player yang diinstal.
Menikmati!
Kode sumber untuk klien game IB1 dan IB2 berlokasi di subdirektori SRC/Incredibots dan SRC/Incredibots2. Buka Ide ActionScript pilihan Anda (saya menggunakan Flex Builder 3), dan buat proyek baru menggunakan direktori yang sesuai. File aplikasi runnable utama harus diatur ke main.as, dan saya menggunakan param -default-frame-rate 30 sebagai argumen kompiler. Pastikan juga untuk menautkan ke perpustakaan Flgui.swc di folder LIBS. Kode sumber berisi beberapa pernyataan [embed], yang saya yakin hanya dapat bekerja dengan Flex Builder, tetapi IDE lain kemungkinan memiliki metode yang sama untuk menghubungkan ke aset.
Setelah semuanya diatur dan proyek dikompilasi dengan benar, IDE harus membuat folder bin-debug (atau sesuatu yang serupa), berisi SWF dan file HTML yang menyematkan SWF. Sekarang Anda akan dapat membuat perubahan pada kode dan melihatnya tercermin dalam SWF yang dibangun!
Saya akan memberikan gambaran dasar dari kelas -kelas utama dalam kode sisi klien, dengan harapan memperjelas bagaimana tepatnya semuanya bekerja. Kelas aplikasi utama adalah Main.as, yang menangani penambahan pendengar acara ke panggung, dan menentukan kelas 'pengontrol' mana yang aktif. Anda dapat menganggap pengontrol secara longgar mewakili satu jenis 'layar'. Ada satu untuk menu utama, dan kemudian satu untuk layar game utama, dengan subclass untuk semua jenis layar game utama (yaitu 1 subclass per tutorial, 1 untuk mode Sandbox, 1 untuk Mode Tantangan Buat, dll.). Kelas (sayangnya agak monolitik) yang menangani sebagian besar fungsi pengeditan robot utama adalah ControlGame, yang memiliki metode untuk menanggapi semua tombol dan opsi menu yang tersedia saat mengedit robot, serta metode untuk menangani pembuatan, menghapus, memilih, memindahkan, dan mengedit bagian robot. Array Allparts in Controlgame mewakili robot yang sedang dikerjakan, sebagai serangkaian bagian. Itu juga menangani mulai dan menghentikan simulasi box2d
Paket bagian berisi definisi kelas untuk setiap jenis 'bagian yang tersedia saat membangun robot. yaitu lingkaran, persegi panjang, sambungan tetap, sambungan berputar, pendorong, dll. Setiap contoh dari kelas -kelas ini berisi semua data tentang bagian tertentu, misalnya, revoluteJoint memiliki variabel anggota untuk kekuatan gabungan, kecepatan, terlepas dari apa pun yang diaktifkan oleh motor, yang dapat dipikirkan oleh 2 tantangan yang dilampirkan oleh 2 atau tidak, dalam kode yang dilampirkan, dll. Dalam kode, robot 'atau tidak, atau tidak, dalam kode yang dapat dipikirkan, dll. Dalam kode, robot' atau tidak ada. Pengaturan kotak pasir, pembatasan tantangan).
Paket Tindakan hanya berisi daftar tindakan yang dapat dilakukan oleh pengguna saat dalam mode edit. Tindakan ini digunakan semata -mata oleh fitur 'undo' dan 'ulangi', dan setiap tindakan tahu apa yang perlu dilakukan untuk membatalkan atau mengulanginya.
Kelas input menangani semua interaksi keyboard dan mouse dengan elemen non-GUI, dan mengirim panggilan ke metode yang sesuai (biasanya dalam controllergame) untuk menanggapi klik mouse atau tombol tekan yang diberikan.
Kelas Draw berkaitan dengan gambar robot ke layar. Ada 2 kasus yang perlu ditangani: mode edit, dan mode simulasi. Saat dalam mode edit, ia menarik semua bentuk ke layar berdasarkan array bagian saat ini. Ketika dalam mode SIM, itu menggambar bentuk berdasarkan posisi representasi Box2D dari bagian -bagian itu, tetapi perlu membuatnya terlihat sama dalam kedua kasus. Secara teori, kelas ini cukup modular, dan harus dapat ditukar dengan kelas alternatif yang digunakan untuk menggambar ke layar dengan cukup mudah, jika Anda ingin menulis metode Anda sendiri untuk berurusan dengan grafik robot.
Paket GUI memiliki banyak kelas yang membangun berbagai panel GUI dan jendela sepanjang permainan. Yang paling penting dari ini mungkin adalah kelas SaveloadWindow, yang menangani menampilkan daftar robot yang tersedia untuk dimuat dari server. Ini juga menangani skor tinggi, menyimpan dan memuat robot, tayangan ulang, dan tantangan, dan mencari robot dan semacamnya. Saat ini dinonaktifkan, karena server turun, tetapi jika server lain naik, kelas ini harus dimodifikasi. Kelas -kelas lain dalam paket ini termasuk Guiwindow, yang merupakan kelas dasar untuk semua dialog popup kecil di seluruh permainan, dan komponen seperti Guibutton, GuitexTarea, dll.
Akhirnya, kelas database menangani semua interaksi dengan server. Ini memiliki operasi untuk menyimpan dan memuat robot dan tayangan ulang, serta untuk mendapatkan daftar masing -masing, dan untuk masuk, membuat pengguna baru, mengunggah/mengunduh skor, dan beberapa lagi. Setiap operasi memiliki fungsi panggilan balik yang sesuai, yang memproses hasil yang dikembalikan oleh server dan mengembalikan data kembali ke kelas yang sesuai untuk ditampilkan. Yang perlu diperhatikan adalah fungsi PutxIntobyTeArray dan ExtractXFromByTeArray, di mana x adalah salah satu dari 'robot', 'replay', atau 'tantangan'. Fungsi-fungsi ini digunakan untuk membaca dan menulis data dalam game ke atau dari flash bytearray. Robot, replay, atau tantangan kemudian dikirim ke server sebagai bagian data post UrlRequest. Fungsi-fungsi ini juga digunakan oleh fitur 'impor' dan 'ekspor', sebagai cara mudah untuk mengonversi antara objek dan teks dalam game. Jika Anda ingin menambahkan fitur yang perlu disimpan bersama dengan robot, replay, atau tantangan, kemungkinan besar Anda perlu memasukkannya ke salah satu fungsi ini secara eksplisit.
Kode server adalah segala sesuatu yang terkandung dalam subfolder HTDOCS. Ini sepenuhnya tertulis dalam PHP. Saya akan berbicara tentang kode server database terlebih dahulu.
Kode basis data ada di ./src/htdocs/incredibotsanjang atau 2]/Database/Direktori. Incredibots dibangun menggunakan Amazon S3 dan SimpledB sebagai backends. Anda dapat membaca lebih lanjut tentang ini di http://aws.amazon.com. Sebagian besar kode server DB ditulis secara khusus dengan mengingat hal ini, dan sayangnya saya tidak pernah sempat refactoring sedemikian rupa sehingga lapisan basis data disarikan dalam paket umum. Dengan demikian mungkin banyak pekerjaan untuk beralih ke sesuatu seperti MySQL, meskipun itu akan bekerja sama seperti SimpledB dan S3 jika dipertahankan dengan benar.
Perhatikan bahwa Incredibots juga memanfaatkan MySQL melalui database Forum PHPBB. Karena kami memiliki satu login untuk permainan dan forum, semua akun pengguna dikelola melalui tabel PhPBB_USERS Forum. Inilah sebabnya mengapa kode Forum PHPBB termasuk dalam paket, saya harus membuat beberapa modifikasi pada kode Forum untuk membuat login tunggal berfungsi, serta beberapa fitur lainnya, seperti kemampuan untuk menyematkan robot dalam posting forum. Yang mengatakan, login dasar dan membuat akun baru harus bekerja dengan baik dengan versi phpBB yang berjalan, dan seharusnya tidak terlalu sulit untuk mengubah fungsi login untuk bekerja dengan basis data/sistem apa pun yang Anda inginkan.
Kode basis data saat ini harus berfungsi dengan baik di luar kotak dengan akun AWS Amazon. Satu -satunya hal yang perlu dimodifikasi adalah kredensial dalam file common_variables.php. Terlepas dari itu, setiap GGScores _*. File PHP sesuai dengan salah satu dari 20 atau lebih operasi DB yang dapat dihubungi klien. Semua panggilan awalnya diarahkan ke ggscores.php, yang mencakup file yang tepat sesuai dengan parameter 'op'. Setiap operasi kemudian berbicara dengan database Amazon (atau tabel phpbb_users di MySQL) dan mengeluarkan respons untuk klien. Data biner untuk semua robot, tayangan ulang, dan tantangan dikirim ke server melalui data HTTP Post, dan disimpan dalam S3 sebagai gumpalan, dengan sejumlah kecil metadata untuk setiap yang disimpan di SimpleDb.
CATATAN: Satu hal yang mungkin merupakan ide yang baik untuk ditambahkan adalah validasi checksum MD5 saat mengirim data biner dari klien ke server, untuk menjaga terhadap korupsi paket. Saya tahu ini telah terjadi di masa lalu beberapa kali, dan ketika itu terjadi, robot/replay/tantangan yang terpengaruh menjadi korup, dan hilang selamanya ... (Dun Dun Dun!)
Kode server lainnya berisi sebagian besar komponen dari situs web Incredibots. Halaman index.php berisi kode untuk menanamkan SWF dan menampilkannya dengan benar. Untuk meng -host SWF, Anda hanya akan mengunggah file SWF yang dihasilkan dari membangun klien, bernama Incredibots.swf (atau Incredibots2.swf) ke direktori yang sama dengan index.php. Halaman Users.php juga ada di sini, yang menampilkan semua robot, tayangan ulang, dan tantangan yang diunggah oleh pengguna tertentu di halaman web (agak) yang diformat dengan baik.
Incredibots awalnya dirancang oleh Ryan Clark, diprogram oleh Oliver Trujillo, dengan seni dari Matt Parry. Sejumlah besar kredit juga harus diberikan kepada Erin Catto dan mesin fisika Box2D, serta port flash di mana permainan kami dibangun. http://www.box2d.org/ http://box2dflash.sourceForge.net/
Incredibots mungkin adalah permainan yang paling saya bersenang -senang kerjakan. Sudah menjadi ledakan memeriksa semua kreasi gila yang dibuat oleh komunitas Incredibots, dan saya berharap yang terbaik untuk membuat Incredibots tetap berjalan. Bangunan Bersoris dan Bersama!
- Oliver