我想製作遊戲和槍類,我需要每個子彈都是構造函數對象,我該如何編輯每個構造函數?像改變每個子彈的x值?Java,如何更改類中每個構造函數對象的值?
回答
讓我來猜測一下。
class Gun{
Bullet bullet;
public Gun(){
bullet = new Bullet();
}
}
class Bullet{
public int x=0;
public Bullet(){
x=10;
}
}
你想一次更改所有的子彈的x值(我的理解)。然後你必須將所有的Bullet實例保存在一個數據結構中。
static List<Bullet> bullets = new ArrayList<Bullet>();
然後像下面那樣更新Bullet的構造函數。
class Bullet{
public int x=0;
public Bullet(){
x=10;
Gun.bullets.add(this);
}
}
然後遍歷項目符號列表並進行所需的更改。
for(Iterator i = bullets.iterator(); i.hasNext();){
i.next().x = 12;
}
希望這會有所幫助。
非常感謝! – user1294270
沒問題。如果您可以將此答案標記爲正確,那將是非常好的,因爲用戶很容易找到正確的答案。謝謝 – Chan
我想你是誤解了構造函數的目的。構造函數在創建類的實例時調用,並且通常會初始化該實例的屬性。如果要更改對象所有實例的值,則必須將引用存儲在數組(或其他類似的數據結構)中,然後遍歷它們並單獨更改每個值。
難道他不說他想改變*所有* Bullet對象的'x'值?這只是初始化x。 – Bohemian
你的意思是像一個多態陣列嗎? – user1294270
@ user1294270可以啓發我們,究竟是多態陣列究竟是什麼。 – Shahzeb
沒有迭代子彈。不,不是,一百萬次,不是。 封裝價值x
所以你只需要做一次改變。下面是一個簡單的代碼示例,說明您應該考慮的設計模式。谷歌的「發佈 - 訂閱模式」或「觀察者模式」爲完整的想法。
public class Bullet {
public static int globalEffect = 0;
private int myX;
public int x() {
return myX + globalEffect;
}
}
在創建它們時收集子彈,然後迭代集合以更新它們。例如,像這樣的:
public abstract class Projectile {
private static final Collection<Projectile> activeProjectiles = new ArrayList<Projectile>();
static {
//update the position of any in-flight projectile approximately once per second
Runnable updater = new Runnable() {
public void run() {
while (true) {
synchronized(activeProjectiles) {
for (Projectile projectile : new ArrayList<Projectile>(activeProjectiles)) {
projectile.travel();
}
}
try {
Thread.sleep(1000);
}
catch (Throwable ignored) {}
}
}
};
new Thread(updater).start();
}
protected int x;
protected int transitTime;
public abstract int getMuzzleVelocity();
public Projectile() {
this.x = 0;
synchronized(activeProjectiles) {
activeProjectiles.add(this);
}
}
public int getFriction() {
return 0;
}
private void travel() {
this.x += this.getMuzzleVelocity() + (this.getFriction() * this.transitTime);
this.transitTime++;
if (this.transitTime * this.getFriction() >= this.getMuzzleVelocity()) {
//this projectile is done
synchronized(activeProjectiles) {
activeProjectiles.remove(this);
}
}
}
}
public class Bullet extends Projectile {
public Bullet() {
super();
}
@Override
public int getMuzzleVelocity() {
return 600;
}
@Override
public int getFriction() {
return 25;
}
}
- 1. 在構造函數中爲每個創建的對象更改類變量
- 2. Java對象類,構造函數鏈接
- 3. 如何更改對象的構造函數?
- 4. 的Java抽象類的構造函數
- 5. 如何在另一個構造函數中調用對象構造函數?
- 6. Java:子類的構造函數具有父類的對象
- 7. 更改構造類,Java
- 8. 從構造函數對象(Java Reflection)中獲取參數類型
- 9. 如何從Java中的構造函數反序列化對象?
- 10. Java:如何可以子類構造函數類中和父構造函數?
- 11. 使用多個構造函數與Java中的一個對象
- 12. Java:抽象類構造函數和this()
- 13. 一個類中的多個對象的構造函數
- 14. 重新創建類對象更改一個構造函數參數
- 15. Java對象和構造函數/方法
- 16. 比較構造函數對象Java
- 17. 如何使用在子構造函數中創建的對象構造父類
- 18. 如何檢查java類中的構造函數值?
- 19. 如何在不同類的構造函數中使用對象?
- 20. 用另一個函數更改構造函數的值JS
- 21. 如何從Starling類更改構造函數類的屬性
- 22. 如何將一個類的構造函數作爲參數用於Java中另一個類中的對象?
- 23. 在基類構造函數中構造對象?
- 24. 如何使構造函數返回一個子類對象
- 25. 在java對象中有構造函數更改時的最佳實踐
- 26. Java:如何調用子類構造函數內的超類構造函數?
- 27. 從構造函數構造鏈接的Java對象
- 28. setState更改構造函數類型
- 29. 抽象構造函數java
- 30. 如何從構造函數中返回構造函數的對象
你是什麼意思「構造對象」?你的真實意圖是什麼?我很確定你有一個解決方案,但它解決的問題是什麼? – Bohemian
我的意思是一個對象的堅持,假設我創造了很多子彈,它們都在空中,我如何增加每個人的X值相對於X的值,因此x爲13的那個值爲14和一個值爲6將是7.我希望這是有道理的... – user1294270