2012-05-01 3 views
0

순수 Java 버전에서 Image 또는 ImageLayer에서 width() 또는 height()를 호출하면 작동합니다. 하지만 HTML5 백엔드를 사용하면 너무 일찍 부르면 제로가됩니다. 렌더링하기 전에 HTML5로 이미지를 재생하는 방법은 무엇입니까?

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

내가 바로 게임의 초기화 코드에서 된 GetImage() 후도 paint() 메소드에서 시도, 처음 페인트()가 호출된다. 하지만 HTML5 백엔드 (Chrome, MacOS)에서는 항상 제로가됩니다. 그러나 두 번째 paint() 메서드 호출 후 width()를 호출하면 올바른 너비를 얻을 수 있습니다. HTML5 백엔드에서는 의미가 다릅니다. width() 메서드는 이미지/레이어가 처음 렌더링 된 후 올바른 너비를 반환합니다.

내 해석이 정확하고 렌더링하기 전에 크기를 얻는 방법은 무엇입니까?

답변

0

AssetWatcher을 사용해 보셨습니까? 첫 번째 메시지가 문서를 불러 와서 이미지를 불러 오지 못하는 것 같습니다. 여기

는 간단한 동작에 AssetWatcher의 예입니다 :

그리고 여기 PlayN 쇼케이스 샘플에서 AssetWatcher의 구현입니다 :

,
1

자산 감시인이 잘 작동합니다. 또는 이미지에 콜백을 추가 할 수 있습니다. 이미지가로드되면 '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); 
    } 
}); 
관련 문제