0

在纯 Java 版本中,在 Image 或 ImageLayer 上调用 width() 或 height() 有效。但是对于 HTML5 后端,如果我调用它太早,我会得到零。

Image image = assets().getImage("images/myimage.png"); 
ImageLayer layer = graphics().createImageLayer(image);
float w1 = image.width(); 
float w2 = layer.width();

我在游戏初始化代码中的 getImage() 之后以及从 paint() 方法中尝试过,第一次调用 paint()。但我总是使用 HTML5 后端(Chrome、MacOs)得到零。但是,如果我在第二次调用 paint() 方法后调用 width(),我会得到正确的宽度。因此,HTML5 后端的语义似乎有所不同:width() 方法在第一次渲染后返回图像/图层的正确宽度。

我的解释是否正确以及如何在渲染前获得尺寸?

4

2 回答 2

1

资产观察器运行良好。或者,您可以向图像添加回调。加载图像时会调用“完成”函数。

取自pea.java

// Add a callback for when the image loads.
// This is necessary because we can't use the width/height (to center the
// image) until after the image has been loaded
image.addCallback(new ResourceCallback<Image>() {
  @Override
  public void done(Image image) {
    layer.setOrigin(image.width() / 2f, image.height() / 2f);
    layer.setTranslation(x, y);
    peaLayer.add(layer);
  }


  @Override
  public void error(Throwable err) {
    log().error("Error loading image!", err);
  }
});
于 2012-06-09T18:16:34.717 回答
0

您是否尝试过使用AssetWatcher?看起来那些第一次width调用超出了文档加载图像的能力。

下面是一个简单的例子AssetWatcher

下面是 PlayN Showcase 示例的实现AssetWatcher

于 2012-05-01T21:51:20.137 回答