2016-09-05 2 views
1

타일 맵이 1 레이어 만 플레이어와 올바르게 충돌합니다. 모든 예제를 통해 있었지만 여러 레이어에서 작동하지는 못합니다.PhaserJS 충돌 타일 맵이 작동하지 않습니다.

는 I는 13 층의 총 모든 JSON 데이터를 포함하는 1 tilemap을 가지고 있지만, 예를 들어 I은 플레이어가 다른 층과 충돌 및 다른 콜백을 할 싶습니다 3.

를 포함했다 , 예. 보행 거리를 벗어나서 항목을 집어들 수는 없지만 모두 1 spritemap/tilemap을 사용합니다.

var game = new Phaser.Game(1200, 780, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render }); 

function preload() { 
     this.load.tilemap('main_map', 'img here', null, Phaser.Tilemap.TILED_JSON); 
     this.load.image('sprite_map', 'img here'); 
     this.load.image('player_image', 'img here'); 
} 

var map; 
var tileset; 
var bLayer; 
var wLayer; 
var player; 
var sLayer; 
var cursors; 

function create() { 

    game.physics.startSystem(Phaser.Physics.ARCADE); 

    // initiallize the tilemap 
    map = game.add.tilemap('main_map'); 
    map.addTilesetImage('otherNew', 'sprite_map'); 

    //draw the layers 
    bLayer = map.createLayer(0); 
    wLayer = map.createLayer(1); 
    sLayer = map.createLayer(2); 
    wLayer.resizeWorld(); 

    player = game.add.sprite(600, 600, 'player_image'); 
    game.physics.arcade.enable(player); 
    player.body.collideWorldBounds = true; // works 

    //game camera and movment keys here 

} 
function update() { 
    game.physics.arcade.collide(player, wLayer); // DOES NOT WORK 
    game.physics.arcade.collide(player, sLayer); // THIS WORKS 
    map.setCollision(1, true, wLayer); // DOES NOT WORK 
    map.setCollision(2, true, sLayer); // THIS WORKS 

    //movement here already works so didn't include 

} 

답변

0

대답은 각 층 타일 맵의 그것의 자신의 세트를 가지고 있으며, 사용, 현재의 몸을 보려면 나는 각 계층, 그 레이어를 생성하는 spritesheet을 사용되면서 설정해야 할 가치가있었습니다. 나는 필요한 실제 충돌 레이어를 확인하기 위해 인내심을 갖지 못했지만 각기 다른 논리 레이어로 나눠서 각각 0, 100 사이로 설정했습니다.

// In the create section  
map.setCollisionBetween(0, 100,true, wLayer,true); 
map.setCollisionBetween(0, 100,true, sLayer,true); 
0

귀하의 wLayer.resizeWorld(); 기능이 타일맵의 너비/높이를 세계 크기로 만든다고 생각합니다. 이게 wLayer와 sLayer의 유일한 차이점 인 것 같습니다.

페이저에서 너비/높이를 설정해도 충돌 본문의 크기가 자동으로 조정되지 않습니다. 이를 수행하려면 setSize 기능을 사용하십시오.

는 페이저의 debug 방법

this.game.debug.body(someSprite, 'rgba(255,0,0,0.5)');

+0

안녕하세요 제임스, 응답 주셔서 감사합니다. 이미 문제가 무엇인지 알아 냈습니다. 아래에서 심층적 인 답변을 게시 할 예정입니다. – Paddy

관련 문제