万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

cocos2d-JS(3.x系)のめんどくさいところ

Spriteに対してコールバックができない

        var popupSprite = cc.Sprite.create();

とボタンを作ってる時に。
cc.MenuItemImage.createよろしく、

        var popupSprite = cc.Sprite.create(
        		res.TitleConfirmParent_png,
        		res.TitleConfirmParent_png,
        		function () {
        			cc.log("呼ばれろ!");
        		}
        );

と書いてみると、エラーになる。
cc.Spriteの引数的に対応してないから


しかたないので、cc.MenuItemImageで作ってみる。

        var popupSprite = cc.MenuItemImage.create(
        		res.TitleConfirmParent_png,
        		res.TitleConfirmParent_png,
        		function () {
        			cc.log("呼ばれろ!");
        		}
        );

そのまま、cc.Layerにthis.addChildしたところ、
エラーは出ない上、これ自体は追加されるのだが、
タップしても動かない。

        var menu = cc.Menu.create(
            popupSprite
        );

とcc.Layerとの間にcc.Menuを挟む必要がある。

spriteを配列に入れてfor文が出来ない?

「nineSprite」変数でSpriteを作成。
attrで座標を設定できるようだ。

        var nineSprite = cc.MenuItemImage.create(
        		res.CautionNineSprite_png,
        		res.CautionNineSprite_png,
        		function () {
        			// クリック時のコールバック
        			cc.log("9 is clicked!");
        		},this);
        nineSprite.attr({
        	x: 110,
        	y: -120,
        });


とあるが、今回”9”のボタンを作ったが、
”0〜9”のボタンがあるので、この数に対して座標を
ちまちまと設定するのは面倒なのでfor文で行いたい

出来るかどうかわからないので
「nineSprite」だけ入った配列「numArr」をfor~inで回し、
それに対してattrで座標設定を設定したい。

        var numArr = [nineSprite];
        for (var sprite in nineSprite) {
        	sprite.attr({
        		x: 110,
        		y: -120,
        	});
TypeError: sprite.attr is not a function

残念!!できない。

spriteがcc.MenuItemImage型でないからできないのか?

String()みたいに、cc.MenuItemImage(sprite)でキャスト?

        for (var sprite in numArr) {
        	var casted = cc.MenuItemImage(sprite);
        	casted.attr({
        		x: 110,
        		y: -120,
        	});   

できない。

varの代わりにcc.MenuItemImage!

for (cc.MenuItemImage sprite in numArr) {
    sprite.attr({
        x: 110,
        y: -120,
    });
}

こんな書き方はJS的に無理なので”IDEが赤で波線でエラー”だったので、ありえない。

普通にfor文使ってやれば大丈夫だった。

for(var i=0;i<numArr.length;i++) {
    numArr[i].attr({
        x: 110,
        y: -120,
    });
}

というか
実はiに入ってるのはsprite変数に入ってたのは
オブジェクトではなく、添字w
numArr[sprite]とやればとれたはず!