我有以下代码:
public class CurrentPlayer(override val game: PewGame, spriteSheet: String) : Player(game, spriteSheet)
层次结构如下: CurrentPlayer - > class Player - > trait MovingEntity - >特质实体。
特质'实体'有一场野外比赛:PewGame'。 Player的构造函数如下所示:
public open class Player(override val game: PewGame, spriteSheet: String) : MovingEntity, InputAdapter()
在播放器的构造函数中,如果你可以在kotlin中调用它,我就有这个:
this.sprite = CharacterSpriteSheet(Utilities.createTextureFromFile(spriteSheet), this.game.getSpriteBatch(), 0.25f)
问题是,' this.game'是null,因此' this.game.getSpriteBatch()'抛出NPE。我无法以更好的方式解释这一点,所以任何帮助都会受到赞赏。更准确地说,在使用调试器之后:
我可以在Player类中看到game
和this
。 game
不为空,但由于某些莫名其妙的原因,this.game
为空。
感谢您的帮助!
编辑:我忘了提到这个问题仅在我实例化CurrentPlayer时出现,并且在我实例化Player时没有发生。
答案 0 :(得分:3)
问题是您将相同的数据存储在两个字段中:您在game
中覆盖Player
,然后在CurrentPlayer
中覆盖,这会使相同的数据存储两次。顺便提一下,它使game
属性的getter访问CurrentPlayer
中的未初始化字段,而不是Player
中的初始化字段。
要解决此问题,请从override val
声明中删除CurrentPlayer
:
public class CurrentPlayer(game: PewGame, spriteSheet: String) : Player(game, spriteSheet)