【问题标题】:Slopes not working in Phaser using arcade physics斜坡在使用街机物理的 Phaser 中不起作用
【发布时间】:2017-02-14 09:04:17
【问题描述】:

当我尝试使用 phaser-arcade-slopes.min.js 插件让精灵在移相器中上升时,我目前遇到了这个问题。我正在使用一个 .csv tilemap,其瓦片大小也为 32x32。我不确定我的名字是否不正确,或者我为瓷砖地图本身使用了错误的文件类型。我遇到了诸如 - Tilemap.createLayer: Invalid layer ID given: null & Cannot read property 'resizeWorld' of undefined(...) 之类的错误。任何帮助将非常感激。 “snow_tiles_32.png”是我创建的图块集的名称,我正在使用 "tiles.csv" 在 Tiled 中创建的 tilemap。

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {
this.game.load.tilemap('tilemap', 'assets/tilemaps/csv/tiles.csv', null, Phaser.Tilemap.CSV);
this.game.load.spritesheet('tiles', 'assets/tilemaps/tiles/snow_tiles_32.png', 32,32);
this.game.load.spritesheet('player', 'assets/penguin.png', 32,48);
}

var player;
var cursors;

function create() {
this.game.physics.startSystem(Phaser.Physics.ARCADE);
this.game.plugins.add(Phaser.Plugin.ArcadeSlopes);
cursors = game.input.keyboard.createCursorKeys();

this.map = this.game.add.tilemap('tilemap');
this.map.addTilesetImage('snow_tiles_32', 'tiles');

this.game.stage.backgroundColor = '#80e3ff';

this.ground = this.map.createLayer('collision');
this.ground.resizeWorld();

this.game.slopes.convertTilemapLayer(this.ground,{
    2:  'FULL',
    3:  'HALF_BOTTOM_LEFT',
    4:  'HALF_BOTTOM_RIGHT',
    6:  'HALF_TOP_LEFT',
    5:  'HALF_TOP_RIGHT',
    15: 'QUARTER_BOTTOM_LEFT_LOW',
    16: 'QUARTER_BOTTOM_RIGHT_LOW',
    17: 'QUARTER_TOP_RIGHT_LOW',
    18: 'QUARTER_TOP_LEFT_LOW',
    19: 'QUARTER_BOTTOM_LEFT_HIGH',
    20: 'QUARTER_BOTTOM_RIGHT_HIGH',
    21: 'QUARTER_TOP_RIGHT_HIGH',
    22: 'QUARTER_TOP_LEFT_HIGH',
    23: 'QUARTER_LEFT_BOTTOM_HIGH',
    24: 'QUARTER_RIGHT_BOTTOM_HIGH',
    25: 'QUARTER_RIGHT_TOP_LOW',
    26: 'QUARTER_LEFT_TOP_LOW',
    27: 'QUARTER_LEFT_BOTTOM_LOW',
    28: 'QUARTER_RIGHT_BOTTOM_LOW',
    29: 'QUARTER_RIGHT_TOP_HIGH',
    30: 'QUARTER_LEFT_TOP_HIGH',
    31: 'HALF_BOTTOM',
    32: 'HALF_RIGHT',
    33: 'HALF_TOP',
    34: 'HALF_LEFT'
});

this.map.setCollisionBetween(2,34, true, 'collision');

//player
this.player = this.game.add.sprite(100,50,'player');
this.game.physics.arcade.enable(player);

this.player.body.bounce.y = 0.2;
this.player.body.gravity.y = 2000;
this.player.body.collideWorldBounds = true;

this.player.animations.add('left', [0,1,2,3], 10, true);
this.player.animations.add('right', [5,6,7,8], 10, true);
this.game.slopes.enable(this.player);
this.game.camera.follow(this.player);

}

function update() {

this.game.physics.arcade.collide(this.player, this.ground);

this.player.body.velocity.x = 0;

if(cursors.left.isDown){
    this.player.body.velocity.x = -150;
    this.player.animations.play('left');
}
else if (cursors.right.isDown){
    this.player.body.velocity.x = 150;
    this.player.animations.play('right');
}
else{
    this.player.animations.stop();
    this.player.frame = 4;
}

if(cursors.up.isDown && player.body.onFloor()){
    this.player.body.velocity.y = -350;
}

}

【问题讨论】:

标签: javascript csv tiles phaser-framework tiled


【解决方案1】:

您作为 createLayer() 参数提供的图层 ID 必须与地图文件中定义的地图图层相匹配,请参阅 documentation。所以我最好的猜测是再次打开平铺地图文件并检查您拥有的图层名称。

另外还有如何使用 .csv 文件的示例(这里)[http://phaser.io/examples/v2/tilemaps/csv-map].

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2021-12-15
    • 2021-04-07
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多