【问题标题】:Problem with setCollideWorldBounds and overlap Phaser 3setCollideWorldBounds 和重叠 Phaser 3 的问题
【发布时间】:2021-01-06 12:20:28
【问题描述】:

Phaser 3 有问题。

当 e setCollideWorldBounds 它给我错误“无法读取属性 'setCollideWorldBounds' of null”并且重叠功能不起作用。最奇怪的是,在我的游戏配置中,我的调试选项是真的,但只有在这个精灵中它是不可见的。

游戏配置

export const config = {
  type: Phaser.AUTO,
  backgroundColor: "#125555",
  width: 1200,
  height: 900,
  scene: Battle,
  physics: {
    default: "arcade",
    arcade: {
      debug: true,
    },
  },
};

const game = new Phaser.Game(config);

播放器.ts

 export class Player extends Phaser.Physics.Arcade.Sprite {
  constructor(scene: Phaser.Scene, texture: string) {
    super(scene, config.width / 2, config.height - 150, texture);
    scene.add.existing(this);
  }
....

我的场景

export class Battle extends Phaser.Scene {
  private player: Player;
  private enemy1: Enemy;
  private enemy2: Enemy;
  private enemy3: Enemy;
  constructor() {
    super("playGame");
  }
  preload() {
    this.load.image("background", "assets/space.png");
    this.load.image("player", "assets/playerShip.png");
    this.load.image("bullet", "assets/laserBullet.png");
    this.load.image("enemy1", "assets/enemy1.png");
    this.load.image("enemy2", "assets/enemy2.png");
    this.load.image("enemy3", "assets/enemy3.png");
  }

  create() {
    this.player = new Player(this, "player");
    this.player.setScale(0.09);
    this.player.setCollideWorldBounds(true);

    this.enemy1 = new Enemy(this, "enemy1");
    this.enemy2 = new Enemy(this, "enemy2");
    this.enemy3 = new Enemy(this, "enemy3");
    this.enemies = this.physics.add.group();
    this.enemies.add(this.enemy1);
    this.enemies.add(this.enemy2);
    this.enemies.add(this.enemy3);
    this.playerCollision = this.physics.add.overlap(
      this.player,
      this.enemies,
      this.hitPlayer,
      null,
      this
    );
  hitPlayer(player: Phaser.Physics.Arcade.Sprite, enemies) {
    this.resetEnemy(enemies);
  }

  resetEnemy(enemy) {
    enemy.y = 0;
    let randomX = Phaser.Math.Between(0, config.width);
    enemy.x = randomX;
  }
....

【问题讨论】:

    标签: typescript phaser-framework


    【解决方案1】:

    您需要将玩家添加到场景的物理中。 这应该可以解决它。

     export class Player extends Phaser.Physics.Arcade.Sprite {
      constructor(scene: Phaser.Scene, texture: string) {
        super(scene, config.width / 2, config.height - 150, texture);
        scene.add.existing(this);
        scene.physics.add.existing(this);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多