<!DOCTYPE html>
<html>
<head>
    <title>Platformer Game Tutorial</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            background-color: #f4f4f4;
        }
        #game {
            width: 800px;
            height: 400px;
            margin: 0 auto;
            background-color: #ccc;
        }
    </style>
</head>
<body>
    <div id='game'></div>
    <script>
        // Create the canvas
        var canvas = document.createElement('canvas');
        var ctx = canvas.getContext('2d');
        canvas.width = 800;
        canvas.height = 400;
        document.getElementById('game').appendChild(canvas);
<pre><code>    // Background image
    var bgReady = false;
    var bgImage = new Image();
    bgImage.onload = function () {
        bgReady = true;
    };
    bgImage.src = 'images/background.png';

    // Hero image
    var heroReady = false;
    var heroImage = new Image();
    heroImage.onload = function () {
        heroReady = true;
    };
    heroImage.src = 'images/hero.png';

    // Monster image
    var monsterReady = false;
    var monsterImage = new Image();
    monsterImage.onload = function () {
        monsterReady = true;
    };
    monsterImage.src = 'images/monster.png';

    // Game objects
    var hero = {
        speed: 256 // movement in pixels per second
    };
    var monster = {};
    var monstersCaught = 0;

    // Handle keyboard controls
    var keysDown = {};

    addEventListener('keydown', function (e) {
        keysDown[e.keyCode] = true;
    }, false);

    addEventListener('keyup', function (e) {
        delete keysDown[e.keyCode];
    }, false);

    // Reset the game when the player catches a monster
    var reset = function () {
        hero.x = canvas.width / 2;
        hero.y = canvas.height / 2;

        // Throw the monster somewhere on the screen randomly
        monster.x = 32 + (Math.random() * (canvas.width - 64));
        monster.y = 32 + (Math.random() * (canvas.height - 64));
    };

    // Update game objects
    var update = function (modifier) {
        if (38 in keysDown) { // Player holding up
            hero.y -= hero.speed * modifier;
        }
        if (40 in keysDown) { // Player holding down
            hero.y += hero.speed * modifier;
        }
        if (37 in keysDown) { // Player holding left
            hero.x -= hero.speed * modifier;
        }
        if (39 in keysDown) { // Player holding right
            hero.x += hero.speed * modifier;
        }

        // Are they touching?
        if (
            hero.x &lt;= (monster.x + 32)
            &amp;&amp; monster.x &lt;= (hero.x + 32)
            &amp;&amp; hero.y &lt;= (monster.y + 32)
            &amp;&amp; monster.y &lt;= (hero.y + 32)
        ) {
            ++monstersCaught;
            reset();
        }
    };

    // Draw everything
    var render = function () {
        if (bgReady) {
            ctx.drawImage(bgImage, 0, 0);
        }

        if (heroReady) {
            ctx.drawImage(heroImage, hero.x, hero.y);
        }

        if (monsterReady) {
            ctx.drawImage(monsterImage, monster.x, monster.y);
        }

        // Score
        ctx.fillStyle = 'rgb(250, 250, 250)';
        ctx.font = '24px Helvetica';
        ctx.textAlign = 'left';
        ctx.textBaseline = 'top';
        ctx.fillText('Monsters caught: ' + monstersCaught, 32, 32);
    };

    // The main game loop
    var main = function () {
        var now = Date.now();
        var delta = now - then;

        update(delta / 1000);
        render();

        then = now;

        // Request to do this again ASAP
        requestAnimationFrame(main);
    };

    // Cross-browser support for requestAnimationFrame
    var w = window;
    requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;

    // Let's play this game!
    var then = Date.now();
    reset();
    main();
&lt;/script&gt;
</code></pre>
</body>
</html>
HTML Platform Game Tutorial: Create a Simple Platformer with JavaScript

原文地址: https://www.cveoy.top/t/topic/lnRk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录