簡體   English   中英

2D Processing.js游戲中的碰撞

[英]Collision in 2D Processingjs Game

我有使用ProcessingJS庫的Javascript代碼

 // Game var player = { x: 50, y: 100, width: 30, height: 30, speed: 10.5, score: 0 }; var food = { x: 200, y: 200, width: 30, height: 30, speed: 10.5 }; var up = 38; var down = 40; var left = 37; var right = 39; draw = function() { background(155, 154, 156); fill(0, 255, 85); rect(player.x,player.y,player.width,player.height); fill(245, 3, 3); rect(food.x,food.y,food.width,food.height); text('Score: ' + player.score,50,50); }; var collided = function(){ if (player.x < food.x + food.width && player.x + player.width > food.x && player.y < food.y + food.height && player.height + player.y > food.y) { return true; } else { return false; } }; keyPressed = function(){ switch(keyCode){ case up: player.y -= player.speed; break; case down: player.y += player.speed; break; case right: player.x += player.speed; break; case left: player.x -= player.speed; break; default: break; } if(collided()){ while(collided()){ if(/* condition */){ // Do What? }; } } }; 

我出於某種原因將對象命名為“食物”,所以請不要忘記這一點。 我正在嘗試使之與玩家與“食物”對象碰撞時的行為,就好像“食物”對象是固體對象並且無法通過它一樣(就像您正在嘗試的那樣)穿過一堵牆。)

我嘗試從玩家的X位置減去1,直到碰撞停止。 我移動了播放器使其與“食物”對象的側面碰撞,並且它起作用了。 但是,當我在對象的頂部或底部碰撞時,它會將播放器移到對象的邊緣。 我不知道如何解決此問題,因此將不勝感激。

1)我不會嘗試猜測玩家應該回到哪里,而是從在每個按鍵的開始處存儲玩家位置開始

keyPressed = function(){
    var oldX = player.x;
    var oldY = player.y;
    //do the other stuff

現在,如果發生碰撞,您可以使用player.x = oldX等設置他回到原來的位置。當然,這有可能使他回到太遠。

2)相反,您可以使用一些更接近您的方法的方法。 您知道由於keyPressed而導致玩家從哪個方向來回運動,並且知道您需要將其移回多遠,因為您具有“食物”坐標。 我們可以跳過“ while(collided)if(condition)”,然后將另一個開關直接放入“ if(collided)”中

if(collided()){
    switch(keyCode){
        case up:
            player.y = food.y + food.height;
            break;
        case down:
            player.y = food.y - player.height;
            break;
        //etc.

3)最后,可能是因為您要添加更多的障礙並想出了確保玩家不會與任何物體發生碰撞的最簡單方法,所以您對連續簽入進行了編碼。 如果是這樣,我建議您更多地了解類和對象的工作方式(如果您想自己編寫所有代碼)或尋找一個碰撞庫(如果您想提高效率)。 如果您想擴大游戲范圍或添加功能,這種硬編碼方法似乎可能會在以后讓您頭疼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM