首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个精灵之间的碰撞忧虑

两个精灵之间的碰撞忧虑
EN

Stack Overflow用户
提问于 2015-01-21 18:20:28
回答 1查看 462关注 0票数 1

我为我的失语道歉,希望你能理解我,

你好,我需要你的帮助,因为我已经困了好几个小时了,这开始让我发疯了。我需要错过一些东西但不知道是什么。

我目前正在开发一个与Phaser 2.2的游戏,我试图制造一个碰撞系统。

原则是简单的绿地不应进入,而墙

这是完整的代码

代码语言:javascript
复制
var game = new Phaser.Game (512, 512, Phaser.CANVAS 'phaser-example', {preload: preload, create: create, update: update render: render});

preload function () {

     game.load.tilemap ('bar', 'assets / maps / bar.json', null, Phaser.Tilemap.TILED_JSON)
     game.load.image ('cafe_tiles', 'assets / tiles / cafe.png');
     game.load.image ('wall_tiles', 'assets / tiles / cafewall.png');
     game.load.atlas ('player', 'assets / sprites / tremel.png', 'assets / sprites / tremel.json');

}

var map;
var layer_wall;
var layer_sol;
var layer_couche_1;
var layer_couche_2;
var layer_couche_3;

var keys;
var sprite;
var marker;
var player;

function create () {

     game.physics.startSystem (Phaser.Physics.ARCADE);
 
     map = game.add.tilemap ('bar');
    
     map.addTilesetImage ('bar', 'cafe_tiles');
     map.addTilesetImage ('cafewall', 'wall_tiles');
    
     layer_sol map.createLayer = ('ground');
     layer_wall map.createLayer = ('wall');
     layer_couche_1 map.createLayer = ('couche_1');
     layer_couche_2 map.createLayer = ('couche_2');
     layer_couche_3 map.createLayer = ('couche_3');
    
     map.setCollisionBetween (1, 1000, true, layer_wall)
     map.setCollisionBetween (1, 1000, true, layer_couche_1)
     map.setCollisionBetween (1, 1000, true, layer_couche_2)
     map.setCollisionBetween (1, 1000, true, layer_couche_3)
     layer_couche_1.debug = true;
     layer_couche_2.debug = true;
     layer_couche_3.debug = true;
     layer_wall.debug = true;
     layer_sol.resizeWorld ();
    
     player = game.add.sprite (200, 200, 'player', 'tremel1');
     player.animations.add ('walk_down' Phaser.Animation.generateFrameNames ('tremel', 1, 4, '', 1), 30, true);
     player.animations.add ('walk_up' Phaser.Animation.generateFrameNames ('tremel', 13, 16, '', 1), 30, true);
     player.animations.add ('walk_left' Phaser.Animation.generateFrameNames ('tremel', 5, 8, '', 1), 30, true);
     player.animations.add ('walk_right' Phaser.Animation.generateFrameNames ('tremel', 9, 12, '', 1), 30, true);
       
     game.physics.arcade.enable (player);
     player.body.collideWorldBounds = true;

     game.input.keyboard.createCursorKeys keys = ();
    
}

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

  if (keys.left.isDown)
  {
    player.x - = 3;
    player.animations.play ('walk_left', 8, true);
  }
  else if (keys.right.isDown) {
    player.x + = 3;
    player.animations.play ('walk_right', 8, true);
  }
  else if (keys.up.isDown)
  {
    player.y - = 3;
    player.animations.play ('walk_up', 8, true);
  }
  else if (keys.down.isDown)
  {
    player.y + = 3;
    player.animations.play ('walk_down', 8, true);
  }
  else
  {
    player.animations.stop ()
  }
}

正如我多次在网络+上看到的,在Phaser文档上管理碰撞必须报告碰撞。

代码语言:javascript
复制
 map.setCollisionBetween (1, 1000, true, layer_wall)
 map.setCollisionBetween (1, 1000, true, layer_couche_1)
 map.setCollisionBetween (1, 1000, true, layer_couche_2)
 map.setCollisionBetween (1, 1000, true, layer_couche_3)

然后添加物理播放器

代码语言:javascript
复制
 game.physics.arcade.enable (player);

最后,通常只需将其添加到update ()方法中即可

代码语言:javascript
复制
 game.physics.arcade.collide (player, layer_couche_1)

除了game.physics.arcade.collide (播放器,layer_couche_1),我总是错误引用和我不知道pk?

预先感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2015-02-06 20:26:37

X是sprite位置,player.body.x是街机物理位置,所以在您的更新方法中,您需要更新player.body.x而不是player.x。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28074125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档