0

Pure 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() メソッドの 2 回目の呼び出しの後に width() を呼び出すと、正しい幅が得られます。そのため、HTML5 バックエンドではセマンティクスが異なるようです: width() メソッドは、最初にレンダリングされた後、画像/レイヤーの正しい幅を返します。

私の解釈は正しいですか?レンダリング前にサイズを取得する方法は?

4

2 に答える 2

1

Asset Watcher はうまく機能しています。または、画像にコールバックを追加することもできます。画像がロードされると、'done' 関数が呼び出されます。

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動作中の簡単な例を次に示します。

AssetWatcherPlayN Showcase サンプルからの実装は次のとおりです。

于 2012-05-01T21:51:20.137 に答える