碰撞检测困难,玩家飞
Collision detection difficulty, player flies
我今天创建了一个2d平台游戏。玩家可以左右移动并跳跃。不允许爬上墙的一侧。当你按下例如right&它沿着墙往上爬。你能看一看并说出我错过了什么吗。
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的问题。
相关文章:
- 逐像素碰撞检测弹球
- 砖块和球之间的碰撞检测(使用数字数组)
- 为什么我应该使用带有碰撞检测的四叉树
- 具有多个块的html5画布碰撞检测
- D3js地图标记碰撞检测
- javascript中两个正方形之间的碰撞检测
- 使用canvas+javascript进行2D碰撞检测
- 为什么我的碰撞检测在 Phaser 中不起作用
- 方向碰撞检测
- 圆圈碰撞检测 HTML5 画布
- FPS 游戏中的碰撞检测使用三个.js
- Javascript - 如何设置碰撞检测系统
- 三.js使用光线投射优化碰撞检测
- 对 2 个对象进行碰撞检测
- 如何将碰撞检测添加到我的 JavaScript 游戏中
- 使用边界球体进行碰撞检测
- 碰撞检测问题;对某些条件的奇怪反应
- JavaScript:碰撞检测不起作用
- 碰撞检测在我的游戏中不准确
- 碰撞检测困难,玩家飞