2013-05-15 74 views
0

我現在正在關注YouTube上的一系列視頻教程,具體爲TheChernoProject的遊戲編程教程。我到了第36集,這是關於從瓦片渲染一個關卡。我不會在這方面做太多的細節,但是我遇到了一個奇怪的問題,就是沒有人遇到過(至少沒有人要求幫助)。
更確切地說:我有一個Sprite類,一個Tile類(有兩個類擴展它:GrassTile和VoidTile)和一個Level類。由精靈組成的Tiles的等級科學家。你可以在這裏看到瓷磚:不正確的精靈圖形分配給瓷磚

public static Tile grass = new GrassTile(Sprite.grass); 
public static Tile voidTile = new VoidTile(Sprite.voidSprite); 

而且精靈創建這樣的:

public static Sprite grass = new Sprite(16, 0, 0, Spritesheet.tileset); 
public static Sprite voidSprite = new Sprite(16, 0x00AAFF); 

兩個構造精靈:這些都是

(int size, int x, int y, Spritesheet sheet) 
(int size, int colour) 

和電平是隨機與生成字段範圍從0到3(0是草地,其餘的只是VoidTile),但它顯示圖形的方式有些錯誤,我確實使用了printlns來檢查它,我相信它的大部分工作正常做一個根據ID確定正確的Tiles)。您可以在那裏看到:

ID: 0 | Tile: [email protected] | Sprite: [email protected] 
ID: 2 | Tile: [email protected] | Sprite: [email protected] 
ID: 3 | Tile: [email protected] | Sprite: [email protected] 
ID: 1 | Tile: [email protected] | Sprite: [email protected] 

而且你可能會注意到,該雪碧是相同的,即使當我創建草和voidTile類,它們都分配有不同的精靈。奇怪的部分是分配的精靈取決於我創建它們的順序。現在所有的瓷磚都有一個voidSprite圖形,因爲我最後創建了VoidTile。當我交換它們(使GrassTile最後)時,它們都有草精靈。我嘗試了所有我能想到的工作,但事實並非如此。我已經上傳了項目文件夾,所以你可以導入它並檢查代碼,也許我錯過了一些東西。

項目網址:https://dl.dropboxusercontent.com/u/18909657/TheGame.rar

+0

這可能是一個更好的問題http://gamedev.stackexchange.com – ninesided

+0

你需要做一些更多的調試,至少隔離有問題的代碼,然後發佈它。這裏沒有人會通過一個大規模的rar文件。投票結束。請檢查以確保您沒有不當地使用靜態,您正在循環中創建新的Sprite對象。 –

回答

1

OK,我撒了謊,沒看你的rar文件,你使用靜態不恰當,我懷疑:

public class Tile { 

public int x; 
public int y; 

public static Sprite sprite; 

public static Tile grass = new GrassTile(Sprite.grass); 
public static Tile voidTile = new VoidTile(Sprite.voidSprite); 

public Tile(Sprite sprite) { 
    Tile.sprite = sprite; 
} 

public void render(int x, int y, Screen screen) { 
} 

public boolean solid() { 
    return false; 
} 

} 

通過使精靈現場靜,現在對於所有Tile實例都是相同的。

解決方案:

  • 沒有使用靜態不適當。 Sprite Sprite變量不應該是靜態的。
  • 請在本網站上發佈適當的代碼,以便我們不必爲你自己完成適合自己的工作,比如挖掘錯誤。
  • 請勿混用AWT和Swing組件。

請注意,如果您在將sprite更改爲非靜態時發生編譯問題,那麼您必須修復使用sprite字段的其他代碼,而不是使sprite再次變爲靜態。