2020 ソフトウェア設計及び演習用の班Wiki
19::gr04::メモ(優菜子)
資料になかったSceneについてのメモ
どうやら、replaceSceneには、「置き換えたはずのシーンがメモリを食う」という問題があるらしい。(参考)
参照先にある通り、
game.replaceScene(置き換えるシーン);
ではなく
game.popScene().remove(); game.pushScene(置き換えるシーン);
にした方が無難かもしれない。(gameは親Nodeの名前に合わせて)
キー操作に関するメモ
その1:キー操作とイベント
弊班ではキー操作の感知を
node.on('enterframe', function(e){ if(game.input.up){ //中身は省略 } });
のように書いていたが、「キーを押している間ずっと入力を感知し続ける」という問題が発生した。
たとえば、キャラクターを指定した方向に動かすならこれでいい。
しかし、メニュー画面など動きっぱなしだと困る場合もある。その場合、
scene.on('upbuttondown', function(e){ //中身は省略 });
でこの問題は一応解決できるが、button系のイベントを発行できるのはSceneオブジェクトまたはCoreオブジェクトのみであるため、Nodeオブジェクトを発行元に指定できない。
ただし、この関数の内部からNodeに関する変更はできるため、こちらの方が望ましい。
既存クラスをもっと楽に
クラスには、既存のクラス(SpriteやLabelなど)のプロパティの入力を簡易化する使い方もある。
これを参考に書き換えてみよう。
var kuma = new Sprite(32, 32); // <-- 画像サイズに合わせる
kuma.image = core.assets[IMG];
kuma.frame = 3; // 表示したいフレーム番号
kuma.x = 120;
kuma.y = 50;
core.rootScene.addChild(kuma);
こんなんSpriteを追加するたびに書くの面倒じゃない!?
ということでSpriteを元にした簡略化用の新しいクラスを追加してみよう!
ということでSpriteを元にした簡略化用の新しいクラスを追加してみよう!
引数の説明
gazou | 画像パス |
spx, spy | 生成するSpriteの大きさ |
x, y | 生成するSpriteの座標 |
scalex, scaley | 生成するSpriteのスケール |
frame | 生成するSpriteのフレーム番号 |
var Sprite2 = enchant.Class.create(enchant.Sprite, { initialize: function(gazou, spx, spy, x, y, scalex, scaley, frame){ enchant.Sprite.call(this, spx, spy); this.image = core.assets[gazou]; this.x = x; this.y = y; this.scaleX = scalex; this.scaleY = scaley; this.frame = frame; } });
のように事前に書いておけば、呼び出すときには
var kuma = new Sprite2(IMG, 32, 32, 120, 50, 1, 1, 3); core.rootScene.addChild(kuma);
と簡略化できる。クラスにはこういう使い方もある。
また、プロパティを変えたいときも
kuma.frame = 1;
と、普通のクラスのように変えることも可能。
gitlabに関するメモ
自分の手元にある作業ファイルを削除してもう一回clone、pullするという力技で突破したけど、ちゃんと講義ページに書いてあった。
「Gitのもう少し進んだ使い方」項目に。一応自分が調べたリンクも貼っておく。
最終更新日:2019/08/07 12:15:45