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

JavaScript自上而下的2d深度排序问题

如何解决JavaScript自上而下的2d深度排序问题

我的游戏有问题(Nekonoshima,正在进行中)。 我的目标是: 当玩家走到一棵树后面时,它会像这样:(image here)

当玩家走到树前时,它会这样做:(click here)

但是,在几棵树上,它执行以下操作: (image here)

有人可以帮我吗? 另外,这是我的代码:(处理地形的脚本,手工绘制)

    var objects={
    "birch":{image:"birch.png",basex:32,basey:128,mod:3,collider:[24,116,7,20]},"grass":{image:"grass.png",basex:16,basey:30,mod:2,collider:false}
}
for(var i in objects){
    let meow=objects[i].image;
    objects[i].image=new Image();
    objects[i].image.src=meow;

}
var terrain=undefined;
fs.readFile('./terrain.ex','utf8',function read(err,data) {
    if (err) {
        throw err;
    }

    console.log(data)
    terrain = JSON.parse(data);
    console.log("TERRAIN: ",terrain);  
   
});
function draw(){
    let cc=[];
    for(var i=0;i<terrain.length;i++){
        cc.push(terrain[i]);
    }
    cc.push({player:true,});
    for(var i=0;i<npcs.length;i++){
        cc.push({npc:true,x:npcs[i].x,one:npcs[i]})

    }
    let cow=cc.sort(function(a,b) {
        if(a.player){
            return ((320-96/2)+24) - (b.x-player.y);
        }
        else if(b.player){
            return (a.y-player.y)- ((320-96/2)+24) ;

        }
        else{
    return (a.y-player.y) - (b.y-player.y);
}
});
    
    for(var i=0;i<cow.length;i++){
        if(cow[i].player){
            playfur.draw(state,250-96/2,speed)
        }
        else if (cow[i].npc){

        }
        else{
            
            ctx.drawImage(objects[cow[i].type].image,(cow[i].x-objects[cow[i].type].basex*objects[cow[i].type].mod)-player.x,(cow[i].y-objects[cow[i].type].basey*objects[cow[i].type].mod)-player.y,objects[cow[i].type].image.width*objects[cow[i].type].mod,objects[cow[i].type].image.height*objects[cow[i].type].mod)
        }




    }

}

在这里,我的主要代码

    var animation=0;
var fps=20;
ctx.imageSmoothingEnabled = false;

//const playfur=new Fur("minou.png");
function main(e){
    
    if(path){
    ctx.clearRect(0,500,500);
    keyboard(terrain,objects);
    animation++
    if(animation>10){
        animation=0;
    }
//MAIN DRAW
draw();
    //HITBox DRAWING
    //ctx.fillRect(255-96/2,320-96/2,72,24)
    //CHaraCTER DRAWING
    //playfur.draw(state,speed)





}}
var maininterval=setInterval(main,1000/fps);

它没有返回错误,并且一切正常,除了前面提到的错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。