万年素人からHackerへの道

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

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    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]とやればとれたはず!