2016-09-05 5 views
1

私は、1つのレイヤだけがプレーヤに正しく衝突しているタイルマップを持っています。すべての例を経てきましたが、複数のレイヤーで作業するようには見えません。PhaserJSコリジョンタイルマップが動作しない

Iは、13層の合計すべてのJSONデータを含む1枚のタイルマップを持っているが、例えば、私は異なる層に衝突するプレーヤーの好み、異なるコールバックを有するであろう。3.

にのみ含まれています、例えば1つのスプライトマップ/タイルマップを使用して、範囲内などではアイテムをピックアップすることはできません。

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

を使用するには設定する必要があるいくつかの値を持っていた。実際のコリジョンレイヤーを調べるのに忍耐力はありませんでしたが、それらをすべて別々の論理レイヤーに分割したので、それぞれ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の唯一の違いだと思われます。

Phaserの幅と高さを設定しても、衝突ボディのサイズは自動的に変更されません。これを行うには、setSize関数を使用します。

、あなたの現在の本文を表示答えはそれぞれの層は、タイルマップの独自のセットを持っていることである、と私は、それぞれの層を生成するために、これらの層をspritesheetを使用していたとして、フェイザーのdebug方法

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

+0

私は既にこの問題の原因を把握してくれてありがとうございました。下記の詳細な回答を投稿します。 – Paddy