javascript - 仅在 X 轴上在 Canvas 上移动图像

标签 javascript html canvas

问题

我发现很难理解这个问题,我尝试仅使用鼠标沿 X 轴移动图像。我发现甚至移动图像都很难,而且我看过的许多教程并没有真正帮助我。我想说的是:

enter image description here

正如您在上面美丽的图片中看到的,我只想让图像在页面底部左右移动。

代码和问题

这是我的第一次尝试,当我尝试此操作时, Canvas 上加载的所有图像不再出现,这让我很难理解为什么它不起作用。

<script type="text/javascript">

    //Referencing the canvas
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    var width = canvas.getAttribute('width');
    var height = canvas.getAttribute('height');

    //Images
    var bggameImage = new Image();
    var playerImage = new Image();
    var enemyImage = new Image();
    var projectileImage = new Image();
    var livesImage = new Image();

    //Canvas dimensions
    var width = 480;
    var height = 320;

    //Loading in the backgroundImage
    bggameImage.src = "Images/bggameImage.png";
    bggameImage.onload = function(){
        context.drawImage(bggameImage, 0, 0);
    }

    //Loading in the playerImage
    playerImage.src = "Images/playerImage.png";
    playerImage.onload = function(){
        context.drawImage(playerImage, 165, 240);
    }

    //Loading in the projectileImage
    projectileImage.src = "Images/projectileImage.png";
    projectileImage.onload = function(){
        context.drawImage(projectileImage, 65, 240);
    }

    var playerImage = {
            x:176,
            y:74,
    }

    function init() {

        playerImage.src = "Images/playerImage.png";

        //Moving player
        myCanvas.addEventListener("mousemove", function (e) {
            var bounding_box = myCanvas.getBoundingClientRect();
            playerImage = (e.clientX - bounding_box.left) * (myCanvas.width / bounding_box.width) - playerImage.width / 2;
            playerImage = (e.clientY - bounding_box.top) * (myCanvas.height / bounding_box.height) - playerImage.height / 2;
        }       
    )
</script>

整个“function init()”部分是我刚刚尝试过的,但我想无论如何我都会包含它,我知道我在playerImage中加载了两次。

最佳答案

您两次使用相同的变量名称 (playerImage),因此您的图像将被覆盖。您将它用于图像并存储位置。将存储 x 和 y 的playerImage 更改为playerPosition 或类似的内容。在鼠标事件上更新该变量,然后根据该变量的值渲染图像。

最终,您将必须使用 setTimeout 或 requestAnimationFrame 查看游戏循环。因此,这在那个阶段将变得至关重要。是的,您也不应该加载玩家图像两次。在开始时执行所有这些操作,并且仅在所有资源成功加载后才开始游戏。

例如...

        var playerImage;
        var alienImage;
        var bulletImage;
        var assetCount = 0;

        function loadAssets() {
            playerImage = new Image();
            playerImage.onload = checkAssetsLoaded;
            playerImage.src = "assets/images/Brush01.png";

            alienImage = new Image();
            alienImage.onload = checkAssetsLoaded;
            alienImage.src = "assets/images/Brush02.png";

            bulletImage = new Image();
            bulletImage.onload = checkAssetsLoaded;
            bulletImage.src = "assets/images/Brush03.png";
        }

        function checkAssetsLoaded(event) {
            assetCount++;
            console.log("An asset has loaded!: " + assetCount);
            if (assetCount == 3) {
                startGame();
            }
        }

        function startGame() {
            // Start your game initialization logic here.
            console.log("Game starting!");
        }

关于javascript - 仅在 X 轴上在 Canvas 上移动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179411/

相关文章:

javascript - JS - canvas.toDataURL 失败

javascript - 在 JavaScript 中移动图像

javascript - 每当我点击元素外部时它应该关闭

javascript - 如何让按钮点击后转到页面的某个部分?

html - 如何使输入栏上覆盖一个图标响应,垂直居中它所在的形式?

html - HTML音频嵌入无法在Internet Explorer上运行

ios - 从主屏幕启动时 HTML5 IOS WebApp Canvas 不呈现

javascript - 在 SpriteStage 上使用 SpriteSheet 渲染的动画无法正确显示

javascript - 使用 Nightmare 屏幕截图选择器制作多个屏幕截图

javascript - 使用 jQuery load() 内容时无法使工具提示正常工作