Jadual Kandungan
Persediaan PixiJS dengan Vite dan TypeScript
En. Linxed ・ 20 Apr
Mencapai lebih banyak lagi dengan "Cult of Done"
En. Linxed ・ 18 Feb
Rumah hujung hadapan web tutorial js Space Defender - bahagian Permainan States

Space Defender - bahagian Permainan States

Jul 21, 2024 am 08:36 AM

Dalam siaran sebelumnya, kami telah menggunakan HUD dan kini permainan kami pada dasarnya telah selesai, tetapi ia kehilangan beberapa perkara. Kita perlu menambah permainan di atas skrin dengan cara untuk memulakan semula permainan. Kami juga ingin menambah skrin semasa anda baru memulakan permainan, bukannya hanya memulakan permainan dengan segera.

Negeri Permainan

Kami akan menambah beberapa keadaan permainan pada permainan kami. Kami akan mempunyai gameState enum yang akan memegang keadaan permainan yang berbeza. Kami juga akan mempunyai pembolehubah yang mengekalkan keadaan semasa permainan.

Tambahkan kod berikut tepat pada permulaan fail main.ts anda:

enum gameStates {
    "PLAYING",
    "PAUSED",
    "GAME_OVER"
}
let gameState = gameStates.PAUSED;
Salin selepas log masuk

Kod ini mencipta enum yang dipanggil gameStates yang memegang keadaan permainan yang berbeza. Kami kemudian mencipta pembolehubah yang dipanggil gameState yang memegang keadaan semasa permainan. Kami menetapkan keadaan awal kepada DIJADA.

Sebelum kami melakukan apa-apa dengan keadaan ini, kami memerlukan fungsi tetapan semula. Fungsi ini akan dipanggil sejurus sebelum kita memulakan permainan. Tambahkan kod berikut pada bahagian bawah fail main.ts anda:

function resetGame() {
    lives = 3;
    level = 1;
    score = 0;
    setHudValue("gameLives", lives);
    setHudValue("gameLevel", level);
    setHudValue("gameScore", score);
    Player.x = app.screen.width / 2 - Player.width / 2;
    Player.y = app.screen.height - 50;
    bullets.forEach(bullet => app.stage.removeChild(bullet));
    enemies.forEach(enemy => app.stage.removeChild(enemy));
    bullets.length = 0;
    enemies.length = 0;
    setEnemySpawnInterval();
    spawnEnemy();
}
Salin selepas log masuk

Ini akan menetapkan semua nilai kepada nilai permulaan awalnya, mengosongkan peluru dan musuh dari pentas dan tatasusunan, menetapkan semula kedudukan pemain dan menetapkan selang peneluran musuh. Kemudian mulakan permainan dengan melahirkan musuh.

Sekarang sudah ditetapkan, mari tambahkan cara untuk memulakan permainan.

Memulakan permainan

Kami akan menambah KeyHandler baharu untuk itu. Tambah kod berikut sejurus selepas tempat kami menentukan KeyHandler untuk kekunci anak panah kiri dan kanan:

KeyHandler(
    "Enter",
    () => {
        if(gameState !== gameStates.PLAYING) {
            if(gameState === gameStates.GAME_OVER) {
                resetGame();
            }
            gameState = gameStates.PLAYING;
            togglePauseText();
        }
    }
);
Salin selepas log masuk

Kod ini akan memulakan permainan apabila pemain menekan kekunci Enter. Jika permainan tidak berada dalam keadaan BERMAIN, ia akan menetapkan keadaan permainan kepada BERMAIN. Jika permainan berada dalam keadaan GAME_OVER, ia akan menetapkan semula permainan dan kemudian menetapkan keadaan permainan kepada MAIN.

Tetapi pemain tidak akan mengetahui perkara ini, jadi kami memerlukan beberapa teks untuk memberitahu pemain apa yang perlu dilakukan. Tambahkan kod berikut sejurus selepas tempat kami mentakrifkan KeyHandlers

// A simple text style, 24px white text
const textsStyle = {
    fontSize: 24,
    fill: 0xFFFFFF
};

let startGameText = new PIXI.Text({
    text: 'Press enter to start the game',
    style: textsStyle
});

startGameText.y = 250;

function togglePauseText() {
    if(gameState === gameStates.PAUSED || gameState === gameStates.GAME_OVER) {
        // Since the text can change, we need to reposition it.
        startGameText.x = app.screen.width / 2 - startGameText.width / 2;
        app.stage.addChild(startGameText);
    } else {
        app.stage.removeChild(startGameText);
    }
}
togglePauseText();
Salin selepas log masuk

Kod ini mencipta objek teks baharu yang menyatakan "Tekan enter untuk memulakan permainan" dan meletakkannya di tengah-tengah skrin. Ia kemudian mencipta fungsi yang dipanggil togglePauseText yang akan menunjukkan atau menyembunyikan teks berdasarkan keadaan permainan semasa. Ia kemudian memanggil fungsi ini untuk menunjukkan teks apabila permainan dijeda atau tamat.

Sekarang, kami juga ingin menjeda permainan.

Menjeda permainan

Tambahkan kod berikut sejurus selepas tempat kami menentukan KeyHandler untuk kekunci anak panah kiri dan kanan:

KeyHandler(
    "Escape",
    () => {
        if(gameState !== gameStates.PAUSED) {
            gameState = gameStates.PAUSED;
            startGameText.text = 'Press enter to resume the game';
            togglePauseText();
        }
    }
);
Salin selepas log masuk

Dalam kod ini kami akan menetapkan keadaan permainan kepada DIJADA apabila pemain menekan kekunci Escape. Kami juga akan menggunakan semula objek startGameText dan menetapkan teks kepada "Tekan enter untuk menyambung semula permainan".

Menggunakan keadaan permainan

Bagus, sekarang kita boleh bertukar-tukar antara keadaan MAIN dan DIJEDA, mari kita gunakan keadaan ini dan biarkan permainan bertindak sewajarnya.

Jika kami tidak berada dalam keadaan BERMAIN, kami tidak mahu menetapkan PlayerSpeed ​​apabila pemain menekan kekunci anak panah kiri atau kanan. Tambahkan kod berikut ke dalam KeyHandlers di mana kami menetapkan playerSpeedX kepada 500 atau -500 untuk kekunci anak panah kiri dan kanan:

if (gameState !== gameStates.PLAYING) {
    return;
}
Salin selepas log masuk

Juga tambah kod di atas ke dalam pengendali untuk bar ruang KeyHandler, supaya pemain tidak boleh menembak apabila permainan dijeda atau tamat.

Seterusnya, kemas kini pernyataan if dalam fungsi spawnEnemy untuk kelihatan seperti ini:

if(!document.hasFocus() || gameState !== gameStates.PLAYING) {
    return;
}
Salin selepas log masuk

Dan akhirnya, keseluruhan gelung permainan tidak perlu menyala jika kita dijeda, tambahkan kod berikut tepat pada permulaan gelung permainan:

if(gameState !== gameStates.PLAYING) {
    return;
}
Salin selepas log masuk

Tamat Permainan

Sekarang kita mempunyai cara untuk memulakan dan menjeda permainan, mari tambahkan permainan di atas skrin.

Sekarang kami mempunyai console.log("Game Over"), kami mahu menetapkan keadaan permainan kepada GAME_OVER dan menunjukkan permainan atas teks. Gantikan console.log dengan kod berikut:

gameState = gameStates.GAME_OVER;
startGameText.text = 'Press enter to restart the game';
scoreText.text = `Score: ${score}`;
scoreText.x = app.screen.width / 2 - scoreText.width / 2;
app.stage.addChild(gameOverText);
togglePauseText();
app.stage.addChild(scoreText);
Salin selepas log masuk

Kod ini menggunakan dua lagi objek teks yang belum kami buat, mari lakukannya.

Sejurus selepas kami mencipta objek startGameText, tambahkan kod berikut:

let gameOverText = new PIXI.Text({
    text: 'GAME OVER',
    style: textsStyle
});

gameOverText.x = app.screen.width / 2 - gameOverText.width / 2;
gameOverText.y = 200;

let scoreText = new PIXI.Text({
    text: 'Score: 0',
    style: textsStyle
});

scoreText.y = 300;
Salin selepas log masuk

Sekarang, kita sepatutnya boleh bermain permainan, jeda dan mulakan semula apabila kita kalah.

Kesimpulan

Dan itu sahaja! Anda kini boleh bermain permainan itu, menjedanya dan memulakannya semula apabila anda kalah.

Saya sedar bahawa bahagian terakhir ini mungkin agak menggembirakan, tetapi saya harap anda berjaya mengikuti dan memahami segala-galanya, jangan lupa anda sentiasa boleh menyemak kod sumber penuh. Jika anda mempunyai sebarang soalan atau maklum balas, sila hubungi saya di X atau tinggalkan komen di bawah


Dan ini adalah bahagian akhir siri kecil ini, saya harap anda menikmatinya dan mempelajari sesuatu yang baharu. Satu perkara kecil yang saya ingin nyatakan semasa meninggalkan anda dengan ini, ialah ini adalah permainan yang sangat asas, dan terdapat banyak cara untuk memperbaikinya. Anda boleh menambah lebih banyak musuh, peningkatan kuasa, tahap yang berbeza dan sebagainya. Saya menggalakkan anda untuk mencuba dan mencuba perkara baharu, begitulah cara anda belajar dan berkembang sebagai pembangun.

Selain itu, cara permainan ini distrukturkan bukanlah cara terbaik untuk menstruktur permainan, tetapi untuk tujuan tutorial ini, saya ingin memastikannya ringkas dan dalam satu fail. Dalam tutorial akan datang, saya mungkin menunjukkan kepada anda cara menstruktur permainan dengan cara yang lebih berskala.

Terima kasih kerana membaca sepanjang tutorial ini!



Jangan lupa untuk mendaftar ke surat berita saya untuk menjadi orang pertama yang mengetahui tentang tutorial yang serupa dengan ini.

Atas ialah kandungan terperinci Space Defender - bahagian Permainan States. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1671
14
Tutorial PHP
1276
29
Tutorial C#
1256
24
Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

JavaScript dan Web: Fungsi teras dan kes penggunaan JavaScript dan Web: Fungsi teras dan kes penggunaan Apr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

JavaScript in Action: Contoh dan projek dunia nyata JavaScript in Action: Contoh dan projek dunia nyata Apr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami Enjin JavaScript: Butiran Pelaksanaan Memahami Enjin JavaScript: Butiran Pelaksanaan Apr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs JavaScript: Persekitaran dan Alat Pembangunan Python vs JavaScript: Persekitaran dan Alat Pembangunan Apr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

Peranan C/C dalam JavaScript Jurubah dan Penyusun Peranan C/C dalam JavaScript Jurubah dan Penyusun Apr 20, 2025 am 12:01 AM

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

See all articles