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に関する変更はできるため、こちらの方が望ましい。

その2:キー操作とキーバインド

キーバインドで指定した定数は、ボタンイベントでも扱えるようになる。たとえば

core.keybind(88, 'z');

と指定した場合、 'zbuttondown' と 'zbuttonup' のイベントが使えるようになる。

既存クラスをもっと楽に

クラスには、既存のクラス(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を元にした簡略化用の新しいクラスを追加してみよう!

引数の説明

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