我现在正在关注 YouTube 上的一系列视频教程,特别是 TheChernoProject 的游戏编程教程。我到了第 36 集,这是关于从瓷砖渲染关卡的。我不会对此进行太多详细介绍,但是我遇到了一个没有人遇到过的奇怪问题(至少没有人寻求帮助)。
更准确地说:我有一个 Sprite 类、一个 Tile 类(有两个扩展它的类:GrassTile 和 VoidTile)和一个 Level 类。Tiles 的关卡组件,由 sprite 组成。您可以在此处查看该图块:
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 进行了检查,我是确保大部分都有效(它确实分配了正确的 Tiles,具体取决于 ID)。你可以在那里看到它:
ID: 0 | Tile: com.ekhart.game.level.tile.GrassTile@73d74138 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
ID: 2 | Tile: com.ekhart.game.level.tile.VoidTile@3ba0d916 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
ID: 3 | Tile: com.ekhart.game.level.tile.VoidTile@3ba0d916 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
ID: 1 | Tile: com.ekhart.game.level.tile.VoidTile@3ba0d916 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
您可能会注意到,Sprite 是相同的,即使当我创建草地和 voidTile 类时,它们分配了不同的 sprite。奇怪的是,分配的精灵取决于我创建它们的顺序。现在所有的瓷砖都有一个 voidSprite 图形,因为我最后创建了 VoidTile。当我交换它们时(最后制作 GrassTile),它们都有草精灵。我尝试了我能想到的一切来完成这项工作,但事实并非如此。我已经上传了项目文件夹,所以你可以导入它并检查代码,也许我错过了一些东西。
项目网址:https ://dl.dropboxusercontent.com/u/18909657/TheGame.rar