2012-01-31 11 views
1

私は動的にcontext.clip()を変更しようとしています。 HTML5キャンバスでは、配列とは異なる値を持つ図形を描画します。アイデアは、ボードゲームのさまざまな部分を順番に照らし、ボードのより暗いバージョンをクリッピングして、より明確なバージョンの正方形だけを見ることです。context.clip()を動的に変更しようとしています。 HTML5のキャンバスで

この非常にサイトから他の質問に基づいて、私は苦労してるコード、ですが、私は本当にエラーを見つけることができません。

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>HTML5 Trivial</title> 

<script type="text/javascript"> 

var strings = new Array(); 
strings[0] = "context.moveTo(134,487);context.lineTo(169,435);context.lineTo(200,449);context.lineTo(172,508);"; 
strings[1] = "context.moveTo(102,461);context.lineTo(142,414);context.lineTo(169,434);context.lineTo(133,485);"; 
strings[2] = "context.moveTo(71,434);context.lineTo(120,394);context.lineTo(143,414);context.lineTo(99,461);"; 
strings[3] = "context.moveTo(49,403);context.lineTo(101,370);context.lineTo(121,394);context.lineTo(70,435);"; 
strings[4] = "context.moveTo(19,340);context.lineTo(78,320);context.lineTo(99,370);context.lineTo(48,404);context.lineTo(31,375);"; 
strings[5] = "context.moveTo(172,507);context.lineTo(198,449);context.lineTo(231,458);context.lineTo(211,522);"; 
strings[6] = "context.moveTo(259,531);context.lineTo(267,466);context.lineTo(230,460);context.lineTo(213,521);"; 
strings[7] = "context.moveTo(257,531);context.lineTo(266,468);context.lineTo(300,470);context.lineTo(334,466);context.lineTo(347,531);context.lineTo(302,534);"; 

var images = new Array(); 

function draw(i){ 
    var canvas = document.getElementById("myCanvas"); 
    var context = canvas.getContext("2d"); 
    var img = new Image(); 
    img.src = 'board_dark.jpg'; 
    img.onload = function() { 
     context.drawImage(img,0,0); 
    } 
    images[i] = new Image(); 
    images[i].onload = function() { 
     eval(strings[Math.floor(Math.random()*6)]); 
     context.closePath(); 
     context.clip(); 
     context.drawImage(images[i],0,0); 
     i = i + 1; 
     window.setTimeout(function(){draw(i)},100); 
    } 
    images[i].src = 'board.jpg'; 
} 

</script> 
</head> 
<body onLoad="draw(0);"> 
<canvas id="myCanvas" width="1024" height="1024"></canvas> 
</body> 
</html> 

私はひどくコーディングだろうか?私は書き込みの方法を変えています。成功しないとeval()などを使わないようにしています...

いつものようにあなたの助けをありがとう!

ラモン

PD-私の英語のため申し訳ありません!

答えて

1

あなたのコードは本当に変です。私はあなたにこれをコーディングについては移動する方法の良いアイデアを与えるために、その一部をやり直しました(1のために、evalのを使用せずに!)

http://jsfiddle.net/p6tXv/

今すぐリストから描画されます一般的な機能がありますあなたがそれを与えるポイントの数(彼らはあなたが供給したポイントと同じです)。

あなたはほぼ確実にクリップと暗いイメージを使用したくありませんが、代わりに半透明の黒でボードを描く必要があります。

私はスポットを黒くするような方法でコードを書いた。あなたがスポットを除いてすべてを黒くしたいなら、もう少し複雑なパットを書く必要がありますが、それは難しいはずはありません。

+0

ありがとうございます!はい、私はスポットを除いてすべてを黒くする必要があります。アイデアはスポットの感覚を交互に光らせることですが、私はあなたのコードを試してみます。ありがとうございました! – Ramon

0

コーディングスタイルに関するコメント。あなたのcontext.moveToロジックを呼び出すeval()の使用は、すべての種類の悪いです。 「なぜevalが悪いのか」に関するさまざまな理由をGoogleに確認してください。それは何度も何度も言及されている。

コマンドを保存する代わりに、座標をポリゴンスタイルのオブジェクトとして保存し、ポイントを繰り返して目的の結果を得ることができます。

これは特定の目的を説明するために書かれた簡単なデモですが、コードを共有すると悪いコードを共有することになります。見直しを検討。

関連する問題