如何解决阶段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
编辑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 */
}
}
如您所见,游戏类创建了玩家,但是在创建时玩家也会通过一个场景。
解决方法
所有循环依赖的成员是指您拥有两个A
和B
类:
- 类
A
使用类B
,因此A
依赖于B
- 类
B
使用类A
,因此B
也依赖于A
结果是,在初始化两个类时,它都会引发无限循环,因为它想基于B创建类A,并且尽管要受益于循环,但仍想基于类A创建类。
https://example.com/wp-json/wp/v2/pages/1100
因此,减少不必要的依赖。
- 因此在
Game
类中,您似乎不需要使用PlayerInterface
。 - 您在界面中也不需要从
Scene
和Phaser.Physics.Arcade.Sprite
扩展。因为您已经在具体课程中扩展了它们。只需删除它们即可。
将两个接口放在同一文件中。这样便可以循环加载文件了,这就是让您绊倒的地方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。