2015-01-26 7 views
0

이전에 물어 본 적이 있다면 용서해주세요. (올바른 구절을 찾을 수없는 것 같습니다. , 만일이 경우라면).캔버스 기반 게임 (easeljs, soundjs, preloadjs)에서 iPad의 모바일 사파리 충돌이 발생했습니다.

저는 createjs 라이브러리 모음을 사용하여 Flash에서 html5로 퀴즈 게임을 변환했으며 Android 기기 및 iPhone (iPhone 4s 및 5c에서 테스트 됨)에서 제대로 작동합니다. 그러나 iPad를로드 할 때마다 iPad에서 충돌이 발생하는 것처럼 보입니다.

모바일 배포 용 cocoonjs에 게임을 패키징 할 때 처음에는이 문제가 변환 과정에서 거짓말이라고 생각했지만 iPad에서 URL을 방문 할 때 동일한 문제가 발생하여 문제가 내 코드 어딘가에있어.

코드 자체는 loadManifest를 사용하여 게임 및 오프닝 오디오 파일의 이미지 에셋을 사전로드합니다. 이 대기열에는 약 170 개의 자산이로드됩니다. 파일은 body 태그에서의 onLoad 방법을 사용하여로드 (매니페스트에로드 된 이미지 자산의 무리에 대해 잘립니다) 다음과 같습니다 loadFiles()를 호출됩니다

var queue = new createjs.LoadQueue(true); 
var manifest = [ 
    {id:"gameintro", src:"audio/intro.mp3"}, 
    {src:"images/Path.png"}, 
    ... 
    {src:"images/owl.png"} 
]; 
queue.loadManifest(manifest); 
queue.setMaxConnections(5); 
queue.addEventListener("complete", loadComplete); 

    function loadAll() { 
     document.getElementById('canvas').style.backgroundImage="url('images/splash.png')"; 
     canvas = document.getElementById('canvas'); 
     canvas.height = H; 
     canvas.width = W; 
     stage = new createjs.Stage("canvas"); 
     var loadingText = new createjs.Text("Loading...", "bold 30px Arial", "#9d3202"); 
     loadingText.x = 350; 
     loadingText.y = 585; 
     loadingText.textBaseline = "alphabetic"; 
     stage.addChild(loadingText); 
     stage.update(); 
     while (manifest.length > 0) { 
      loadAnother(); 
     } 
     //console.log('done'); 
    } 

    function loadAnother() { 
     // Get the next manifest item, and load it 
     var item = manifest.shift(); 
     queue.loadFile(item); 

     // If we have no more items, disable the UI. 
     if (manifest.length == 0) { 
      //do nothing 
     } 
    } 
    function loadComplete() 
    { 
     stage.removeAllChildren(); 
     var clickToPlay = new createjs.Bitmap("images/clicktoplay.png"); 
     clickToPlay.x = 350; 
     clickToPlay.y = 565; 
     clickToPlay.textBaseline = "alphabetic"; 
     stage.addChild(clickToPlay); 
     stage.update(); 
     canvas.addEventListener("click", function(event) { 
      event.target.removeEventListener(event.type, arguments.callee); 
      createjs.Sound.registerSound({id:"gameintro", src:"audio/intro.mp3"}); 
      createjs.Sound.addEventListener("fileload", function(event){ 
        event.target.removeEventListener(event.type, arguments.callee); 
        init(); 
       }); 

     }); 
    } 

    loadAll(); 
}; 

이 이후에 실행되는 init 함수 나머지 오디오 파일 (그 중 ~ 160 mp3 파일이 많음)을로드하고 시작 애니메이션을 시작합니다. 그 부분에 대한 코드는 다음과 같습니다

function init(){ 
     createjs.Sound.registerSound({id:"meintroduction", src:"audio/Mentor/ME1.mp3"}); 

     ... 

     createjs.Sound.registerSound({id:"jennyfalse3", src:"audio/Pirate_Jenny/PJE10.mp3"}); 
     document.getElementById('canvas').style.background="#B5D7ED"; 
     canvas = document.getElementById('canvas'); 
     canvas.height = H; 
     canvas.width = W; 
     stage = new createjs.Stage("canvas"); 
     //add path 
     path = new createjs.Bitmap("images/Path.png"); 
     path.x = 0; 
     path.y = 0; 
     stage.addChild(path); 

     //add sun 
     sun = new createjs.Bitmap("images/sun.png"); 
     sun.x = 800; 
     sun.y = 600; 
     stage.addChild(sun); 

     //add pinkcloud 
     pinkcloud = new createjs.Bitmap("images/pinkcloud.png"); 
     pinkcloud.x = -4; 
     pinkcloud.y = 150; 
     stage.addChild(pinkcloud); 
     //add bluecloud 
     bluecloud = new createjs.Bitmap("images/bluecloud.png"); 
     bluecloud.x = -4; 
     bluecloud.y = 250; 
     stage.addChild(bluecloud); 

     //add farisland 
     farisland = new createjs.Bitmap("images/farisland.png"); 
     farisland.x = 600; 
     farisland.y = 180; 
     stage.addChild(farisland); 
     //add backwave 
     backwave = new createjs.Bitmap("images/backwave.png"); 
     backwave.x = -4; 
     backwave.y = 420; 
     stage.addChild(backwave); 
     //shark 
     shark = new createjs.Bitmap("images/shark.png"); 
     shark.x = 900; 
     shark.y = 600; 
     stage.addChild(shark); 
     //fish3 
     fish3 = new createjs.Bitmap("images/fish3.png"); 
     fish3.x = 800; 
     fish3.y = 600; 
     stage.addChild(fish3); 
     //add middlewave 
     middlewave = new createjs.Bitmap("images/middlewave.png"); 
     middlewave.x = -800; 
     middlewave.y = 450; 
     stage.addChild(middlewave); 
     //add ship 
     pirateship = new createjs.Bitmap("images/pirateship.png"); 
     pirateship.x = -500; 
     pirateship.y = 400;//445x384 
     pirateship.regX = 445/2; 
     pirateship.regY = 384/2; 
     stage.addChild(pirateship); 
     //fish1 
     fish1 = new createjs.Bitmap("images/fish1.png"); 
     fish1.x = 800; 
     fish1.y = 600; 
     stage.addChild(fish1); 
     //fish1 
     fish2 = new createjs.Bitmap("images/fish2.png"); 
     fish2.x = 900; 
     fish2.y = 700; 
     stage.addChild(fish2); 
     //add frontwave 
     frontwave = new createjs.Bitmap("images/frontwave.png"); 
     frontwave.x = -4; 
     frontwave.y = 500; 
     stage.addChild(frontwave); 
     //bird 
     bird1 = new createjs.Bitmap("images/bird.png"); 
     bird1.x = 0; 
     bird1.y = 0; 
     bird1.scaleX = -1; 
     stage.addChild(bird1); 
     bird2 = new createjs.Bitmap("images/bird.png"); 
     bird2.x = 800; 
     bird2.y = 0; 
     stage.addChild(bird2); 
     //add island 
     island = new createjs.Bitmap("images/island.png"); 
     island.x = 800; 
     island.y = 200; 
     stage.addChild(island); 
     //add setsail 
     setsail = new createjs.Bitmap("images/Setsail.png"); 
     setsail.x = -358; 
     setsail.y = 80; 
     createjs.Tween.get(setsail).to({alpha: 0,},0); 
     stage.addChild(setsail); 
     setsail1 = new createjs.Bitmap("images/Setsail.png"); 
     setsail1.x = 350; 
     setsail1.y = 80; 
     //add butwatchout 
     butwatchout = new createjs.Bitmap("images/Butwatchout.png"); 
     butwatchout.x = -358; 
     butwatchout.y = 300; 
     createjs.Tween.get(butwatchout).to({alpha: 0,},0); 
     //stage.addChild(butwatchout); 
     butwatchout1 = new createjs.Bitmap("images/Butwatchout.png"); 
     butwatchout1.x = 200; 
     butwatchout1.y = 300; 
     setTimeout(function(){createjs.Sound.play("gameintro");},1500); 
     fn = createjs.Ticker.on("tick", tick); 
     createjs.Ticker.setFPS(80); 
     createjs.Ticker.addEventListener("tick", stage); 
    } 

시세는 다음에 대한 물건을 이동하는 몇 가지 기본적인 회전 및 트윈을 사용하고, 또한의 전면 물결 같은 특정 자산의 투명성 (관리하기 위해 일부 알파 필터를 사용 배). 이 모든 작업이 끝나면 사용자는 실제 게임을 진행합니다.이 게임은 아주 기본적인 createjs.Bitmaps를 사용하여 Sound.play와 함께 무대에 요소를 추가하고 SpriteSheets는 깜박임과 입 움직임과 같은 기본적인 애니메이션을 제공합니다. 퀴즈꾼들. 그러나 모든 것이 iPad의 시작 시퀀스를 지나치게 만듭니다.

누군가가 (amateurgamingleague.com/pirates/english) 한 번 봐 주셔서 내가 엉망진창에 관해서 약간의 통찰력을 줄 수 있다면, 크게 감사하겠습니다 !!

감사합니다.

+0

URL이 유효합니까? 나는 amateurgamingleague.com/pirates/English를 의미합니까? – Kiran

+0

나는 그렇게 믿는다! 나는 여기에서 URL을 복사했습니다 : http://amateurgamingleague.com/pirates/english/ 감사합니다! – scud

+0

대소 문자를 구분하는 URL입니다. 최소한의 코드 나 연구와 같은 세부 사항을 추가하십시오. 당신이 한 일을 보여주십시오. – Kiran

답변

1

Ipad (2)에서 같은 오류가 발생했습니다. 심지어 로그 아웃 한 모든 세션 쿠키와 사용자를 삭제했습니다 ...

문제는 미리로드하는 사운드의 양 (또는 얼마나 큰지 확실하지 않음)입니다. 가능한 많은 오디오를 미리로드하지 않도록 코드를 변경하고 가능한 경우 사용자가 무언가를 클릭 할 때 필요할 때로드하십시오. 어떤 소리가 들리기 전에 클릭/터치/사용자 이벤트로 게임을 시작해야했습니다.

0

같은 문제가 있습니다. 디렉토리 앞에 슬래시를 사용하십시오.

var manifest = [ 
{id:"gameintro", src:"/audio/intro.mp3"}, 
{src:"/images/Path.png"}, 
... 
{src:"/images/owl.png"} 

];