在纯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()方法在第一次渲染后返回图像/图层的正确宽度。
我的解释是否正确以及如何在渲染之前获得大小?
答案 0 :(得分: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);
}
});
答案 1 :(得分:0)
您是否尝试过使用AssetWatcher?看起来这些width
次调用的效果超出了文档加载图像的能力。
以下是AssetWatcher
的简单示例:
这是PlayN Showcase示例中AssetWatcher
的实现: