0

我正在用 javascript 编写一个简单的游戏,我想知道处理玩家和世界对象之间碰撞的最佳方法是什么。

<script>

var isJumping = false;
var isFalling = false; 
var w = 1;
var recwidth = 400;
var recheight = 400;
var xpos = 50;
var ypos = 279;
window.onload = function() {
    var FPS = 30;
    var ground = new myObject();
    setInterval(function() {
        clear();
        draw();
        ground.draw(0, 325);
        ground.draw(125,325)
    },     1000/FPS);
};

function myObject(){ 
    this.draw = function drawground(groundx, groundy){
        var canvas = document.getElementById('canvas')
        var  context = canvas.getContext('2d');
        //context.fillRect(xpos,ypos,100,100);
        var img=new Image()
        img.src="ground.png"
        img.onload = function() { 
        context.drawImage(img,groundx,groundy)}

    }

};




function jump()
{
    var t=.1;
    isJumping=true;

    var jumpint= setInterval(function() {
        yup = 12*t-(5*t*t);
        ypos= ypos - yup;
        t = t + .1
        if(yup < 0)
        {
            isJumping = false;
            isFalling = true;
            clearInterval(jumpint);
            jumpint = 0;
            fall();
            return;
        }

    }, 20);

}

function fall()
{
    t=.10
    var fallint= setInterval(function() {
        ydown = (5*t*t);
        ypos= ypos + ydown;
        t = t + .1
        if(ypos > 275)
        {
            isFalling == false;
            clearInterval(fallint);
            fallint = 0;
            return;
        }

    }, 20);

}



function changex(x){
    xpos = xpos + (x);
    //clear();
    //draw();
}
function changey(y){
    ypos = ypos + (y);
    //clear();
    //draw();
}



function draw(){
    var canvas = document.getElementById('canvas')
    var  context = canvas.getContext('2d');

    var img=new Image()
    img.src="character.png"
    img.onload = function() { 
        context.drawImage(img,xpos,ypos)}

}

function clear(){
    var canvas = document.getElementById('canvas')
    var  context = canvas.getContext('2d');
    context.clearRect(0,0, canvas.width, canvas.height);
}


document.onkeydown = function(event) {
    var keyCode; 

    if(event == null)
    {
        keyCode = window.event.keyCode; 
    }
    else 
    {
         keyCode = event.keyCode; 
    }

    switch(keyCode)
    {
    // left 
    case 37:
        //left
        changex(-5);
        break; 

    // up 
    case 38:
        // action when pressing up key
        jump();
        break; 

    // right 
    case 39:
        // action when pressing right key
        changex(5);
        break; 

    // down
    case 40:
        // action when pressing down key
        changey(5);
        break; 

    default: 
        break; 
    } 
}
</script>

所以,正如你所看到的,到目前为止我正在创建两个对象,并且玩家在任意点停止下落。我觉得这个阶段的碰撞不会太难,但是一旦我开始添加更多,我觉得它会变得更加困难。我不会为对象的每个实例使用具有相同图像的对象实例,因此在某些时候我将更改 myobject 函数以能够接受图像作为参数,然后检查碰撞会有点棘手。我还计划把它做成一个横向滚动条,所以一旦地图的一端被击中,它就会变成下一个区域,这将导致性能问题。如果我在每个间隔检查整个游戏中每个对象的碰撞,我想事情会变慢。限制检查的碰撞次数的最佳方法是什么?显然,如果对象不在屏幕上,则无需检查它,但有没有办法限制它。我正在考虑为游戏的每一帧制作一个数组,并用它的对象填充该数组。然后,只检查玩家当前所在帧的数组。这是否可行或仍然会导致太多问题?任何帮助是极大的赞赏。这是可行的还是仍然会导致太多问题?任何帮助是极大的赞赏。这是可行的还是仍然会导致太多问题?任何帮助是极大的赞赏。

4

0 回答 0