2015-09-26 64 views
0

所以我用LibGDX製作了這個遊戲。我有一個GroundTop和Ground類,在屏幕上繪製地面和地面頂部(在Assets類中加載圖像),並最終應用與玩家的碰撞(這是一個平臺遊戲)。我試圖做的是繪製4個不同的Ground實例和2個不同的GroundTop實例,以進行測試。但是,每個只有一個。看起來每個實例都會覆蓋另一個實例,因爲只有顯示的實例具有在代碼中創建的最後一個實例的座標。爲什麼是這樣的,我怎樣才能讓每個實例都顯示出來?有什麼讓每個實例覆蓋類中的其他實例嗎?我完全失去了這一點。在此先感謝,並請詢問您有任何問題,幫助澄清我的問題,並幫助我找到一個解決方案:)爲什麼實例在LibGDX中相互覆蓋?

這裏是我的代碼:

Game.java

package com.mygdx.thetimetraveller; 

import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.utils.Array; 

public class Game implements Screen { 
    public static int frameCount; 

    Array<Ground> groundList = new Array<Ground>(); 
    Ground[] grounds = new Ground[1000]; 

    GroundTop groundTop; 
    GroundTop groundTop2; 

    Game() { 
     load(); 
    } 

    @Override 
    public void load() { 
     groundList.add(new Ground(50, 50)); 
     groundList.add(new Ground(250, 250)); 
     grounds[0] = new Ground(500, 500); 
     grounds[1] = new Ground(650, 650); 
     groundTop = new GroundTop(500, 20); 
     groundTop2 = new GroundTop(500, 200); 
     frameCount = 0; 
    } 

    @Override 
    public void display(SpriteBatch batch) { 
     frameCount ++; 

     groundList.get(0).Draw(batch); 
     groundList.get(1).Draw(batch); 

     grounds[0].Draw(batch); 
     grounds[1].Draw(batch); 

     groundTop.Draw(batch); 
     groundTop2.Draw(batch); 
    } 
} 

Ground.java

package com.mygdx.thetimetraveller; 

import com.badlogic.gdx.graphics.g2d.SpriteBatch; 

public class Ground { 
    private static double x; 
    private static double y; 

    Ground(double x, double y) { 
     this.x = x; 
     this.y = y; 
    } 

    public void Draw(SpriteBatch batch) { 
     batch.draw(Assets.simpleBlockTexture01_sprite, (float) x, (float) y); 
    } 
} 

GroundTop.java

package com.mygdx.thetimetraveller; 

import com.badlogic.gdx.graphics.g2d.SpriteBatch; 

public class GroundTop { 
    private static double x; 
    private static double y; 

    GroundTop(double x, double y) { 
     this.x = x; 
     this.y = y; 
    } 

    public void Draw(SpriteBatch batch) { 
     batch.draw(Assets.simpleBlockTextureTop01_sprite, (float) x, (float) y); 
    } 
} 
+1

thetimetraveller,現在我對遊戲很好奇。 :) – Daniele

+1

哈哈,那麼好吧。所以,長話短說,玩家找到一個時間機器,使用它,並不小心將一些飲料灑在它上面。然後他/她必須經過很多時區才能回家。我打算這樣做,以便用戶可以在特定時間選擇及時去哪裏。很高興看到你有興趣:D –

+0

酷!祝你好運,我迫不及待地想玩! – Daniele

回答

2
private static double x; 
private static double y; 

這是你的問題。對於給定類的所有實例,static字段是常見的。所以你的所有Ground對象分享xy變量。解決方案:只需刪除和GroundTop類別中的static修改器類別

+0

哦,哈哈。是的,它的工作原理。男人,我覺得非常愚蠢。謝謝! –

1

我會說這與Java更多地相關,而不是libGDX本身。

有時在Java中,您希望具有對所有對象都通用的變量。這是通過靜態修飾符完成的。在其聲明中具有靜態修飾符的字段稱爲靜態字段或類變量。他們與班級相關,而不是與任何對象相關聯。該類的每個實例共享一個類變量,它位於內存中的一個固定位置。任何對象都可以更改類變量的值,但也可以在不創建類的實例的情況下操作類變量。

要了解有關檢查此link的更多信息。

+0

不錯,謝謝你的回答!但是現在這個問題已經解決了。 –