TOP みんなの日記 フレ日記 Катюшаの日記
←前の日記 | 次の日記→

久々のゲーム作り

2016-09-17(土) 全体公開

久々にJavaScriptでゲーム作りました(昨日からだけど)
[リンク削除]
まだ試作版なのでメインの遊べるところだけです。
レイアウトやスコア等はこれから追加予定。

ソースは美しくないです。
始めは数字が書かれたパネル部分をJavaScriptで以下で生成しようとしました。
for(var i = 0; i < 16; i ++){
var div = document.createElement('div');
div.style.left = 64 * (i % 4) + 'px';
div.style.top = 64 * Math.floor(i / 4) + 'px';
div.textContent = i + 1;
div.onclick = function(){alert(div.textContent);};
playarea.appendChild(div);
}
パネルの生成は上手くいくんですが、onclickの処理が上手くいきませんでした。
(どの数字を押してもalertが16になる)
おそらく、変数divが上書きされ最後に追加された要素(div)になっているんだと思います。
この問題を自力で解決できなかったため、上の案はやめました。

実際はalertの部分で個々のパネルからそれらを識別する値を
パネルを入れ替える関数に渡す予定でした。


仕方ないので、htmlで各々のパネルを作り、onClickを実装しておきました。
(ここがソースが美しくないというところです)


パネルのいろいろな処理は0から15までの一次元配列で行っています。
4*4のゲーム版なんだから2次元配列使えばよかったじゃんと言うひともいるかもしれません。
個人的には2次元配列になるとforの繰り返しが増えるので避けました。
(正直面倒だった)
今回は4*4で小さい盤面なので1次元でも簡単に書けました。
ハルポップ 2016-09-18 13:09:33 返信する
おぉミニゲーム作ったんだね!

最初のスクリプトは以下のようにしたらいけるよ。
(function(){
var a = i + 1;
div.onclick = function(){
alert(a);
};
})();

僕も前に同じ状況に遭遇したけど忘れたので、「javascript onclick 変数」でぐぐったら解決法が載ってた。
Катюша 2016-09-18 13:26:12 返信する
@master
おおお、まさにこれがやりたかったんです。ありがとうございます。
後学のため参考になりました。
ググっても見ましたが、変数をローカルに落として処理させているんですね。

Катюша

最近の日記

2025-08-02(土) (全)
デレステ

2025-07-20(日) (全)
選挙の話

2025-07-12(土) (全)
選挙の話とか

2025-07-06(日) (全)
株とAI

2025-06-14(土) (全)
株日記

2025-06-01(日) (全)
学マス1stの裏で

2025-05-31(土) (全)
学マス1st

2025-05-16(金) (全)
株日記

2025-04-27(日) (全)
ライブと備忘録

2025-04-26(土) (全)
ライブ参加歴


カレンダー

2016年09月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30