【问题标题】:Tilemap Collisions don't work in PhaserTilemap Collisions 在 Phaser 中不起作用
【发布时间】:2015-07-21 04:49:44
【问题描述】:

我是 Phaser 的新手,过去几天我一直遇到这个问题。基本上,我希望我的玩家与我的 .json tilemap 中的 CollisionsLayer 发生碰撞,但它不起作用并且玩家直接通过。我尝试了多个版本的 Phaser,但它们似乎都不起作用。这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <title>RPG Game</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/phaser/2.3.0/phaser.min.js"></script>
</head>
<body>
<script>
var game = new Phaser.Game(1000,600,Phaser.AUTO,'',{preload: preload, create: create, update: update});

function preload() {
    game.load.tilemap('level', 'assets/level1.json', null, Phaser.Tilemap.TILED_JSON);
    game.load.image('tiles', 'assets/tiles.png');
    game.load.image('player', 'assets/star.png');
}

var map;
var backgroundLayer;
var collisionLayer;
var player;
var cursors;

function create() {
    game.physics.startSystem(Phaser.Physics.ARCADE);

    map = game.add.tilemap('level');
    map.addTilesetImage('tiles');

    backgroundLayer = map.createLayer("BackgroundLayer");
    collisionLayer = map.createLayer("CollisionLayer");
    map.setCollisionBetween(1,80);
    backgroundLayer.resizeWorld();

    player = game.add.sprite(200,200,'player');

    game.physics.enable(player);

    game.camera.follow(player);

    cursors = game.input.keyboard.createCursorKeys();

}

function update() {
    game.physics.arcade.collide(player, collisionLayer);

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

    if (cursors.right.isDown) {
        player.body.velocity.x = 200;
    }
    else if (cursors.left.isDown) {
        player.body.velocity.x = -200;
    }
    else if (cursors.up.isDown) {
        player.body.velocity.y = -200;
    }
    else if (cursors.down.isDown) {
        player.body.velocity.y = 200;
    }
}
</script>
</body>
</html>

瓷砖地图确实加载了,我可以移动,但我只是不与碰撞层上的任何瓷砖发生碰撞。提前致谢。

【问题讨论】:

    标签: javascript html phaser-framework


    【解决方案1】:

    你需要在create()函数中创建collisionLayer对象后添加这段代码:

    game.add.existing(collisionLayer);
    

    或者map.createLayer构造函数中的这段代码:

    this.game.add.existing(this);
    

    但取决于您的代码。问题是您必须明确告诉 Phaser 该对象正在添加到游戏中。

    【讨论】:

    • 感谢您的回答!但它保持不变。我在控制台中没有任何错误消息。
    • 我认为 game.physics.arcade.collide(player, collisionLayer);不管用。检查您的 collisionLayer 是否未定义或类似的东西。
    • 出于某种奇怪的原因,它现在可以工作了。几天来我一直在尝试解决这个问题,但现在它以某种方式起作用了。我重写了它,然后它工作了......不过感谢您的帮助。
    • Dang,我遇到了这个确切的问题哈哈......希望我的“开始工作”很快
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多