我正在做一个游戏,摄像机跟随玩家。 Player
类扩展了一个抽象GameObject
类,该类负责绘制。为了使播放器居中,我在Player
的更新功能中执行以下操作:
super.setReferenceVector(positionVector);
super.draw(g);
在GameObject
中,我有构造函数:
public GameObject() {
referenceVector = new Vector2(0, 0);
correctedPositionVector = new Vector2(0, 0);
}
这些方法:
public void setReferenceVector(Vector2 reference) {
referenceVector.x = reference.x;
referenceVector.y = reference.y;
}
public Vector2 setCorrectedPositionVector(Vector2 positionVector) {
correctedPositionVector.x = positionVector.x + (GamePanel.WIDTH / 2) - referenceVector.x;
correctedPositionVector.y = positionVector.y + (GamePanel.HEIGHT / 2) - referenceVector.y;
return correctedPositionVector;
}
public void draw(java.awt.Graphics2D g) {
AffineTransform old = g.getTransform();
AffineTransform at = AffineTransform.getTranslateInstance(setCorrectedPositionVector(positionVector).x, setCorrectedPositionVector(positionVector).y);
g.drawImage(animation.getImage(), at,null);
g.setTransform(old);
}
所有这些对播放器都适用。但是,当需要绘制另一个子类中的另一个对象时,referenceVector
是(0, 0)
。
(我相信)我理解为什么会这样,因为referenceVector
与GameObject
对象没有关联。 GameObject
类既不会创建Player
对象,也不会创建其他对象,因此无法执行player.positionVector
。我不确定如何解决这个问题,也许这是一个设计问题。这可能是重复的问题。在这种情况下,请指出正确的方向。