如何解决Phaser 3中的循环依赖问题
背景
我正在使用Phaser 3、TypeScript和Parcel制作一个游戏。我添加了一些实现某些接口的类,但这些接口相互导入和使用。我开始使用airbnb规则集下的eslint,其中一个规则是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
此外这里是完整仓库的链接。
编辑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 */
}
}
您可以看到游戏类创建了玩家,但是在创建时也传递了一个场景。
player = { scene: { player: { scene: { player: ... } } } }
。您真的操作这种类型的对象吗? - johannchopin