4

ゲームを作成するつもりで、初めてキャンバスを試してみました。画像が表示されていますが、奇妙なことに、fillStyle メソッドが機能していないようです。(少なくとも、Google Chrome ではキャンバスの背景はまだ白のままです。)

私のコードでは、canvas var は実際には canvas 要素の 2d コンテキストであることに注意してください。問題がわかりません。他の誰かができれば幸いです。

LD24.js:

const FPS = 30;
var canvasWidth = 0;
var canvasHeight = 0;
var xPos = 0;
var yPos = 0;
var smiley = new Image();
smiley.src = "http://javascript-tutorials.googlecode.com/files/jsplatformer1-smiley.jpg";

var canvas = null;
window.onload = init; //set init function to be called onload

function init(){
    canvasWidth = document.getElementById('canvas').width;
    canvasHeight = document.getElementById('canvas').height;
    canvas = document.getElementById('canvas').getContext('2d');
    setInterval(function(){
        update();
        draw();
    }, 1000/FPS);
}

function update(){

}
function draw()
{
    canvas.clearRect(0,0,canvasWidth,canvasHeight);
    canvas.fillStyle = "#FFAA33"; //orange fill
    canvas.drawImage(smiley, xPos, yPos);

}

LD24.html:

<html>
    <head>
        <script language="javascript" type="text/javascript" src="LD24.js"></script>
    </head>
    <body>



<canvas id="canvas" width="800" height="600">
    <p> Your browser does not support the canvas element needed to play this game :(</p>
</canvas>

    </body>
</html>
4

2 に答える 2

4

3 ノート:

  1. fillStyleキャンバスが塗りつぶされることはありません。これは、図形を塗りつぶすと、その色で塗りつぶされることを意味します。したがって、書く必要があります。canvas.fillRect( xPos, yPos, width, height)

  2. 画像が実際に読み込まれるまで待ちます。そうしないと、レンダリングに一貫性がなかったり、バグが発生したりする可能性があります。

  3. キャンバスで使用されるクロスドメイン イメージに注意してください。ほとんどのブラウザーはセキュリティ例外をスローし、コードの実行を停止します。

于 2012-08-25T07:04:34.043 に答える
1

画像も読み込まれるまで待ちます。

var img = new Image();
img.onload = function() {
    handleLoadedTexture(img);
};
img.src = "image.png";

function handleLoadedTexture(img) {
    //call loop etc that uses image
};
于 2012-09-14T09:11:13.063 に答える