cocos2d-x javascriptではcc.Sprite.initWithFileが使えない
首題の通りのようです。
cc.Sprite.initWithFile does not exist | Obj-C based 2D engine for iOS, OSX and Android
こんな感じで書きたかったんですが無理みたい。
var Enemy = cc.Sprite.extend({ ctor:function(file_name){ this.initWithFile("enemy.png"); }, //updateをオーバーライド update:function(dt){ cc.log(dt); } });initWithSpriteFrameNameはあるのでそっちは大丈夫ぽいですが。1枚もの画像から作る場合はextendしない方が良いっぽいです。 なので、こんな感じで逃げました。
var Enemy = function(arg){ var sprite = cc.Sprite.create("enemy.png"); //updateをオーバーライド sprite.update = function(dt){ cc.log(dt); }; return sprite; };
Time::Pieceのバグ?newからのオブジェクトとstrftimeからのオブジェクトの引き算がおかしい
perlにTime::Pieceという便利なライブラリがありますが、newから作成したオブジェクトとstrftimeから作成したオブジェクトの引き算をすると誤作動するようです。
use Time::Piece; my $now = new Time::Piece(time()); my $now_from_strptime = Time::Piece->strptime($now->strftime('%Y-%m-%d %H:%M'),'%Y-%m-%d %H:%M'); my $today_str = $now->strftime('%Y-%m-%d'); my $from_str = $today_str.' 12:00'; my $to_str = $today_str.' 15:00'; my $from = Time::Piece->strptime($from_str,'%Y-%m-%d %H:%M'); my $to = Time::Piece->strptime($to_str,'%Y-%m-%d %H:%M'); my $now_minus_from = $now - $from; my $to_minus_now = $to - $now; my $to_minus_from = $to - $from; my $from_minus_to = $from - $to; my $to_minus_now_strp = $to - $now_from_strptime; my $now_strp_minus_from = $now_from_strptime - $from; print <<EOT; # 基本時間の定義 now: $now now_from_strptime: $now_from_strptime from: $from to: $to # strftimeから作成したもの同士の引き算は正常に動く to-from: $to_minus_from # newから作ったものと、strftimeから作成したものの引き算はおかしい now-from: $now_minus_from to-now: $to_minus_now # newから作ったものでも、strftimeで作りなおせばOK now_strf-from: $now_strp_minus_from to-now_strf: $to_minus_now_strp EOT 1;で、実行結果が下記です。
# 基本時間の定義 now: Sat Sep 21 22:14:48 2013 now_from_strptime: Sat Sep 21 22:14:00 2013 from: Sat Sep 21 12:00:00 2013 to: Sat Sep 21 15:00:00 2013 # strftimeから作成したもの同士の引き算は正常に動く to-from: 10800 # newから作ったものと、strftimeから作成したものの引き算はおかしい now-from: 4488 to-now: 6312 # newから作ったものでも、strftimeで作りなおせばOK now_strf-from: 36840 to-now_strf: -26040やっているのは、nowを現在時刻でnewにより作り、それよりも過去のfromとtoという2つの時刻をstrftimeで作成。Time::Pieceオブジェクト同士の引き算を文字列で評価すると秒数になるのですが、明らかに挙動がおかしいです。3つのオブジェクトを普通にprintしてみると、一見ちゃんと作れてるっぽくはあるのですが。
そこで、nowから一度strptimeで文字列時刻を取り出してstrftimeで作りなおして再度引き算してやるとうまくいきます。
Time::Pieceにおいてnewは使わない方が良いのかな…。
cocos2d-xの環境構築
最近流行りのcocos2d-xの環境を構築してみました。構成は下記のようになってます。
まず参考にしたのはここ。
[Mac] cocos2d-x でクロスプラットフォーム(iPhone, Android)開発環境の構築 | ラクイシロク
ほぼこれの通りに進めればうまくいったのですが、Android NDKとcocos2d-xの依存関係ではまったので、環境情報とNDKのダウンロード方法だけ追記しときます。
Mac OS X 10.8.4 cocos2d-x-2.1.4 Eclipse 4.2.1 android-ndk-r8e
cocos2d-xはこちらから2.1.4を選択
Cocos2d-x | Download
次にAndroid SDKのダウンロード。Eclipseはもう既にあるけど、EclipseもBundleされているやつしか見つからなかったので、それを落として、展開して出てきたsdkディレクトリをandroid-sdkとリネームしてtoolsフォルダへ移動
Android SDK | Android Developers
続いてAndroid NDKをダウンロード。android-ndk-r8e-darwin-x86_64.tar.bz2にする。
現時点での最新版はr9だが、cocos2d-xが対応しておらず起動時にエラーになってしまうので古いものをURL直打ちで取得。
あとは先ほどのブログの手順にならって構築。
インストールしているSDKのバージョンと、デフォルトで作成されるプロジェクトが想定しているバージョンに差異がありエラー。下記の2点を修正しました。ちなみに私のSDKのバージョンは18でした。
WordPressからはてなブログへ移行(はてな記法を使っていた場合)
このブログ、元々はてなブログで書いていたのですが、一時的にWordPressへ浮気してました。
最近再度はてなブログへ戻ってきたのでその時のプロセスを書いておきます。
Movable Type(MT)形式に変換
WXR形式のままでははてなブログへ入らないので、下記のツールを使ってMT形式へ変換します。
小物置き場 - WxrToMt
gitの便利コマンド備忘録
備忘録的に…。
まだpushしていないcommitを見る(masterブランチの場合)
git log origin/master..mastercommit間のファイル差分を見る
git diff --stat commit commit複数のcommitをくっつける(squash)する、or 消す
# squashしたいcommitが20個以内にある場合、下記のコマンドを打つと git rebase -i HEAD~20 # 下記のような感じで画面に出力される。 # squashしたいやつをpick -> squashに変えると前のコミットと同居される # 消したいやつは行ごと消す pick 4526f6a add hoge pick d12c991 modify hoge pick 44e1104 modify hoge againmergeを取り消す。 git mergeしてコンフリクトが起きたのでとりあえずもとに戻したい時に打つコマンド。 mergeの時はmerge前の状態がORIG_HEADに保存されているらしい。
git reset --hard ORIG_HEADリモートブランチを最終更新日順にリストする
(for i in `git branch -r | colrm 1 2` ; do echo `git log --date=iso8601 -n 1 --pretty="format:[%ai] %h" $i` $i ; done) | sort -r
Perlでディレクトリ内の各ファイルを再帰的に処理する関数
あるディレクトリ内を再帰的に処理し、その結果を変数の中に詰め込む関数を作ってみました。
sub recursive { my ( $base_dir, $result, $function ) = @_; my( @files ); @files = glob( $base_dir.'/*' ); for my $file_name ( @files ){ if ( -d $file_name ){ # process recursively recursive( $file_name, $result, $function ); } elsif ( -f $file_name ){ # process file $result = &$function($file_name,$result); } } }こんな感じで使えます。
package Hoo; use strict; sub recursive { my ( $base_dir, $result, $function ) = @_; my( @files ); @files = glob( $base_dir.'/*' ); for my $file_name ( @files ){ if ( -d $file_name ){ # process recursively recursive( $file_name, $result, $function ); } elsif ( -f $file_name ){ # process file $result = &$function($file_name,$result); } } } package Foo; my $result = []; my $func = sub { my ($file_name,$result) = @_; push @$result, "$file_name!!\n"; return $result; }; # Users/myself/hogeの下に1.txt, 2.txt, 3/1.txtというファイルがあったと仮定 Hoo::recursive("/Users/myself/hoge",$result, $func); print $_ for @$result; # /Users/myself/hoge/1.txt!! # /Users/myself/hoge/2.txt!! # /Users/myself/hoge/3/1.txt!!