gpt4 book ai didi

javascript - 碰撞检测难度,玩家飞

转载 作者:行者123 更新时间:2023-11-30 18:09:38 25 4
gpt4 key购买 nike

我今天创建了一个 2d 平台游戏。玩家可以左右移动并跳跃。不允许爬上墙的一侧。当您在墙边按例如向右和向上时,它会爬上墙。你能看看我错过了什么吗?

function updateMe()
{
x+=vx;
y+=vy;

//gravity
vy+= gravity;
if(y>=HEIGHT-playerH)
{
y=HEIGHT-playerH;
vy=0;
}

//collision y
var maxR=WIDTH/tileW-1;
if(vy>0)
{
//going down
var temp2 = Math.floor((y+vy+playerH)/tileH);
for(var i=Math.max(0,Math.floor(x/tileW)),len=Math.min(maxR,Math.ceil((x+playerW)/tileW)); i<len; i++)
{
if(map[temp2][i]!=0)
{
y=temp2*tileH-playerH;
vy=0;
break;
}
}
}
else if(vy<0)
{
//going down
var temp2 = Math.floor((y+vy)/tileH);
for(var i=Math.max(0,Math.floor(x/tileW)),len=Math.min(maxR,Math.ceil((x+playerW)/tileW)); i<len; i++)
{
if(map[temp2][i]!=0)
{
y=temp2*tileH+tileH;
vy=0.01;//make it fall down
break;
}
}
}

//momentum
if(vx>0)
vx-=momentum/2;
else if(vx<0)
vx+=momentum/2;

//collsion
maxR=WIDTH-playerW;
if(vx>0)
{
//going right
if(x+vx<maxR)
{
var temp2 = Math.floor((x+vx+playerW)/tileW);
for(var i=Math.floor(y/tileH),len=Math.ceil((y+playerH)/tileH); i<len; i++)
{
if(map[i][temp2]!=0)
{
x=temp2*tileW-playerW;
vx=0;
break;
}
}
}
else
{
vx=maxR-x;
}
}
else if(vx<0)
{
//going left
if(x+vx>0)
{
var temp2 = Math.floor((x+vx)/tileW);
for(var i=Math.floor(y/tileH),len=Math.ceil((y+playerH)/tileH); i<len; i++)
{
if(map[i][temp2]!=0)
{
x=temp2*tileW+tileW;
vx=0;
break;
}
}
}
else
{
vx=x;
}
}

//x boundaries
if(x<=0)
{
x=vx=0;
}
else if(x>=WIDTH-playerW)
{
x=WIDTH-playerW;
}

//draw
ctx.fillRect(x,y,playerW,playerH);
}

最佳答案

很有可能是操作顺序的问题,没看太多,相信感动

x+=vx;

之间

else if(vy<0)
{
//going down
var temp2 = Math.floor((y+vy)/tileH);
for(var i=Math.max(0,Math.floor(x/tileW)),len=Math.min(maxR,Math.ceil((x+playerW)/tileW)); i<len; i++)
{
if(map[temp2][i]!=0)
{
y=temp2*tileH+tileH;
vy=0.01;//make it fall down
break;
}
}
}

//momentum
if(vx>0)
vx-=momentum/2;
else if(vx<0)
vx+=momentum/2;

而不是在顶部意味着您不会遇到它被轻微移动到墙上并尝试根据它是否与下面的物体碰撞来调整 y 的问题,它将会是。

关于javascript - 碰撞检测难度,玩家飞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913497/

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