2011-10-10 14 views
2

Webベースのゲームエンジンを使い始めましたが、主に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); 

ですが、画像がまだ読み込まれていないため動作しません。代わりに、あなたは

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

またはそのような何かを(それを変更する必要があるので、すなわち、あなたがi変数への参照を持っていません)を使用する必要があります。

チュートリアルでは、setInterval(drawAll, 20);を使用しているため、しばらくしてから作業が行われます(すべての画像がロードされるため)。

もちろん、画像の注文を失うことがありますが(これは重要ではないようですが)、preloadingすべての画像は最初からすべてを一度に描画することをお勧めします。試してみて、それがうまくいけば今すぐ私たちに教えてください!

+0

あなたの提案を使用した場合、画像オブジェクトはタイル用に存在しないため、何もロードしません。私の変数は私のforループで配列をインデックスすることです。 setIntervalは20ミリ秒の遅延を設定し、その関数を20ミリ秒ごとに繰り返す。画像がtilesCanvasの上に読み込まれない理由はわかりません。例えば、私がtilesCanvasをロードしないと、オブジェクトはそれ自身でうまくロードされます。物事はすべてがロードされているが、タイルはオブジェクトの上にロードされ、私はそれらを見ることができない場所になります。この場合、ロードされるオブジェクトは1つだけです。 – theprestig3

+0

私は変数がインデックスであることを理解しています。 :)まだプリロードは良い選択です。 Unfortunetly私はPHPを知らないし、私はあなたのこのスクリプトが何をしているのか分からない。 :) SetIntervalは最初の10回の呼び出しでは機能しないかもしれませんが、後で実行されます。しかし、今私はあなたの問題を正しく理解しています。私はなぜこのコードがあなたのために働かないのか分かりません(画像が読み込まれていると仮定します)。それはすべきです(それは私のために働く)。おそらく他のスクリプト/スタイルシートがあなたのZ-インデックスを上書きするでしょうか?私はアイデアがありません。 :) – freakish

+0

時間と労力のおかげで多くのことをありがとう、私はちょうど周りを再生し、何が起こるか見るだろうと思う。私はちょうど私がキャッチしていない何かマイナーなものかもしれません。これは本当に私にとってHTML5の3日目です。もう一度私は助けに感謝します。 – theprestig3

関連する問題