2011-10-10 3 views
2

웹 기반 게임 엔진을 사용하기 시작했지만 주로 스프라이트와 애니메이션을 처리하기 위해 jQuery를 사용 했으므로 게임 캔버스를 HTML5로 옮겨서 HTML5의 힘을 배우고 있습니다. 그래서 여기에 내가 겪고있는 문제가 있습니다 : 멀티플 캔버스를 http://html5.litten.com/layers/canvaslayers.html에서 레이어 이미지로 제안했습니다.멀티 레이어 HTML5 캔버스를 레이어 이미지로 사용하기

내가 999999에 Z- 인덱스를 설정 한 경우에도, 나를 위해이 작동하지 않습니다 : 여기 내 코드 ->

http://snipt.org/xoKn

객체 계층은 타일의 상단에없는, 감사입니다!

답변

0

누구나 비슷한 문제가 발생하면 먼저 첫 번째 레이어를로드 한 다음 가장 낮은 레이어를 마지막으로로드하여 문제를 해결할 수있었습니다. 외관상으로는 무엇이든 첫째로 적재 될 것이 최상에있을 것이라는 점을 보인다.

내 솔루션은 타일 루프 위로 m 개의 루프를 이동하는 것이 었습니다. 나에게 흥미 롭다. 무엇이 먼저로드되는지는 중요하지 않았다.

1

코드가 작동해야합니다 (적어도 캔버스 처리 부분). 귀하의 스크립트를 살펴본 결과 이미지를로드하는 데 문제가있을 수 있습니다. 당신은

var tile = new Image(); 
tile.src = tiles[i]['bg']; 
tilesCtx.drawImage(tile, tiles[i]['col']*32, tiles[i]['row']*32); 

이 있지만 이미지가 아직로드되지 않아 작동하지 않습니다. 대신 당신은 (그것을 수정해야하므로 즉 당신이 i 변수에 대한 참조가되지 않습니다) 같은

tile.onload = function(){ 
    tilesCtx.drawImage(tile, tiles[i]['col']*32, tiles[i]['row']*32); 
} 

또는 무언가를 사용해야합니다.

튜토리얼에서 그들은 setInterval(drawAll, 20);을 사용하는데, 잠시 후에 (모든 이미지가로드 될 것이기 때문에) 잠시 후에 작동합니다.

이미지의 주문이 끊어 질 수도 있지만 (중요하지는 않지만) preloading 모든 이미지가 처음부터 모두 한 번에 그려지는 것이 좋습니다. 시도해 보시고 효과가 있다면 지금 보내주십시오!

+0

제안을 사용하면 이미지 객체가 타일에 존재하지 않으므로 아무 것도로드하지 않습니다. 변수는 내 for 루프에서 배열을 인덱싱하는 것입니다. setInterval은 20 밀리 초 지연 만 설정하고 20 밀리 초마다 해당 기능을 반복합니다. 이미지가 왜 tilesCanvas 위에로드되지 않는지 잘 모르겠습니다. 예를 들어, tilesCanvas를로드하지 않으면 개체가 스스로로드됩니다. 것은 모든 것이로드되고 있지만, 타일은 오브젝트의 맨 위에로드되어있어서 내가 볼 수없는 곳으로 만듭니다. 이 경우로드되는 객체는 1 개뿐입니다. – theprestig3

+0

'i' 변수가 인덱스라는 것을 이해합니다. :) 아직 미리로드하는 것이 좋은 선택입니다. Unfortunetly 나는 PHP를 모른다. 그리고 나는이 스크립트가 무엇을하는지 모른다. :) SetInterval 작동하지 않을 수 있습니다 (말을) 처음 10 전화,하지만 나중에됩니다. 그러나 지금 나는 당신의 문제를 올바르게 이해하고 있습니다. 나는 왜이 코드가 당신을 위해 작동하지 않는지 이해하지 못한다 (이미지가로드되었다고 가정). 그것은해야한다 (그것은 나를 위해 일한다). 아마도 다른 스크립트/스타일 시트가 Z- 인덱스보다 우선합니다. 나는 아이디어가 없어. :) – freakish

+0

시간과 노력을 많이 보내 주셔서 감사합니다. 나는 그냥 놀고 무슨 일이 일어날지를 생각합니다. 사소한 일이 될 수도 있습니다. 이것은 정말로 나를위한 HTML5의 3 일입니다. 다시 한 번 도움을 주시면 감사하겠습니다. – theprestig3

관련 문제