Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Tilemap碰撞不';移相器不工作_Javascript_Html_Phaser Framework - Fatal编程技术网

Javascript Tilemap碰撞不';移相器不工作

Javascript Tilemap碰撞不';移相器不工作,javascript,html,phaser-framework,Javascript,Html,Phaser Framework,我是Phaser的新手,这几天我一直有这个问题。基本上,我希望我的播放器与.json tilemap中的CollisionsLayer发生碰撞,但这不起作用,播放器直接通过。我尝试过多个版本的Phaser,但似乎都不起作用。这是我的密码: <!DOCTYPE html> <html> <head> <title>RPG Game</title> <script src="https://cdnjs.cloudfla

我是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>

RPG游戏
var game=new Phaser.game(1000600,Phaser.AUTO,,{preload:preload,create:create,update:update});
函数预加载(){
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映射;
var背景层;
var碰撞层;
var播放器;
变量游标;
函数create(){
游戏。物理。启动系统(相位器。物理。拱廊);
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(200200,'player');
游戏。物理。启用(玩家);
游戏。摄像机。跟随(玩家);
cursors=game.input.keyboard.CreateCursorWorkeys();
}
函数更新(){
游戏。物理。街机。碰撞(玩家,碰撞层);
player.body.velocity.x=0;
player.body.velocity.y=0;
if(游标。右。isDown){
player.body.velocity.x=200;
}
else if(游标。左。isDown){
player.body.velocity.x=-200;
}
else if(cursors.up.isDown){
player.body.velocity.y=-200;
}
else if(游标。向下。isDown){
player.body.velocity.y=200;
}
}

tilemap确实加载,我可以移动,但我不会与碰撞层上的任何瓷砖碰撞。提前感谢。

在create()函数中创建collisionLayer对象后,需要添加以下代码:

game.add.existing(collisionLayer);
或者map.createLayer构造函数中的以下代码:

this.game.add.existing(this);

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

谢谢您的回答!不过还是一样。我在控制台中没有任何错误消息。我认为是游戏。物理。街机。碰撞(玩家,碰撞层);它不起作用。检查您的碰撞层是否未定义或类似的内容。出于某种奇怪的原因,它现在可以工作了。几天来我一直在试图解决这个问题,但现在它不知怎么地起作用了。我重写了它,然后它成功了。。。谢谢你的帮助。当,我有这个确切的问题哈哈。。。希望我的工作很快就开始了