我将tilemap碰撞整理出来......有点儿。一些瓷砖反应很好。其他人,不是那么多。如果碰撞和从什么方向撞击它确实是不一致的,一旦x击中480度,它就会产生某种障碍。 这里是jsfiddle,所以你可以看看我在说什么 http://jsfiddle.net/t0ahc5qa/ 因为你可以看到它只是逐步通过的一些块,而其他块则没有。 这里是碰撞的地方。
function checkmove(x,y){
if(mapArray[Math.floor(x/tileWidth)][Math.floor(y/tileHeight)]==1 ||
mapArray[Math.ceil(x/tileWidth)][Math.floor(y/tileHeight)]==1 ||
mapArray[Math.floor(x/tileWidth)][Math.ceil(y/tileHeight)]==1 ||
mapArray[Math.ceil(x/tileWidth)][Math.ceil(y/tileHeight)]==1){
console.log('hit');
return false;
} else {
return true;
}
if(mapArray[Math.floor(x/tileWidth)][Math.floor(y/tileHeight)]==2 ||
mapArray[Math.ceil(x/tileWidth)][Math.floor(y/tileHeight)]==2 ||
mapArray[Math.floor(x/tileWidth)][Math.ceil(y/tileHeight)]==2 ||
mapArray[Math.ceil(x/tileWidth)][Math.ceil(y/tileHeight)]==2){
console.log('lava');
return false;
} else {
return true;
}
}
如果您有任何方法可以改善碰撞,请随意,我正在寻找任何方法来使它不那么多。
答案 0 :(得分:0)
您可以在render()
函数的循环内切换x和y变量。
context.drawImage(tile1, y*tileWidth,x*tileHeight,tileWidth,tileHeight);
应该是
context.drawImage(tile1, x*tileWidth,y*tileHeight,tileWidth,tileHeight);