gpt4 book ai didi

java - 分配给图 block 的 Sprite 图形不正确

转载 作者:行者123 更新时间:2023-12-01 14:34:55 25 4
gpt4 key购买 nike

我现在正在观看 YouTube 上的一系列视频教程,特别是 TheChernoProject 的游戏编程教程。我看到了第 36 集,这是关于从图 block 渲染关卡的内容。我不会对此进行太多详细介绍,但我遇到了一个没有人遇到过的奇怪问题(至少没有人寻求帮助)。
更准确地说:我有一个 Sprite 类、一个 Tile 类(有两个扩展它的类:GrassTile 和 VoidTile)和一个 Level 类。关卡由图 block 组成,图 block 由 Sprite 组成。您可以在此处查看该图 block :

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

Sprite 是这样创建的:

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

Sprite 的两个构造函数:这些是

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

并且关卡是随机生成的,字段范围为0-3(0是草,其余的目前只是VoidTile。但是它显示图形的方式有问题。我确实使用printlns检查过,并且我确信它的大部分都有效(它确实分配了正确的图 block ,具体取决于 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

您可能会注意到,尽管当我创建草地和 voidTile 类时,为它们分配了不同的 Sprite ,但 Sprite 是相同的。奇怪的是,分配的 Sprite 取决于我创建它们的顺序。现在所有图 block 都有一个 voidSprite 图形,因为我最后创建了 VoidTile。当我交换它们时(最后放置 GrassTile),它们都有草 Sprite 。我尝试了一切我能想到的方法来使这项工作成功,但事实并非如此。我已经上传了项目文件夹,所以你可以导入它并检查代码,也许我错过了一些东西。

项目网址:https://dl.dropboxusercontent.com/u/18909657/TheGame.rar

最佳答案

好吧,我撒了谎,确实查看了您的 rar 文件,正如我怀疑的那样,您不恰本地使用了 static:

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;
}

}

通过将 Sprite 字段设置为静态,现在所有 Tile 实例的 Sprite 字段都相同。

解决方案:

  • 不要不当使用 static。 sprite Sprite 变量不应该是静态的。
  • 请在此网站上发布适当的代码,这样我们就不必为您做那些您应该自己做的繁琐工作,例如挖掘错误。
  • 不必要时不要混合使用 AWT 和 Swing 组件。

请注意,如果您的编译器在您将 Sprite 更改为非静态时向您提示,那么您必须修复使用 Sprite 字段的其他代码,而不是再次使 Sprite 静态。

关于java - 分配给图 block 的 Sprite 图形不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16569288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com