Javascript 平铺贴图重叠检测工作不正常

Javascript 平铺贴图重叠检测工作不正常,javascript,phaser-framework,tiled,Javascript,Phaser Framework,Tiled,我正在制作一个塔防游戏,我在Phaser中遇到了一个问题,需要使用平铺地图 您可以看到平铺中的不同层始终具有0,0到600600->或平铺宽度和高度的坐标。我有一个背景层和路径。爬行与路径发生适当碰撞 现在,当我单击某个按钮并选择一座塔时,我试图将光标更改为UI的建筑精灵。我希望它在道路上或在另一座塔/爬梯上方时变为红色,并且我正在使用路径和建筑的重叠功能 Phaser中的重叠函数检查建筑精灵和路径的矩形,但路径矩形是整个地图。碰撞有效,但我只需要重叠。有什么办法可以做到这一点吗?这是我的密码

我正在制作一个塔防游戏,我在Phaser中遇到了一个问题,需要使用平铺地图

您可以看到平铺中的不同层始终具有0,0到600600->或平铺宽度和高度的坐标。我有一个背景层和路径。爬行与路径发生适当碰撞

现在,当我单击某个按钮并选择一座塔时,我试图将光标更改为UI的建筑精灵。我希望它在道路上或在另一座塔/爬梯上方时变为红色,并且我正在使用路径和建筑的重叠功能

Phaser中的重叠函数检查建筑精灵和路径的矩形,但路径矩形是整个地图。碰撞有效,但我只需要重叠。有什么办法可以做到这一点吗?这是我的密码

var RedPlanetGame = RedPlanetGame || {};

var pressed = {
    is: false
};
var buildingOverlaps = {
    is: false
};
//title screen
RedPlanetGame.Game = function () {
};

RedPlanetGame.Game.prototype = {
    create: function create() {
    //A door for multyplayer
    this.players = [];
    this.player = new Player(1, 'Daniel', 300);
    this.players.push(this.player);
    this.playerInfo = {};

    //Tile map
    this.map = this.game.add.tilemap('sample2');
    this.map.addTilesetImage('32x32_map_tile v3.1 [MARGINLESS]', 'gameTiles');

    //background and layers
    this.backgroundlayer = this.map.createLayer('backgroundLayer');
    this.path = this.map.createLayer('path');
    this.map.setCollisionBetween(1, 2000, true, 'backgroundLayer');
    this.map.setCollisionBetween(1, 2000, true, 'path');
    //objects from tile map
    this.spawnCreepsAt = this.map.objects['objectsLayer'][0];
    this.destinationForCreeps = this.map.objects['objectsLayer'][1];

    //resize world
    this.backgroundlayer.resizeWorld();
    //this.game.world.setBounds(0, 0, 100, 100);

    //groups
    this.game.enemies = new UnitsPoolFactory(this.game);
    this.game.buildings = this.game.add.group();//TODO: make buildings for each player
    this.game.bullets = new BulletsPoolFactory(this.game);

    //creep spawning
    var _this = this;
    const creepYOffset = 15;
    setInterval(function () {
        _this.game.enemies.factory(_this.spawnCreepsAt.x, _this.spawnCreepsAt.y + creepYOffset, UNIT_TYPES.CREEP1);
    }, 1000);

    //text and player info
    var textX = 150;
    var textY = 0;
    this.playerInfo.gold = this.game.add.text(textX, textY, 'Player gold: ' + this.player.gold,
        {font: "24px Arial", fill: '#FFD700'}
    );

    //Here is test straight forward code for building towers
    this.game.build = this.game.add.group();
    this.buildingSprite = this.game.add.sprite(0, 0, 'tower1-1');
    this.game.physics.enable(this.buildingSprite, Phaser.Physics.ARCADE);
    this.buildingSprite.anchor.setTo(0.5);
    this.buildingSprite.scale.setTo(0.5);
    this.game.build.add(this.buildingSprite);
    console.log(this.path.getBounds());
    console.log(this.backgroundlayer.getBounds());
},
update: function update() {
    var _this = this;
    //Camera follow cursor
    if (this.game.input.mousePointer.x > gameHeight - gameHeight / 10) {
        this.game.camera.x += 10;
    } else if (this.game.input.mousePointer.x <= 100) {
        this.game.camera.x -= 10;
    }
    if (this.game.input.mousePointer.y > gameWidth - gameWidth / 10) {
        this.game.camera.y += 10;
    } else if (this.game.input.mousePointer.y <= 100) {
        this.game.camera.y -= 10;
    }

    //check for collision between enemy and non-path layer
    this.game.physics.arcade.collide(this.game.enemies, this.backgroundlayer);
    //checks for collision between bullets and enemies
    this.game.physics.arcade.overlap(this.game.bullets, this.game.enemies, function (bullet, enemy) {
        enemy.takeHit(bullet, _this.player);
        bullet.kill();
    }, null, this);

    //updates enemies
    this.game.enemies.forEach(function (enemy) {
        enemy.onUpdate(_this.destinationForCreeps);
    });

    //updates buildings
    this.game.buildings.forEach(function (building) {
        building.onUpdate(_this.game.bullets);
    });

    //on mouse down event
    if (this.game.input.activePointer.leftButton.isDown && !pressed.is) {//yo Yoda
        //builds new building of type TOWER1
        buffer(pressed, 1000);
        if (Building.prototype.canBuild(this.player.gold, Tower1.prototype.moneyCost)) {
            var poss = this.game.input.mousePointer;
            BuildingsFactory(this.game, poss.x, poss.y, this.player, BUILDING_TYPES.TOWER1);
            this.player.gold -= Tower1.prototype.moneyCost
        } else {
            alert('Not enought gold');
        }

    }

    //Here is test straight forward code for building towers
    if (Phaser.Rectangle.contains(this.buildingSprite.body, this.game.input.x, this.game.input.y)) {
        this.buildingSprite.body.velocity.setTo(0, 0);
    }

    else {
        this.game.physics.arcade.moveToPointer(this.buildingSprite, 700);
    }
    this.game.physics.arcade.collideGroupVsTilemapLayer(this.game.build, this.path, function (sprite) {
        if (!buildingOverlaps.is) {
            buffer(buildingOverlaps, 500);
            console.log('overlap')
        }
    }, null, this, true);

},
render: function render() {
    this.playerInfo.gold.text = 'Player gold: ' + this.player.gold;

}
};