2017-05-21 8 views
0

キャンバスに画像を読み込もうとすると、私のキャンバスはすでに作成されていますが、表示されません。 (makeGameAreaは私がキャンバスを作成するために使用したメソッドです)javascript:キャンバスに画像を描くことはできません

var myGameArea = makeGameArea(700, 600, "myArea", "white"); 
var myContext = myGameArea.getContext("2d"); 

var myImage = new Image(); 
myImage.src = "sonic.gif"; 
myContext.drawImage(myImage, 100, 100, 100, 100); 

私のコードに構文エラーはありますか?

+0

を(実際のキャンバスに 'makeGameArea'を置き換える)のコードを実行すると、正常に動作します。エラーは 'makeGameArea'であるか、イメージが存在しないと推測します。 –

+0

@CarlMarkham私はそれが画像の非同期読み込みであると思います。描画は 'myImage.onload'イベントハンドラで行う必要があります。 –

+0

[Javascriptの動的イメージをURLからキャンバス要素に描画する]の可能な複製(http://stackoverflow.com/questions/10282824/javascript-draw-dynamic-image-from-url-onto-canvas-element) –

答えて

0

私はすでにキャンバス要素がページにあり、そのIDがmyAreaであると想定しています。

JavaScriptの最初の行は意味をなさない - makeGameArea()という関数があり、私たちに話していない場合を除いて、その方法でキャンバスを作成することはできません。

第2に、イメージをキャンバスに描画する前にロードする必要があります。

このコードを試してみてください:

var myGameArea = document.getElementById("myArea"); 
var myContext = myGameArea.getContext("2d"); 

myGameArea.width = 700; 
myGameArea.height = 600; 

var myImage = new Image(); 

myImage.onload = function() { 

    myContext.drawImage(myImage, 100, 100, 100, 100); 

} 

myImage.src = "sonic.gif"; 
+0

ええ、makeGameArea()はキャンバスを作るために作成したメソッドです。それは長すぎるので、ここに入れたくありません。しかし、とにかくあなたの答えはすでに私のproblemmのおかげで解決しました(私はそれがzoomImage.onloadの代わりにmyImage.onloadであるべきだと信じています) –

+0

ああ、申し訳ありません、私はコピーした画像をロードする機能を持っています。回答が更新されました。あなたの質問に答えた場合はそれを受け入れてください。 –

+0

Btw、なぜスクリプトを実行する前にイメージをロードする必要がありますか?スクリプトは自動的に画像をロードしませんか? –

関連する問題