亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實例化另一個已實現的抽象類的抽象類

實例化另一個已實現的抽象類的抽象類

慕的地8271018 2021-12-01 19:30:17
所以我正在嘗試使用 LibGDX 制作游戲,所以我的代碼有點亂,所以我會在這里簡化它。基本上我有一個抽象類武器和抽象類子彈。在武器類中,應該有一個 Bullet 類型的字段。我該怎么辦?這是為了讓射擊方法可以創建正確子彈的實例。另外,如果我要在抽象 Bullet 類中創建一個靜態列表并將每個實例添加到其中,這會起作用嗎?或者它會因每個不同的實施子彈而改變?public abstract class Weapon {    public Bullet bullet;}public abstract class Bullet {     public Vector2 position;    public Bullet(Vector2 position){        this.position = position;    }}public Rifle extends Weapon{    this.bullet = RifleBullet.class;}public RifleBullet extends Bullet{    public RifleBullet(Vector2 start){         super(start);       }    }
查看完整描述

1 回答

?
牧羊人nacy

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()方法中使用此信息,使用提供的屬性發射子彈。


查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號