微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TileMap Colisions:如何获得玩家在 tilemap 上的位置?

如何解决TileMap Colisions:如何获得玩家在 tilemap 上的位置?

我真的很担心碰撞。我有一个玩家精灵和一个包含 25 个列和 18 行的 tilemap,每个 tile 有 32 像素,玩家有 48 px 的宽度和高度。这就是我想要做的:

  • 我的播放器必须从平台中间开始(编号为 258 的图块)
  • 瓷砖 258 和 282 是我唯一想要的实心瓷砖,528 也应该是实心的,但玩家不会从 282 和 258 中掉下来,这些才是最重要的。
  • 瓷砖 252 + 玩家碰撞 = 顶部、右侧和左侧瓷砖 + 玩家底部、左侧和右侧
  • 图块 282 + 玩家碰撞 = 顶部、底部、左侧和右侧图块 + 玩家底部、右侧、左侧和顶部

问题是:我怎样才能获得玩家在地图上的位置?以及如何调用 tile 的右边缘、左边缘、上边缘和下边缘?我需要向每个玩家和图块地图添加哪些属性才能使 colicions 工作?如何将我的播放器链接到图块地图?如何制作282和258实心瓷砖?

几天来我一直在努力寻找解决方案,但我对自己没有达到目标感到非常生气......已经好几天没有解决方案了。如果你能帮我做,我会很感激 PS:我没有把我所有的代码都放在这里,更新、精灵、项目符号和按键功能包括在这里,但我认为它们不需要在这里

这是我所拥有的图片(由于某种原因,我的播放器没有出现在图片上,但他在中间的 258 个原始输入的顶部,正如您在那里看到的那样,在代码上)

enter image description here

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 举报,一经查实,本站将立刻删除。