-1

私は小さなHTML5ゲームを始めており、それが私が最初にやっているゲームです。現在、変数を保持する関数を作成していますが、それが何と呼ばれているのかよくわかりません。チュートリアルからその方法を覚えているだけです。とにかく、「this」を使用していくつかの変数を設定しようとしていますが、値を取得していないようです。これが問題を引き起こしていると私が思うコードです:

function ship() {
    this.width = 100;
    this.height = 75;
    this.drawX = gameWidth/2 - this.width/2;
    this.drawY = gameHeight + this.height;
}

ただし、this.drawXとYは値を取得していないようです。また、gameHeightとgameWidthには値があると確信しています。

編集:これが描画関数と残りのコードです:

var player = new ship();

var gameWidth  = canvasShip.width;
var gameHeight = canvasShip.height;

var sprites = new Image();
sprites.src = 'images/spriteSheet.png';

var canvasPlayer = document.getElementById('canvasShip');
var ctxPlayer = canvasPlayer.getContext('2d');

//Clear any canvas
function clearCtx(canvas) { 
    canvas.clearRect(0,0,gameWidth,gameHeight);
}

//Ship object, the player
function ship() {
    this.width = 100;
    this.height = 75;
    console.log(gameWidth,gameHeight);
    this.drawX = gameWidth/2 - this.width/2;
    this.drawY = gameHeight + this.height;
}

ship.prototype.draw = function() {
    clearCtx(ctxPlayer);
    ctxPlayer.drawImage(sprites,0,0,this.width,this.height,this.drawX,this.drawY, this.width, this.height);
}
4

1 に答える 1

2

コードのこの部分は怪しく見えます:

var player = new ship();

var gameWidth  = canvasShip.width;
var gameHeight = canvasShip.height;

のコンストラクター内ではship()、 と の値はgameWidthgameHeightなりますundefined

ステートメントを逆にすると、期待どおりに機能するはずです。

var gameWidth  = canvasShip.width,
gameHeight = canvasShip.height,
player = new ship();

これは、JavaScript がコードを認識する方法です。

var gameWidth, gameHeight, player, ship;

ship = function() { ... }

player = new ship();
gameWidth = 123;
gameHeight = 456;

getsの宣言は、「巻き上げship()」と呼ばれることもあるプロセスで上に移動し、このように動作する理由がより明確になります。

于 2012-10-22T03:30:11.300 に答える