私はhtml5キャンバスを使用して非常に基本的なjavascriptゲームを作成しようとしています。ですから、 "initメソッド"をインスタンス化して呼び出すと、キャンバス上に赤い円を作成するはずのメインプレーヤー "クラス"を作成しました。最後に、矢印キーを使って制御できるはずですが、これを行うには、イベントリスナーをドキュメントに追加し、keydown/keyupをチェックして、leftPressed = trueのようなブール値を変更しようとしました。それに基づいて、変位メソッド(setInterval関数の描画で呼び出される)は、赤い円の位置を更新するためのもので、そこに問題があります - index.htmlファイルを開くと赤い円が作成されますが、矢印キーを押すと、移動することができません。何か助けていただければ幸いです。私の無知を言い訳してください、私は約1週間前にjavascriptを始めました。ここでJavascriptイベントリスナーはブール値を更新しません
はプレーヤー "クラス" を含むjsのコードです:ここで
canvas = document.getElementById("surface");
ctx = canvas.getContext("2d");
//user controlled player class
player = function(x,y,dx,dy,radius) {
this.x = x;
this.y = y;
this.speedx = dx;
this.speedy = dy;
this.radius = radius;
this.leftPressed = false;
this.rightPressed = false;
this.upPressed = false;
this.downPressed = false;
document.addEventListener("keydown",this.onKeyDown,false);
document.addEventListener("keyup",this.onKeyUp,false);
this.init = function() {
ctx.beginPath();
ctx.arc(this.x,this.y,this.radius,0,Math.PI*2);
ctx.fillStyle = "red";
ctx.fill();
ctx.closePath();
}
this.onKeyDown = function(e) {
if (e.keyCode == 37) {
this.leftPressed = true;
}
if (e.keyCode == 38) {
this.upPressed = true;
}
if (e.keyCode == 39) {
this.rightPressed = true;
}
if (e.keyCode == 40) {
this.downPressed = true;
}
}
this.onKeyUp = function(e) {
if (e.keyCode == 37) {
this.leftPressed = false;
}
if (e.keyCode == 38) {
this.upPressed = false;
}
if (e.keyCode == 39) {
this.rightPressed = false;
}
if (e.keyCode == 40) {
this.downPressed = false;
}
}
this.displace = function() {
if (this.leftPressed) {
this.x -= this.speedx;
}
if (this.rightPressed) {
this.x += this.speedx;
}
if (this.downPressed) {
this.y -= this.speedy;
}
if (this.upPressed) {
this.y += this.speedy;
}
}
}
はmain.jsコードです:
canvas = document.getElementById("surface");
ctx = canvas.getContext("2d");
ctx.fillStyle = "black";
ctx.fillRect(0,0,canvas.width,canvas.height);
player1 = new player(500,500,7,7,25);
function draw() {
ctx.fillStyle = "black";
ctx.fillRect(0,0,canvas.width,canvas.height);
player1.init();
player1.displace();
}
setInterval(draw,10);
ラムダ構文は完全に機能しました。 Tnxたくさん、私は開発者のコンソールに何のエラーも表示されなかったので、この問題に悩まされてきました。私はあなたがJSの学習リソースに向けて、これらのもの(ラムダ)をカバーすることを指摘できるかどうか疑問に思っていました。ほとんどの場合、私はちょうど絶対的な基礎を説明したビデオチュートリアルを見ました。もう一度、たくさんのtnx! – TheLousyCoder
最新のJSリソースを本当に知りません。申し訳ありません。しかし、ええ、コンソールはこれにエラーを表示しませんでした。なぜなら、 'this'はまだ何か_something_を参照していて、コールバックはそれが何であっても' leftPressed'フラグを追加していたからです。それはちょうどあなたのコードがそれを探していた場所ではありませんでした。 –