2013-10-08 149 views
1

我嘗試訪問我在不同類中創建的一個變量時遇到問題。Java訪問變量

我有一個類GameScene,我創建一個新類:

npcArray[0] = new Npc(-100, 100, vbom, camera, physicsWorld, 0); 

有在npcArray [0]我想訪問的previeus類創建的變量。 我如何訪問它?

EDIT1:

的Class1:

public class GameScene extends BaseScene implements IOnSceneTouchListener, IOnAreaTouchListener { 

    public Npc[] npcArray = new Npc[4]; 
    public Bullet[] bulletArray = new Bullet[500]; 
    public static Zombie[] zombieArray = new Zombie[50]; 

     //code... 

private void createNPCs(){ 
     npcArray[0] = new Npc(-100, 100, vbom, camera, physicsWorld, 0); 
     attachChild(npcArray[0]); 
     registerTouchArea(npcArray[0]); 
     npcArray[1] = new Npc(200, 100, vbom, camera, physicsWorld, 1); 
     attachChild(npcArray[1]); 
     registerTouchArea(npcArray[1]); 
    } 

2類:

public class Npc extends Sprite{ 

     //code...  

       if(distanciaMinima <= 3 && distanciaMinima != -1 && timer >= 200){ 
        timer = 0; 
        Vector2 vectorUnitariBullet = new Vector2(GameScene.zombieArray[zombieProper].body.getPosition()).sub(body.getPosition()).nor(); 
        GameScene.createBullet(ArrayPosition, vectorUnitariBullet, accuracy); 
       } 
} 

所以,當我到npcArray [ 「數量」]我要訪問的變量bulletArray或任何方法示例:「GameScene.createBullet()」*現在錯了

EDIT2:

我的代碼結構參考這個遊戲:年底

我試圖訪問GameScene創建當我在播放器變量Game Code下載。

對不起,我英文很差。

+4

該問題沒有足夠的信息來幫助。 –

+0

你如何嘗試訪問它?它給了什麼錯誤?我們需要更多的信息才能幫到您 – Averroes

+0

副手,我認爲這是一種代碼味道。你的代碼結構的方式,你將會以非常緊密的耦合結束,我懷疑封裝不好。這將使維護成爲一場噩夢。你應該如何重構很難知道,尤其是沒有了解整個系統。 – jpmc26

回答

1

將GameScene引用添加到Npc。並編輯你的構造函數。

Class Npc 
{ 
    public GameScene gs; 
    public Npc(int x, int y, ..... , GameScene gs) 
    { 
     this.gs = gs; 
    } 
} 

使用這個詞過關遊戲場景構造:

npcArray[0] = new Npc(-100, 100, vbom, camera, physicsWorld, 0, this); 

訪問它:

npcArray[0].gs.variable_name 

注意這不會造成額外的內存分配。

+1

這種模式總是讓我畏縮。感覺像你正在破壞封裝或一些相關的概念。儘管如此,沒有倒退,因爲我沒有更好的想法。 – jpmc26

+0

任何其他解決方案? – GerardMT

+0

僅對變量的引用:) – hasan83