繁体   English   中英

在 javascript 中制作赛车游戏。 尝试模拟迎面而来的汽车时,当其他汽车到达终点时,我无法创建更多汽车

[英]Making a racing game in javascript. When trying to simulate oncoming cars, I am not able to create more cars when the other cars have reached the end

我正在尝试制作一个赛车游戏,用户必须尽量避免迎面而来的汽车。 为了创建迎面而来的汽车,我创建了一个称为障碍物的 class。 此外,我有一个绘制障碍物的 function 并且在该 function 中,我有一个 if 语句,用于检查汽车是否已接近 ZFCC790C72A86190DE1B549D0DDC6F14Z 的底部,因此可以创建下一个 CZ35 障碍物。 但是,该程序似乎与创建新车不一致,有时甚至根本不起作用。 我应该如何解决这个问题? 先感谢您。 到目前为止,这是我的代码:

<body>
    <p><span id="val">here</span></p>
    <canvas width="400" height="500" id="myCanvas"></canvas>
    <script>
        "use strict"
        var a=document.getElementById("myCanvas");
        var c=a.getContext("2d");
        
        var obs=[];
        
        function randomNumber(){
            var rand=(Math.random()*400)+1;
            if(rand<400/3){return 50}
            else if(rand>400/3&&rand<400*2/3){return 180}
            else if(rand>rand<400*2/3){return 300}
        }
        
        class obstacles{
            constructor(x){
                this.x=x;
                this.y=-(Math.floor(Math.random()*300)+1);
            }
            
            show(){
                c.fillStyle="blue";
                c.beginPath();
                c.rect(this.x,this.y,40,70);
                c.fill();
                c.closePath();
            }
            
            move(){
                this.y+=3;
            }
        }
        createObstacles();
        function createObstacles(){
            var x;
            for(var i=0;i<3;i++){
                x=randomNumber();
                obs[i]=new obstacles(x);
            }
        }
        
        function draw(){
            c.clearRect(0,0,400,500);
            var x;
            for(var j=0;j<obs.length;j++){
                x=randomNumber();
                obs[j].show();
                obs[j].move();
            }
            for(var i=0;i<obs.length;i++){
                if(obs[i].y==350){
                    obs.push(new obstacles(x))
                }
            }
        }
        window.setInterval(draw,17);
        
    </script>
</body>

当你创建一个障碍物时,它会被赋予一个随机的 y position。 然后,每当它移动时,它的 y 在你的移动 function 中变化 3。 但是,当您 go 检查它是否已到达底部时,您只需检查 y 是否正好为 350: obs[i].y==350 完全有可能,考虑到障碍物的开始位置,在它的一次移动中,它移动了 3 个空格并完全跳过了 350 个空格。在这种情况下,您的代码将永远不会触发。

一个简单的解决方案是将您的==更改为>以便它检查 y 是否超过 350,而不仅仅是当它完全等于它时:

for(var i=0;i<obs.length;i++){
                if(obs[i].y>350){
                    obs.push(new obstacles(x))
                }
            }

希望这可以解决您的问题。 不过,我实际上并没有测试运行您的代码,因此可能还有其他错误。 祝你的项目好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM