疑問
【追記】
分かりにくいとの指摘を受けておりますので、コード補記しました。
javascriptでclassの勉強をしていますが、下記のコードを実行した際、
「q.obj.x」が加算されていきます。
class内のmethodでは、別のオブジェクトを作成し、その値を加算しているつもりなのですが、
どこに問題があるのでしょうか?
アニメーションの中で初期値を保持しながら、初期値からの変動で動きを表現したいのですが。
javascript
javascript
1class t{ 2 constructor(){ 3 this.obj = {x:0, y:0};//こちらが初期値です。例えばプレイヤーの座標。 4 } 5 add(moveFlg){ 6 var a = {}; 7 a.obj = this.obj; 8 if(moveFlg == 1){ a.obj.x++; }//xの初期値(0)に1を加算したい。yは初期値のままでよい。 9 else if(moveFlg == 2){ a.obj.x--; }//xの初期値(0)から1を減算したい。yは初期値のままでよい。 10 //moveFlgが0の時は初期値{x:0, y:0}にしたい 11 return a; 12 } 13 add2(){ 14 return this.obj.x++;//こちらだとxにどんどん加算されていくのは理解できる 15 } 16 render(moveFlg){ 17 var A = this.add(moveFlg); 18 //A.obj.x(1 or -1)とA.obj.y(0)をもとに描画する処理 19 } 20} 21 22var q; 23var moveFlg; 24window.onload = function(){ 25 q = new t();//こちらでプレーヤーの宣言 26 init(); 27}; 28 29function init(){ 30 document.addEventListener('keydown', KeyDownFunc); 31 document.addEventListener('keyup', KeyUpFunc); 32 requestAnimationFrame(update); 33} 34 35function update(){ 36 q.render(moveFlg);//プレイヤーに動きを加え描画 37 requestAnimationFrame(update); 38} 39 40function KeyDownFunc(e){ 41 switch(e.keyCode){ 42 case 87: 43 moveFlg = 2; 44 break; 45 case 83: 46 moveFlg = 1; 47 break; 48 } 49} 50 51function KeyUpFunc(e){ 52 moveFlg = 0; 53}
a.obj = this.obj; としているのでそうなって当然というか、そもそも何がしたいコードなのか分かりません。
こんにちは。質問文から何に答えて欲しいのか分からないのですが、どの値がどう変わると理想なんでしょうか?
って事で質問の修正をお願いします。
不明なキーワード:
アニメーション → requestAnimationFrame関数の事?
初期値 → 具体的な数値と何行目の処理を言っているのか? requestAnimationFrame関数に初期値っぽいのないし。
初期値からの変動 → q.obj.x を加工した何かなんだろうけどハッキリしない
そのまま実行すると、consoleにPC能力全開で1ずつカウントアップしながら q.obj.x の中身が流れ続けます。
アニメーションのフレーム(時間的な意味合い)に使えそうではありますが。
とりあえず、こういうのはタイマー処理した方がブラウザやPCフリーズとか回避できるんで検討してください。
回答4件
あなたの回答
tips
プレビュー