Cara Membuat Sebuah Game Platfrom ~ Ivul varel

Cara Membuat Sebuah Game Platfrom




Sekarang ini mulai terlihat lebih seperti Super Mario.
Permainan Platform

Sebelumnya, kami melihat permainan melompat yang bekerja cukup banyak seperti permainan platform yang Mario kami sangat terbiasa. Dalam permainan platform penuh, banyak benar-benar masuk ke dalam desain tingkat. Yang rakasa harus kita tempatkan di sini untuk menantang para pemain. Bagaimana kita ingin para pemain untuk melompat jalan ke tingkat rahasia atau mendapatkan item yang tersembunyi.

Jika desain tingkat di balik permainan yang kurang, pemain pasti akan merasa bosan bermain game.

Di sini, saya akan menunjukkan cara untuk membuat desain tingkat yang sederhana, menggunakan koin, batu bata (platform) dan lift vertikal bergerak sebagai tiga komponen kunci dari permainan. Saya akui, ini adalah jelas tidak cukup, tapi teknik yang Anda pelajari di sini harus dapat mendorong Anda maju. Dengan ide dari lift vertikal, Anda dapat melanjutkan ke melakukan angkat horizontal bergerak juga.

Beberapa konsep kunci yang akan Anda temukan dalam tutorial ini adalah bagaimana membuat gulungan layar permainan sebagai karakter Anda bergerak, serta bagaimana menerapkan ide-ide desain Anda selama waktu desain, dan bukan pada saat runtime. Sejauh ini, kita sudah hampir selalu dihasilkan aset permainan dengan cepat oleh beberapa kesempatan acak. Jika Anda membuka file FLA, Anda akan melihat semua batu bata atau platform yang sudah ditata untuk Anda. Desain ini dilakukan pada saat desain.

Anda perlu melihat Tutorial 7 sebelum melanjutkan, karena aku tidak akan membahas konsep-konsep yang disorot sebelumnya pada.

Skenario permainan

Tooney rakasa hijau kecil sebelumnya telah naik air terjun, dan sekarang siap untuk mengumpulkan koin mengilat. Koin ini huyung ditempatkan pada platform, beberapa bergerak, dan Tooney harus melompat jalan di sekitar untuk mengumpulkan mereka semua.

Bantuan Tooney mengumpulkan koin sebanyak yang Anda bisa!

Detail permainan

Pemain mengontrol pergerakan Tooney dengan KIRI, KANAN kunci.
Tooney dapat dibuat untuk melompat dengan tombol spasi.
Setiap koin Tooney mengumpulkan mendapatkan dia 10 poin.
Jangan biarkan Tooney jatuh dari platform.
Download File Permainan

File yang Anda butuhkan untuk membuat game ini dapat didownload dari sini.

Langkah 1 - Mengelola file FLA Anda

library

Di perpustakaan, Anda akan melihat bahwa ada cukup banyak movieclips. Apa yang baru adalah Coin, VerticalLift dan Spidol movieclips. The Marker movieclip adalah movieklip khusus, karena itu tidak benar-benar aset permainan yang pemain bisa melihat. Sebaliknya, itu adalah movieklip digunakan pada saat desain untuk menandai awal dan titik akhir dari perilaku bergulir. Lebih pada nanti.



Para pemain movieklip ini mirip dengan apa yang Anda lihat dalam Tutorial 7. Ini memiliki movieklip hitAreaFloor sama di dalamnya untuk menandai daerah yang akan mendeteksi jika Tooney mendarat di batu bata.

player

Untuk penjelasan rinci tentang ini, silakan cek Tutorial 7 pertama.

Langkah 2 - Memulai permainan dalam GameController.as Anda

Mari kita lihat apa yang terjadi di dalam fungsi startGame.


public function startGame()
{
    playerScore = C.PLAYER_START_SCORE;
            
    gameObjects = new Array();
    bricks = new Array();
    coins = new Array();
    lifts = new Array();
    
    scrollSoFar = 0;
    moveX = 0;
    jump = false;
    
    setUpGame();
    
    //Add player on to stage
    player = new Player(C.PLAYER_START_X, C.PLAYER_START_Y);
    mcGameStage.addChild(player);
    
    //Hide Markers
    mcGameStage.mcStartMarker.visible = false;
    mcGameStage.mcEndMarker.visible = false; 
    
    mcGameStage.addEventListener(Event.ENTER_FRAME,update);
    
    //Handle event when this game is being preloaded
    addEventListener(Event.ADDED_TO_STAGE, gameAddedToStage ); 
    
    //Handle situations when this game is being run directly
    if (stage != null)
    {
        stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
        stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
    }
}


Anda mungkin mengamati bahwa kita memiliki banyak array di sini, masing-masing menyimpan jenis objek permainan. Apa yang paling menarik di sini adalah mungkin gameObjects. Ini adalah sebuah array yang akan kita gunakan untuk menggulir semua benda yang harus gulir nanti. Ini akan menyimpan campuran batu bata, lift, dll

Kita akan melihat pada baris 61 secara rinci segera. setUpGame adalah fungsi yang akan melihat semua objek permainan Anda ditempatkan di dalam mcGameStage dan kemudian mengurutkan mereka ke array yang tepat. Lebih pada nanti.

Baris 68 dan 69 ternyata milik visibilitas penanda off, sehingga pemain tidak akan melihat sama sekali. Tanda tersebut masih berguna kemudian ketika kita melakukan scrolling logika, tapi pemain tidak tidak perlu melihat mereka.

Langkah 3 - Penangan Kunci

Penangan kunci yang persis sama seperti yang di Tutorial 7. Keyboard input ke permainan akan menjadi kunci KIRI, KANAN dan spasi. Jangan ragu untuk menambahkan dukungan untuk tombol A dan D juga jika Anda inginkan.


private function keyDownHandler(evt:KeyboardEvent):void
{
    if (evt.keyCode == 37) //LEFT Key 
    {
        moveX = -1;
    }
    else if (evt.keyCode == 39) //RIGHT Key
    {
        moveX = 1;
    }
    
    if (evt.keyCode == 32) //Spacebar
    {
        jump = true;
    }
}

melompat hanyalah sebuah variabel boolean. Kami mengaturnya untuk menjadi kenyataan ketika pemain hits spasi.

Langkah 4 - setUpGame

Obyek permainan yang kami ditempatkan di dalam mcGameStage harus benar dianalisis dan dipahami oleh Game Controller. Jika tidak, pemain tidak akan dapat berinteraksi dengan mereka. Oleh karena itu, sekali permainan ini disebut untuk memulai, kita sebut fungsi setUpGame untuk menyelesaikan masalah.


private function setUpGame()
{
    //Loop through all items on stage
    for (var i=0; i< mcGameStage.numChildren; i++)
    {
        var currObject = mcGameStage.getChildAt(i);
        
        //Identify the bricks
        if (currObject is Brick)
        {
            bricks.push(currObject);
            gameObjects.push(currObject);
        }
        else if (currObject is Coin)
        {
            coins.push(currObject);
            gameObjects.push(currObject);
        }
        else if (currObject is VerticalLift)
        {
            lifts.push(currObject);
            gameObjects.push(currObject);
        }
    }
}


numChildren sejalan 123 menyimpan jumlah objek anak-anak dalam mcGameStage. Ketika kita tarik semua movieclips ke mcGameStage, mereka semua dianggap anak-anak mcGameStage. Jadi apa ini untuk loop dilakukan adalah untuk loop melalui semua anak.

Sejalan 128, kita melihat sintaks baru ini, currObject adalah Brick. Meskipun kita dapat mengatakan bahwa itu benar-benar adalah objek Brick, tetapi diketahui ke Flash hanya sebagai DisplayObject, pada dasarnya. Apa ini "adalah" sintaks dilakukan adalah untuk memeriksa apakah currObject adalah Brick kelas. Ia mengembalikan benar jika itu adalah, false jika sebaliknya.

Jika Brick, kita dorong ke batu bata array, serta gameObjects array.

Kami melakukan hal yang sama untuk koin, dan lift vertikal. Setelah kita selesai dengan fungsi ini setUpGame, array kita sudah benar menyimpan objek permainan masing-masing. Para gameObjects Array akan menyimpan semua benda permainan yang harus gulir ketika pemain bergerak.

Langkah 5 - Permainan The Loop - User Input

Kode untuk menangani input pengguna yang persis sama seperti yang di Tutorial 7. Tidak ada kode baru untuk membuat gerakan di sini bekerja. Silakan kepala ke Tutorial 7 jika Anda memerlukan bantuan.

Langkah 6 - Laga The Loop - Game Logic

Kami hanya akan menyoroti kode yang unik dalam tutorial ini dari sebelumnya. Anda dapat melihat bahwa ada montir permainan baru di sini, itu adalah lift vertikal. Pada awal permainan logika, kami memperbarui lift.


//******************
//Handle Game Logic
//******************
//Update lifts
for (var i=lifts.length - 1; i >= 0; i--)
{
    lifts[i].update();
}

Mari kita lihat apa yang terjadi di kelas VerticalLift.


public function update()
{
    this.y += this.dirY * C.VERTICAL_LIFT_SPEED;
    if ((this.y <= this.startPosY - C.VERTICAL_LIFT_MAX_DISTANCE) ||
        (this.y >= this.startPosY + C.VERTICAL_LIFT_MAX_DISTANCE))
    {
        this.dirY *= -1;
    }
}


Variabel Diry menunjukkan arah mana lift yang akan bergerak menuju. Kami Mulitply dengan kecepatan lift, dilambangkan dengan C.VERTICAL_LIFT_SPEED, dan memodifikasi posisi y sesuai. Baris 23 hingga 27 cek jika lift telah mencapai jarak itu maksimum yang harus melakukan perjalanan, dan jika demikian, flip arah sekitar dengan mengalikan Diry dengan -1.

Anda tidak perlu khawatir bagaimana membuat gerakan pemain jika pemain berdiri di lift. Ingat bahwa ada sebuah properti di kelas Pemain yang standingOn, dan yang menunjukkan platform pemain aktif. Selama update pemain, lokasinya akan diperbarui ke koordinat platform yang sesuai.

Sekarang mari kita kembali ke permainan logika dalam lingkaran permainan.


//Update Player
player.update();
    
//Check for collisions
if (player.isInAir() && player.isFalling())
{ 
    for (var i=bricks.length - 1; i >= 0; i--)
    {
        if (player.hitAreaFloor.hitTestObject(bricks[i]))
            {
                //Player landed on the brick
                player.hitFloor(bricks[i]);
            }
    }
 
    for (var i=lifts.length - 1; i >= 0; i--)
    {
        if (player.hitAreaFloor.hitTestObject(lifts[i]))
        {
            //Player landed on the lift
            player.hitFloor(lifts[i]);
        }
    }
}


Kode di sini adalah persis sama seperti sebelumnya, tapi kami menambahkan cek untuk tabrakan antara pemain dan Lift sekarang dari baris 188 sampai baris 195.

Kode ini tidak jauh berbeda sekalipun. Tetapi karena pemain sekarang dapat mendarat di kedua Brick, atau Lift, kita diubah fungsi hitFloor di kelas Pemain sedikit. Daripada mengunci apakah itu adalah Brick atau Angkat, kita menggunakan * untuk menunjukkan setiap kelas mungkin.

public function hitFloor(platform:*)
{
    this.inAir = false;
    this.standingOn = platform;
    this.y = platform.y;
}

Bagian berikutnya dalam fungsi update GameController yang memeriksa tabrakan pemain dan koin, yang sepele. Kami melakukan update biasa skor pemain dan menghapus koin.

Langkah 7 - Update Fungsi Player

Ada beberapa perubahan besar dalam fungsi update pemain yang perlu dicermati. Ingat bahwa permainan ini sekarang digulir, artinya ketika pemain bergerak, jendela akan bergulir sesuai. Kami hanya akan melihat bergulir dalam arah x, dan tidak dalam arah y.


public function update()
{
    //Move Horizontally
    if (this.speedX < 0)
    {
        //Check if player should move
        if (MovieClip(root).playerShouldMoveLeft())
        {
            this.x += this.speedX;
        }
        else
        {
            MovieClip(root).scrollGameObjects(-this.speedX);
        }
    }
    else if (this.speedX > 0)
    {
        //Check if player should move
        if (MovieClip(root).playerShouldMoveRight())
        {
            this.x += this.speedX;
        }
        else
        {
            MovieClip(root).scrollGameObjects(-this.speedX);
        }
    }

Anda dapat melihat bahwa dalam kode baru, gerakan dalam arah x tidak lagi modifikasi langsung berdasarkan SpeedX. Ini sebenarnya terkait dengan relatif kecepatan (argh. .. lebih Fisika?!?)

Untuk membuat pemain merasa bahwa permainan karakter Tooney bergerak ke kanan ketika pemain hits tombol KANAN, kita bisa hanya memindahkan posisi x Tooney oleh nilai positif. Namun, mempertimbangkan fakta bahwa kami juga dapat memindahkan segala sesuatu yang lain dalam arah x dengan nilai negatif. Ilusi masih tetap bahwa kita melihat gerakan pemain ke kanan.

Sejalan 35, kami melakukan pengecekan kembali ke GameController untuk melihat apakah pemain harus bergerak, atau jika objek permainan harus bergerak. Di sinilah penanda berguna. Mari kita kembali ke GameController sekarang.


public function playerShouldMoveLeft():Boolean
{
    return ((mcGameStage.mcStartMarker.x >= 0) ||
            (mcGameStage.mcEndMarker.x - player.x <= C.SCROLL_BOUND));
}


Telaah kode di atas yang menentukan apakah itu adalah pemain yang harus bergerak, yang bertentangan dengan fakta bahwa objek permainan harus bergulir.


scrollDiagram

Diagram ini di atas mencoba untuk menggambarkan siapa yang harus gulir. Pada dasarnya jika pemain bergerak menuju akhir layar di mana mcStartMarker atau mcEndMarker tersebut sudah di tepi, maka pemain harus bergerak secara fisik. Jika tidak, di mana ia telah pindah dari spidol yang cukup, semua objek permainan disimpan dalam gameObjects array yang akan bergulir bukan untuk menciptakan ilusi ini gerak.

Penanda bergerak serta ketika gameObjects lainnya gulir. Seluruh tujuan mereka dalam permainan ini adalah untuk menunjukkan bagian depan dan belakang tingkat seluruh permainan.

Ini mungkin adalah bagian yang paling sulit untuk memahami dalam tutorial ini. Luangkan waktu dan memeriksa kode secara rinci.

Game

Dan di sini Anda memilikinya ... permainan bekerja! Sebenarnya ada banyak mekanik lebih menarik kita bisa menambah permainan platform, seperti menambahkan platform horizontal bergerak, platform yang hilang ketika Anda mendarat pada mereka, monster bagi Anda untuk menginjak, dll

Download File Permainan

File yang Anda butuhkan untuk membuat game ini dapat didownload dari sini.

Cara Bermain

Tujuan: Kumpulkan semua koin tanpa membiarkan Tooney jatuh dari platform.

Kontrol: Tekan tombol KIRI dan KANAN untuk bergerak Tooney. Tekan spasi untuk melompat.

Sumber: http://azjor.blogspot.com/2013/06/cara-membuat-sebuah-game-platform.html#ixzz2aDO9Qy9C
Previous
Next Post »
Post a Comment
Thanks for your comment