如何在渲染之前用HTML5获取playn中图像的宽度?

时间:2012-05-01 20:43:28

标签: playn

在纯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()方法在第一次渲染后返回图像/图层的正确宽度。

我的解释是否正确以及如何在渲染之前获得大小?

2 个答案:

答案 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的实现: