2014-03-30 5 views
0

javascript에서 현재 프로젝트에 pixi.js 렌더링 엔진을 사용하고 있습니다. json에 정의 된 스프라이트 시트를 로딩 할 때, assetloader를 사용한다. 문제는 자산 로더가 사용하는 onComplete 이벤트가 끝나면 스프라이트 또는 영화 클립을 만들어야합니다. 그러나 텍스처 캐시는 그 시점 이후에 액세스 할 수없는 것 같습니다. 아래에 나와있는 문제를 설명하는 코드 중 일부는 다음과 같습니다.pixi.js에서 초기로드 후 텍스처에 액세스

var spriteSheet = [ "test.json" ]; 
loader = new PIXI.AssetLoader(spriteSheet); // only using the flappy bird sprite sheet as a test 
loader.onComplete = OnAssetsLoaded; 
loader.load(); 

function OnAssetsLoaded() { 
    var sprite = PIXI.Sprite.fromFrame("someFrame.png"); //this works 
} 

var sprite2 = PIXI.Sprite.fromFrame("someFrame2.png"); //This does not work, tells me "someFrame2" is not in the texture cache 

답변

3

이미지가 캐시에 저장되기 전에 스프라이트 시트가 완전히로드되어야합니다. 스프라이트 시트가로드되면 해당 애셋은 삭제할 때까지 캐시에 존재합니다.

위 코드가 실패하는 이유는 스프라이트 시트로드가 완료되기 전에 var sprite2... 행이 실행되기 때문입니다.


이 예제에서는 새 Sprite를 매초마다 계속 추가합니다.

//build stage 
var stage = new PIXI.Stage(0x66FF99); 
var renderer = PIXI.autoDetectRenderer(400, 300); 
document.body.appendChild(renderer.view); 

//update renderer 
requestAnimFrame(animate); 
function animate() { 
    requestAnimFrame(animate); 
    renderer.render(stage); 
} 

//Flag will prevent Sprites from being created until the Sprite sheet is loaded. 
var assetsReadyFlag = false; 

//load sprite sheet 
var loader = new PIXI.AssetLoader([ "test.json" ]); 
loader.onComplete = function(){ 
    assetsReadyFlag = true; 
}; 
loader.load(); 

//Add a new bird every second 
setInterval(addBird, 1000); 
function addBird() 
{ 
    //assets must be loaded before creating sprites 
    if(!assetsReadyFlag) return; 

    //create Sprite 
    var bird = PIXI.Sprite.fromFrame("bird.png"); 
    bird.anchor.x = bird.anchor.y = 0.5; 
    bird.x = Math.random() * stage.width; 
    bird.y = Math.random() * height; 
    stage.addChild(bird); 
}; 
+0

감사합니다. 나는 약간 혼란 스럽다. Sprite 시트가로드 된 후에 ('var sprite2 ..') 실행 된 이후에 ('loader.load()') 실행 되었기 때문에 가정이있었습니다. 내가 알지 못했던 전역 범위에서 함수를 호출하는 것에 대해 뭔가가 있습니까? – Qdot543

+0

또한'code' 마크 업을 사용하는 방법을 알아 냈습니다. 위의 끔찍한 포맷에 대해 죄송합니다. – Qdot543

+0

load()가 호출 된 후 Sprite가 생성되었지만 이미지로드 프로세스가 비동기 인 것은 맞습니다. 스프라이트는 load()를 호출 한 직후에 텍스처가 다운로드되기 전에 만들어집니다. – Karmacon