问题描述
我真的很担心碰撞。我有一个玩家精灵和一个包含 25 个列和 18 行的 tilemap,每个 tile 有 32 像素,玩家有 48 px 的宽度和高度。这就是我想要做的:
- 我的播放器必须从平台中间开始(编号为 258 的图块)
- 瓷砖 258 和 282 是我唯一想要的实心瓷砖,528 也应该是实心的,但玩家不会从 282 和 258 中掉下来,这些才是最重要的。
- 瓷砖 252 + 玩家碰撞 = 顶部、右侧和左侧瓷砖 + 玩家底部、左侧和右侧
- 图块 282 + 玩家碰撞 = 顶部、底部、左侧和右侧图块 + 玩家底部、右侧、左侧和顶部
问题是:我怎样才能获得玩家在地图上的位置?以及如何调用 tile 的右边缘、左边缘、上边缘和下边缘?我需要向每个玩家和图块地图添加哪些属性才能使 colicions 工作?如何将我的播放器链接到图块地图?如何制作282和258实心瓷砖?
几天来我一直在努力寻找解决方案,但我对自己没有达到目标感到非常生气......已经好几天没有解决方案了。如果你能帮我做,我会很感激 PS:我没有把我所有的代码都放在这里,更新、精灵、项目符号和按键功能不包括在这里,但我认为它们不需要在这里!
这是我所拥有的图片(由于某种原因,我的播放器没有出现在图片上,但他在中间的 258 个原始输入的顶部,正如您在那里看到的那样,在代码上)
var cols = 25;
var rows = 18;
var tileWidth = 32;
var tileHeight = 32;
var tileX = 0;
var tileY = 0;
var solid = false;
canvas.width = cols * tileWidth;
canvas.height = rows * tileHeight;
var map = [
467,468,467,499,500,501,282,258,528,528
];
var player = {
x: 400,y: 440,width: 48,height: 48,frameX: 0,frameY: 1,speed: 3,moving: false,movingLeft: false,movingRight: false,jump: false,jumpSpeed:10,jumpLeft: false,jumpRight: false,gravity: 0.5,jumpY: 500,velY: 0,ground: true,groundY: 552,direction: 0,facing: 'right',shot:false
};
function drawMap() {
for (var y = 0; y < rows; y++){
for (var x = 0; x<cols; x++) {
switch (map[((y*cols)+x)]){
case 467:
ctx.drawImage(map467,x*tileWidth,y*tileHeight,tileWidth,tileHeight);
break;
case 468:
ctx.drawImage(map468,tileHeight);
break;
case 499:
ctx.drawImage(map499,tileHeight);
break;
case 500:
ctx.drawImage(map500,tileHeight);
break;
case 501:
ctx.drawImage(map501,tileHeight);
break;
case 528:
ctx.drawImage(map528,tileHeight);
break;
case 282:
ctx.drawImage(map282,tileHeight);
solid = true;
break;
case 258:
ctx.drawImage(map258,tileHeight);
solid =true;
break;
}
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)