1 回答
TA贡献1862条经验 获得超7个赞
我确实建议尽可能避免继承。它只会让您的生活更轻松。相反,请执行以下操作:
public class Weapon {
private final Bullet template;
public Weapon(Bullet template) {
this.template = template;
}
/* shoot logic here */
}
public class Bullet {
private final Vector2 position;
private final float velocity;
public Bullet(float speed) {
this.position = new Vector2();
this.speed = speed;
}
/* setters and getters */
}
这遵循组合优于继承原则,它允许您保持代码简单并提供更多控制权:
Bullet rifleBullet = new Bullet(2f);
Weapon rifle = new Weapon(rifleBullet);
Bullet shotgunBullet = new Bullet(5f);
Weapon shotgun = new Weapon(shotgunBullet);
/* somewhere in update() */
shotgun.shoot();
rifle.shoot();
shoot()然后该方法可以实现实际项目符号的创建(例如使用libgdx 项目符号)。这将您的逻辑模型与实际物理或渲染代码分开。确保向武器构造函数添加更多参数,以描述是什么使您的武器与其他武器不同或独特。然后可以在shoot()方法中使用此信息,使用提供的属性发射子弹。
添加回答
举报