[英]Using a object specific variable in another class
我一直在尋找所有其他問題,但我似乎找不到問題的答案:我需要使用一個非靜態字段(對於我創建的每個對象都是獨立的),並且需要在另一個字段中訪問該變量類。 代碼片段:(Enemytank.java)
public class Enemytank extends MoveableGameItem implements IStepListener, IAlarmListener
{
private Battlefield mygame;
private Enemytank enemyTank1;
private static int enemyWaveSize = 1;
private static int remainingKills = enemyWaveSize;
private static double startupEnemyHealth = 100.00;
private double enemyHealth = startupEnemyHealth;
public int enemyStage = 0;
/**
* Constructor.
*/
public Enemytank(Battlefield mg)
{
mygame = mg;
setImage("/images/enemytank.png", 27, 33);
setPosition(25, 35);
// snelheid 5, naar rechts
setDirectionSpeed(0, 4);
startMoving();
mygame.addStepListener(this);
}
}
和我需要在其中變量variableStage的類 :(Playertank.java)
public void collisionOccured(GameItem collidedItem)
{
Enemytank enemyTank1 = new Enemytank(mygame);
System.out.println("pt= " + enemyTank1.getEnemyStage());
if ((collidedItem instanceof Enemytank) && (playerShields > 0) && (enemyTank1.getEnemyStage() != 3))
{
this.playerShields--;
mygame.setShieldsonDashboard(playerShields);
}
else if ((collidedItem instanceof Enemytank) && (playerShields <= 0) && (enemyTank1.getEnemyStage() != 3))
{
System.out.println("hit player!");
this.playerLives--;
mygame.setLivesonDashboard(playerLives);
}
if (collidedItem instanceof Shield)
{
this.playerShields++;
mygame.setShieldsonDashboard(playerShields);
mygame.deleteGameItem(collidedItem);
this.playerUpgrades();
}
}
我現在從仇敵坦克1.getEnemyStage()得到的值是0,因為我相信我用敵人坦克制造了一個新物體敵人坦克1 =新敵人坦克(mygame); 。 如何引用現有對象並獲得特定值? evilStage用於檢查怪物是否死亡或幾乎死亡。
提前Thx :)火焰
您需要利用多態性。 在GameItem
類中聲明方法getEnemyStage
(或者是接口?),然后您可以詢問collidedItem.getEnemyStage()
並從該對象中獲取數據。 可替代地,所述向下轉換 collidedItem
成EnemyTank
並調用該方法: ((EnemyTank)collidedItem).getEnemyStage()
另外,將enemyStage
private
,無需public
,因為可以通過調用getter方法間接訪問它。
if (collidedItem instanceof Enemytank && playerShields > 0 &&
((Enemytank)collidedItem).getEnemyStage() != 3) {
....
}
當您調用沖突對象時,您將給對象傳遞一個引用。 因此,將沖突更改為:
public void collisionOccured(GameItem collidedItem, Enemytank enemyTank) //a change here
{
System.out.println("pt= " + enemyTank.getEnemyStage()); // now you can call enemyTank with the correct refrence
if ((collidedItem instanceof Enemytank) && (playerShields > 0) && (enemyTank1.getEnemyStage() != 3))
{
this.playerShields--;
mygame.setShieldsonDashboard(playerShields);
}
else if ((collidedItem instanceof Enemytank) && (playerShields <= 0) && (enemyTank.getEnemyStage() != 3))
{
System.out.println("hit player!");
this.playerLives--;
mygame.setLivesonDashboard(playerLives);
}
if (collidedItem instanceof Shield)
{
this.playerShields++;
mygame.setShieldsonDashboard(playerShields);
mygame.deleteGameItem(collidedItem);
this.playerUpgrades();
}
}
而且,當您從EnemyTank類中調用沖撞事故時,您會像這樣:
collisionOccured(collidedItem, this); //where this refrence to this object (which is a EnemyTank)
有了這個答案,我假設您是從EnemyTank類中調用collisonOccured的,因為您沒有在該調用的位置發帖。 如果沒有,你需要一個refrence到EnemyTank的對象,當你調用collisionOccured(並因此改變this
在調用refrence到正確的對象)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.