阶段3循环依赖问题 GameInterface.ts PlayerInterface.ts Game.ts Player.ts

问题描述

如何在Phaser 3中解决循环依赖项

背景

我正在使用Phaser 3,TypeScript和Parcel进行游戏。我添加了一些实现某些接口的类,但是这些接口相互导入和使用。我开始将eslint与airbnb规则集结合使用。他们实施的规则之一是import/no-cycle,但我觉得我的游戏需要

示例代码

GameInterface.ts

import { Scene } from 'phaser';
import PlayerInterface from '../../entities/player/PlayerInterface'; // circular

interface GameInterface extends Scene {
  player: PlayerInterface;
}

export default GameInterface;

PlayerInterface.ts

import GameInterface from '../../scenes/game/GameInterface'; // circular

interface PlayerInterface extends Phaser.Physics.Arcade.Sprite {
  scene: GameInterface;
  speed: number;
}

export default PlayerInterface;

问题

将“玩家”添加到“游戏”中,并且玩家类具有场景。因此它们都需要在界面中。由于这只是一个类型文件,我可以忽略此规则吗?还是我可以做一个切肉刀重组?

编辑1

另外here是指向完整存储库的链接。

编辑2

这里是实现这些接口的2个类。

Game.ts

class Game extends Scene implements GameInterface {
  player: PlayerInterface;

  constructor() {
    super({
      key: 'Game',});
  }

  preload(): void {
    /* preload code */
  }

  create(): void {
   /* create code */ 
  }
}

Player.ts

class Player extends Phaser.Physics.Arcade.Sprite implements PlayerInterface {
  scene: GameInterface;

  constructor(scene: GameInterface) {
    super(scene,x,y,'player');
    this.scene = scene;
    this.scene.add.existing(this);
    this.scene.physics.add.existing(this);
  }

  static preload(scene: GameInterface): void {
    /* preload */
  }
}

如您所见,游戏类创建了玩家,但是在创建时玩家也会通过一个场景。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)