Flappy Bird

1
06.19
Sejarah Flappy Bird


Flappy Bird mulanya bernama Flap Flap yang mengadopsi gaya visual permainan Nintendo. Dong Nguyen, pemuda 29 tahun yang tinggal di Hanoi, vietnam mengaku menyelesaikan permainan ini hanya dalam waktu dua hari. Sebulan berlalu, ternyata nama aplikasi “Flap Flap” sudah ada di toko aplikasi Apple, App Store.

 Nguyen mengganti nama permainan itu menjadi Flappy Bird pada tanggal 24 Mei 2013 di bawah bendera .Gears Studio (dotGears Studio). Gears merupakan studio pengembang permainan kecil dan independen di Vietnam milik Nguyen sendiri. Pada saat itu juga ia menulis status di Twitter tentang skor tertinggi yang diraihnya pada Flappy Bird yaitu 44, sambil memberi tautan untuk mengunduh aplikasi tersebut. Nguyen mengatakan kepada blog teknologi The Verge, Flappy Bird telah menghasilkan uang 50.000 dollar AS atau sekitar Rp 600 juta per hari dari hasil iklan-iklan yang muncul pada game tersebut.

 Nguyen membuat pengumuman yang sangat mencengangkan. Ia akan mencabut Flappy Bird dari toko aplikasi App Store dan Play Store dalam waktu 22 jam ke depan. Nguyen beralasan bahwa sebenarnya game ini dibuat untuk kegiatan bersantai para pemainnya. Nguyen tidak bermaksud membuat Flappy Bird menjadi permainan yang adiktif. Nah, pada saat tujuannya melenceng, Nguyen memutuskan untuk menarik Flappy Bird.


Cara membuat Flappy Bird pada HTML5


 Flappy Bird merupakan game kecil yang bagus dengan mudah untuk memahami mekanika, dan saya pikir ini akan menjadi cocok untuk HTML5 permainan tutorial. Jadi kita akan membuat versi sederhana dari Flappy Bird, hanya 65 baris Javascript dengan kerangka Phaser.
Catatan: tutorial ini awalnya untuk Phaser 1.1, namun baru-baru ini diperbarui untuk Phaser 2.0.

Set Up

Anda harus men-download template yang kosong ini yang saya buat untuk tutorial ini. Di dalamnya Anda akan menemukan:
  • phaser.min.js, Phaser kerangka v2.0.5
  • index.html, di mana pertandingan akan ditampilkan
  • main.js, file mana kita akan menulis semua kode kita
  • Aset /, direktori dengan 2 gambar (bird.png dan pipe.png)

Anda juga harus men-download kurung code editor, yang akan membuat hidup kita lebih mudah untuk mengatur webserver.

 

Project kosong

Dalam file index.html kita menambahkan kode sederhana ini:
<!DOCTYPE html>

<html>



<head>

    <meta charset="utf-8" />

    <title> Flappy Bird Clone </title>



    <script type="text/javascript" src="phaser.min.js"></script>

    <script type="text/javascript" src="main.js"></script>

</head>
<body>



    <p> Press the spacebar to jump </p>

    <div id="gameDiv"> </div>
</body>

</html>  
Ini akan memuat semua file Javascript yang diperlukan, dan menambahkan "gameDiv" elemen di mana permainan kami akan ditampilkan.
Dalam file main.js kita harus menambahkan ini, yang akan membuat proyek Phaser kosong:
// Initialize Phaser, and create a 400x490px game

var game = new Phaser.Game(400, 490, Phaser.AUTO, 'gameDiv');
// Create our 'main' state that will contain the game

var mainState = {
    preload: function() { 

        // This function will be executed at the beginning

        // That's where we load the game's assets

    },
    create: function() {

        // This function is called after the preload function

        // Here we set up the game, display sprites, etc.

    },



    update: function() {

        // This function is called 60 times per second

        // It contains the game's logic   
    },
};



// Add and start the 'main' state to start the game

game.state.add('main', mainState);

game.state.start('main');
Kita akan mengisi preload(), create() dan update() fungsi, dan menambahkan beberapa fungsi baru untuk membuat permainan bekerja.

Burung

Mari kita fokus pertama pada menambahkan burung untuk game yang dapat dikendalikan dengan tombol spasi.
Semuanya cukup sederhana dan baik berkomentar, sehingga Anda harus dapat memahami dengan mudah kode di bawah ini. Untuk pembacaan yang lebih baik, saya dihapus inisialisasi Phaser dan menyatakan kode manajemen yang dapat Anda lihat di atas.
Pertama kita memperbarui preload(), create() dan update() fungsi
preload: function() {

    // Change the background color of the game

    game.stage.backgroundColor = '#71c5cf';



    // Load the bird sprite

    game.load.image('bird', 'assets/bird.png'); 
},



create: function() {

     // Set the physics system

     game.physics.startSystem(Phaser.Physics.ARCADE);
     // Display the bird on the screen

     this.bird = this.game.add.sprite(100, 245, 'bird');
     // Add gravity to the bird to make it fall

    game.physics.arcade.enable(this.bird);

    this.bird.body.gravity.y = 1000;
     // Call the 'jump' function when the spacekey is hit

     var spaceKey = this.game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);

     spaceKey.onDown.add(this.jump, this);

},
update: function() {  

      // If the bird is out of the world (too high or too low), call the 'restartGame' function

      if (this.bird.inWorld == false)

          this.restartGame();

},

Dan tepat di bawah ini, kami menambahkan dua fungsi baru ini:
// Make the bird jump
jump:
function() {
   
// Add a vertical velocity to the bird
   
this.bird.body.velocity.y = -350;
},
// Restart the game
restartGame:
function() {
   
// Start the 'main' state, which restarts the game
    game.state.start(
'main');
},

Testing

Sekarang saatnya untuk menguji permainan kita. Buka file index.html dengan editor kurung, kemudian klik pada ikon kecil di sudut kanan atas:


Tanda itu akan meluncurkan live preview dari permainan, di mana Anda harus memiliki burung melompat saat Anda menekan tombol spasi.
Jika Anda tidak ingin menggunakan kurung, maka Anda akan harus menggunakan webserver lokal untuk menguji permainan.

Pipa

Sebuah permainan Flappy Bird tanpa pipa tidak benar-benar menarik, jadi mari kita mengubah itu.
Pertama, kita akan memuat sprite pipa dengan preload() fungsi.
game.load.image('pipe', 'assets/pipe.png');  
Karena kita akan menangani banyak pipa dalam permainan, lebih mudah untuk menggunakan fitur Phaser disebut 'kelompok'. Kelompok ini akan berisi 20 pipa yang akan kita dapat menggunakan seperti yang kita inginkan. Jadi kita tambahkan di create() fungsi.
this.pipes = game.add.group(); // Create a group  

this.pipes.enableBody = true;  // Add physics to the group  

this.pipes.createMultiple(20, 'pipe'); // Create 20 pipes  
Sekarang kita perlu fungsi baru untuk menambah pipa dalam permainan. Secara default, semua pipa yang terdapat dalam kelompok yang mati dan tidak ditampilkan. Jadi kita memilih pipa mati, menampilkannya, dan pastikan untuk secara otomatis membunuhnya ketika itu tidak lagi terlihat. Dengan cara ini kita tidak pernah kehabisan pipa.

addOnePipe: function(x, y) {

    // Get the first dead pipe of our group

    var pipe = this.pipes.getFirstDead();
    // Set the new position of the pipe

    pipe.reset(x, y);
    // Add velocity to the pipe to make it move left

    pipe.body.velocity.x = -200;
    // Kill the pipe when it's no longer visible

    pipe.checkWorldBounds = true;

    pipe.outOfBoundsKill = true;

},
Fungsi sebelumnya menampilkan satu pipa, tetapi kita perlu menampilkan 6 pipa berturut-turut dengan lubang di suatu tempat di tengah. Jadi mari kita membuat fungsi baru yang tidak hanya itu.


addRowOfPipes: function() {

    // Pick where the hole will be

    var hole = Math.floor(Math.random() * 5) + 1;
    // Add the 6 pipes

    for (var i = 0; i < 8; i++)

        if (i != hole && i != hole + 1)

            this.addOnePipe(400, i * 60 + 10);   

},
Untuk benar-benar menambahkan pipa dalam permainan, kita perlu memanggil fungsi addRowOfPipes()setiap 1.5 detik. Kita dapat melakukan ini dengan menambahkan timer di create() fungsi.
this.timer = game.time.events.loop(1500, this.addRowOfPipes, this);  

Sekarang Anda dapat menyimpan file Anda dan menguji kode. Hal ini perlahan-lahan mulai terlihat seperti permainan nyata.

 

Scoring dan Tabrakan

Hal terakhir yang kita butuhkan untuk menyelesaikan permainan ini menambahkan skor dan penanganan tabrakan. Dan ini cukup mudah dilakukan.
Kita tambahkan create() fungsi untuk menampilkan lebel skor di pojok kiri atas.

this.score = 0;

this.labelScore = game.add.text(20, 20, "0", { font: "30px Arial", fill: "#ffffff" });  
dan tempatkan ini addRowOfPipes(),untuk meningkatkan skor dengan 1 setiap kali pipa baru diciptakan.
this.score += 1;

this.labelScore.text = this.score;  
Selanjutnya, kita tambahkan baris ini di update() fungsi untuk memanggil restartGame() setiap kali burung bertabrakan dengan pipa.
game.physics.arcade.overlap(this.bird, this.pipes, this.restartGame, null, this);
Dalam HTML5 tutorial terakhir kita lakukan sederhana clone Flappy Bird. Itu bagus, tapi cukup membosankan untuk bermain. Kita akan melihat di posting ini cara menambahkan animasi dan suara untuk clone Flappy Bird kami. Ini tidak akan mengubah mekanisme permainan, tapi permainan akan merasa jauh lebih menarik.

Set Up

Buka file main.js, dan mari kita mulai coding!Add Fly Animation

Burung itu bergerak naik dan turun dengan cara yang sangat membosankan. Mari kita memperbaiki ini dengan menambahkan beberapa animasi, dan membuatnya bergerak seperti dalam game asli:
1.      Selalu perlahan memutar burung ke bawah, sampai titik tertentu.
2.     Ketika burung melompat, putar ke atas.
Yang pertama adalah mudah. Kita hanya perlu menambahkan ini di  update() fungsi.

if (this.bird.angle < 20)

    this.bird.angle += 1;

Untuk yang kedua, kita hanya bisa menambahkan this.bird.angle = -20; kedalam jump() fungsi. Namun, mengubah langsung sudut akan terlihat aneh. Sebaliknya, kita akan membuat perubahan burung sudut itu selama periode waktu yang singkat. Kita bisa melakukannya dengan menciptakan animasi di jump()fungsi.

// Create an animation on the bird

var animation = game.add.tween(this.bird);
// Set the animation to change the angle of the sprite to -20° in 100 milliseconds

animation.to({angle: -20}, 100);
// And start the animation

animation.start();  
Sekadar informasi, kode sebelumnya dapat ditulis dalam satu baris kode seperti ini..
game.add.tween(this.bird).to({angle: -20}, 100).start();  
Jika Anda menguji permainan sekarang, Anda akan melihat bahwa burung itu tidak berputar seperti aslinya Flappy Bird. Ini berputar seperti gambar di sebelah kiri, dan kami ingin terlihat seperti yang ada di sebelah kanan.



Apa yang perlu kita lakukan adalah mengubah pusat rotasi burung, yang disebut "jangkar". Jadi kita tambahkan baris kode ini di create() fungsi.
this.bird.anchor.setTo(-0.2, 0.5);  

Jika Anda menguji permainan sekarang, animasi akan terlihat jauh lebih baik.

 

Menambahkan Dead Animation

Ketika burung mati, kita restart permainan segera. Sebaliknya, kita akan membuat burung jatuh dari layar sebagai animasi mati.
Pertama, kami memperbarui baris kode ini di update() fungsi untuk memanggil hitPipe() dari pada restartGame() ketika burung menghantam pipa.
game.physics.arcade.overlap(this.bird, this.pipes, this.hitPipe, null, this);  
Sekarang kita buat baru fungsi hitPipe() 
hitPipe: function() {

    // If the bird has already hit a pipe, we have nothing to do

    if (this.bird.alive == false)

        return;
    // Set the alive property of the bird to false

    this.bird.alive = false;
    // Prevent new pipes from appearing

    game.time.events.remove(this.timer);
    // Go through all the pipes, and stop their movement

    this.pipes.forEachAlive(function(p){

        p.body.velocity.x = 0;

    }, this);
},
Hal terakhir, kita tidak ingin untuk dapat membuat lompatan burung saat itu sudah mati. Jadi kita mengubah fungsi jump() dengan menambahkan ini dua baris di awal.
if (this.bird.alive == false)

return; 

Dan kita selesai menambahkan animasi.

 

Menambahkan suara

Menambahkan suara super mudah dengan Phaser.
Kita mulai dengan memuat suara melompat di fungsi preload() 
game.load.audio('jump', 'assets/jump.wav');  
Sekarang kita tambahkan suara dalam permainan dengan menempatkan ini pada fungsi create()
this.jumpSound = game.add.audio('jump');  
Hal terakhir, kita tambahkan baris ini dalam lompat () fungsi untuk benar-benar memutar suara melompat.
this.jumpSound.play();  
Dan itulah, kita sekarang memiliki animasi dan suara dalam permainan!
Sedangkan fungsi AI (Artificial Intelligence) pada game flappy bird ini adalah  melatih kesabaran, ketangkasan dalam melewati pipa dan dalam menjaga keseimbangan burung agar tidak jatuh karna tidak ada life point pada game ini.
refrensi :
http://blog.lessmilk.com/how-to-make-flappy-bird-in-html5-1/

About the author

Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus. Aenean fermentum, eget tincidunt.

1 komentar:

Unknown mengatakan...

Hasil copy paste bang??? http://www.lessmilk.com/tutorial/flappy-bird-phaser-1

matrix