Я рекомендую избегать наследования везде, где это возможно.Это просто делает вашу жизнь проще.Вместо этого сделайте что-то вроде этого:
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 bullets ).Это отделяет вашу логическую модель от реальной физики или кода рендеринга.Обязательно добавьте больше аргументов в конструктор оружия, чтобы описать, что делает ваше оружие отличным или уникальным от других видов оружия.Эта информация затем может быть использована в методе shoot()
для запуска пули с предоставленными атрибутами.