gpt4 book ai didi

javascript - 2D Processingjs 游戏中的碰撞

转载 作者:行者123 更新时间:2023-12-02 14:39:38 24 4
gpt4 key购买 nike

我有一段使用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)相反,您可以使用更接近您的方法的方法。由于按下了按键,您知道玩家来自哪个方向,并且您知道需要将他向后移动多远,因为您有“食物”的坐标。我们可以跳过“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) 最后,您可能会编写连续检查代码,因为您想添加更多障碍,并认为这是确保玩家不会与任何物体发生碰撞的最简单方法。如果是这种情况,我建议您更多地了解类和对象的工作原理(如果您想自己编写所有代码)或寻找碰撞库(如果您希望它更高效)。如果您想扩大游戏范围或添加功能,这种硬编码方法似乎可能会给您带来麻烦。

关于javascript - 2D Processingjs 游戏中的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com