Minggu, 14 Juli 2019

Membuat Game Flash Classic


Game “Galaxyan” adalah game tembak-tembakan luar angkasa classic dimana pemain mengendalikan sebuah pesawat dan menembak beberapa baris musuh. Adapaun cara pembuatan game ini adalah sebagai berikut.
1.    Buka aplikasi flash (boleh pakai macromedia flash 8, adobe flash ataupun editor flash lainnya), nah disini saya memakai adobe flash cs6.
2.      Buatlah sebuah file baru AS3, dengan ukuran stage 480x800 pixel dan 30 fps.
3.    Kemudian buatlah sebuah kotak menutupi stage dengan warna gradasi, yang akan dijadikan sebagai background permainan. Seleksi kotak tersebut kemudian convert menjadi MovieClip "bg".

4.    Selanjutnya buatlah gambar pesawat (import bitmap pesawat), kemudian convert menjadi movieclip plane(Lihat gambar). Jika anda menggunakan bitmap, maka file yang direkomendasikan untuk digunakan sebagai asset game adalah file bertipe PNG atau GIF karena mendukung mode transparant. Untuk mengimport bitmap anda dapat memilih menu FILE > IMPORT > IMPORT TO STAGE.
5.    Selanjutnya buatlah gambar kotak berwarna hijau yang akan kita gunakan sebagai amunisi pesawat, kemudian convert menjadi movie clip bullet.
6.  Untuk membuat musuh, buatlah sebuah gambar pesawat musuh (dengan ukuran 25 x 25 pixel) kemudian convert menjadi movieclip enemy1. Edit movieclip tersebut (double click), kemudian tambahkan blank keyframe pada frame 9 dan buatlah gambar pesawat musuh dengan gerakan yang berbeda. Hal ini dimaksudkan untuk membuat animasi sederhana pada pesawat musuh. Selanjutnya klik frame 18 dan tambahkan frame untuk memberikan durasi pada animasi pesawat musuh tersebut.
7.      Dengan cara yang sama, buatlah beberapa variasi musuh. Disini saya membuat 3 variasi musuh. Jika kalian malas/bingung untuk membuat variasi musuh, kalian dapat mengcopy paste 1 musuh yang tadi dibuat lalu mengubah warnanya saja.
8.     Seleksi seluruh object yang ada di stage dan hapus dari layar (tekan delete). Hal ini dimaksudkan agar layar bersih dari semua object dan penataan object nantinya dilakukan sepenuhnya oleh kode.
9.   Agar movieclip (asset game) yang telah dibuat dapat dipanggil oleh kode, maka masing-masing movieclip perlu ditambahkan linkage. Untuk melakukannya buka panel Library (Ctrl+L), kemudian klik kanan movieclip planedan pilih opsi Properties.
10.  Pada panel properties,centang opsi Export for Actionscript dan pastikan pada kolom Class terisi dengan nama plane. Klik OK.
11.  Dengan cara yang sama, tambahkan linkage,untuk movieclip bullet, bg, enemy 1, enemy 2 dan enemy 3.
12.  Setelah asset siap, klik frame 1 layer 1. Buka panel Action(F9), dan tuliskan kode berikut
import flash.events.Event;
import flash.events.KeyboardEvent;

var game:MovieClip;
var i:Number = 0;
var j:Number = 0;
var screen_w:Number = 800;
var screen_h:Number = 480;

var is_left:Boolean = false;
var is_right:Boolean = false;
var is_space:Boolean = false;

var ammo:MovieClip;
var ammo_ready:Boolean = true;
var my_plane:plane;
var game_bg:bg;

function rand(n:Number):Number{
            var hasil:Number = Math.floor(Math.random()*n);
            return hasil;
}

function key_down(e:KeyboardEvent):void{
            if (e.keyCode == 37) is_left = true;
            if (e.keyCode == 39) is_right = true;
            if (e.keyCode == 32) is_space = true;
}

function key_up(e:KeyboardEvent):void{
            if (e.keyCode == 37) is_left = false;
            if (e.keyCode == 39) is_right = false;
            if (e.keyCode == 32) is_space = false;
}

function move_plane(e:Event):void{
            if (is_left && my_plane.x > 25) my_plane.x -= 5;
            if (is_right && my_plane.x < screen_w - 25) my_plane.x += 5;
            if (ammo_ready && is_space){
                        ammo.x = my_plane.x;
                        ammo.y = my_plane.y-20;
                        ammo_ready = false;
            }
}

function move_enemy(e:Event):void{
            var ob:Object = e.currentTarget;
            if (ob.hitTestObject(ammo)) {
                        ammo_ready = true;
                        ob.parent.removeChild(ob);
                        ammo.y = -200;
            }
}

function move_enemy_row(e:Event):void{
            var ob:Object = e.currentTarget;
            if (rand(100) == 34 && ob.x<150) {
                        ob.x += 10;
            }
            if (rand(100) == 54 && ob.x>25) {
                        ob.x -= 10;
            }
}


function move_ammo(e:Event):void{
            var ob:Object = e.currentTarget;
            if (!ammo_ready){
                        ob.y-=10;
                        if (ob.y < 0){
                                    ammo_ready = true;
                                    ob.y = -200;
                        }
            }
}
function draw_level():void {
            game = new MovieClip();
            addChild(game);
            game_bg = new bg();
            game.addChild(game_bg);
            for (i=0; i<4; i++) {
                        var row:MovieClip = new MovieClip();
                        row.x = 120;
                        row.y = (5-i)*30;
                        game.addChild(row);
                        row.addEventListener(Event.ENTER_FRAME, move_enemy_row);                       
                        for (j=0; j<20; j++) {
                                    var enemy:MovieClip;
                                    if (i==1) {
                                                enemy = new enemy1();
                                    } else if (i==2){
                                                enemy = new enemy2();
                                    }else{
                                                enemy = new enemy3();
                                    }
                                    enemy.x = j*30;
                                    row.addChild(enemy);
                                    enemy.addEventListener(Event.ENTER_FRAME, move_enemy);                                    
                        }
            }
            ammo_ready = true;
            my_plane = new plane();
            my_plane.x = 400;
            my_plane.y = screen_h-50;
            my_plane.addEventListener(Event.ENTER_FRAME, move_plane);
            game.addChild(my_plane);
            //amo
            ammo = new bullet();
            ammo.y = -200;
            ammo.addEventListener(Event.ENTER_FRAME, move_ammo);
            game.addChild(ammo);
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down);
stage.addEventListener(KeyboardEvent.KEY_UP, key_up);
draw_level();
13.  Jalankan aplikasi dengan menekan tombol Ctrl+Enter, maka hasil dari tutorial ini adalah sebagai berikut:
14.  Game ini memiliki susunan permainan yang cukup sederhana, meliputi pesawat pemain, amunisi, dan beberapa variasi musuh yang memiliki gerakan sederhana.
15.  Cara bermainnya yaitu dengan cara menekan tombol kiri dan kanan pada keyboard dan menekan spasi untuk mengeluarkan pelurunya/menembaknya.       


Tidak ada komentar:

Posting Komentar