Objective-Cのブロック構文をメソッドの引数にする

2014年03月25日追記
http://fuckingblocksyntax.com/という、ちょっと発声できない名前のページに、分かりやすくまとまっているのでそちらを参照するとよいかもしれないです。

概要

Objective-Cでは、ブロック構文というものが使える。iOS4から使えるようになった。
例えば、配列を走査したい場合はこんな感じで書ける。

NSArray *array = [NSArray arrayWithObjects:
				  @"りんご", @"ごま",
				  @"まほうしょうじょまどかまぎか",
				  @"からす", @"すずめ",
				  @"めだか", @"かんり", nil];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
	NSLog(@"%d番目の要素は「%@」です。",idx,obj);
}];

これを自分で書いたクラスの中でメソッドの引数にするにはどうするか、というお話。

続きを読む Objective-Cのブロック構文をメソッドの引数にする

Debian6.0.2にnvmでnode.jsを入れるメモ

既に実験用として運用されてるDebian6.0.2サーバーにnode.jsのインストールを試みたのでメモ。
Node.jsとnvmを初めてインストールするときのハマりポイントと対策 – ess supを参考にした。

サーバーサイドはほとんど不慣れなので、明らかにおかしい表現があったらこっそり教えていただけると嬉しいです。

続きを読む Debian6.0.2にnvmでnode.jsを入れるメモ

CSS3 Animations を適用するとiOSでぼやける

enchant.jsでSpriteやLabelに対してjQueryを使ってエフェクトをかける方法についてはenchant.js + jQuery でエフェクトをつけるに書いた。使い慣れたjavascriptの機能を使ってエフェクトをかけられるのは魅力的だが、Spriteに対してCSS3の機能であるAnimationsを適用すると、iOS(iPhone,iPad等) の Mobile Safariで表示した際に、ピンボケというか過剰なアンチエイリアスというか、ぼやけた感じになってしまった。おかしいな、と思って実験したら、特定の条件下でAnimationsを適用した場合にぼやけてレンダリングされることが分かった。

特定の条件とは、

  • div要素に対してCSSでbackground-imageを適用して画像を表示している(enchant.jsのEntity)
  • 複数の画像にCSS3 Animationsを適用している
  • どれかの要素でCSS3のアニメーションが継続中

といった場合だ。そこで、実験をしてみた。
※結論だけ知りたい人はこちらをクリック

続きを読む CSS3 Animations を適用するとiOSでぼやける

enchant.js + jQuery でエフェクトをつける

javascriptのゲーム用ライブラリenchant.jsがステキすぎてハマりそうな感じではあるのだけれど、フェードイン/フェードアウトとか移動とかそういったエフェクトが見当たらず、フレームごとの処理が必要になりそうなのが面倒だった。

jQueryのEffectsが使えたらフェードインしたりスライドさせたり何かと楽でいいんじゃないかと思ったので、連携方法を模索。コード見ていたらdiv要素を持っているクラスは_elementという変数で保持しているようなので、その変数を返す関数をprototypeで拡張してみた。

続きを読む enchant.js + jQuery でエフェクトをつける

enchant.js リンク集

参考にしたWebページ

github
https://github.com/wise9/enchant.js/wiki

公式サイト
http://enchantjs.com/

公式サイト内のサンプル
http://enchantjs.com/ja/sample.html
これを見ればだいたいどうやれば動くかすぐ分かる

公式ドキュメント
http://wise9.github.com/enchant.js/doc/

開発者によるスライド
http://enchant.heroku.com/
class hierarchyが載ってるのが大変ありがたい

公式が充実しているので大抵のことがまかなえる。ドキュメントをよく見て分からないところは、enchant.js(enchant.min.jsじゃない方)のソースコードを読めば日本語のコメントがついていて大変分かりやすい。

enchant.jsでHTML要素を追加する

Javascriptでゲームをつくるためのライブラリ enchant.js を使っていた。enchant.jsではSpriteやLabelといった表示内容はHTMLのdiv要素で構成される。

このdiv要素に対してHTMLのタグを追加してゲームっぽくない要素を追加したい時どうすればいいんだろうと、enchant.jsのソースを読んでいたら、そもそもenchant.Labelのtext属性はLabelを構成するdivのinnerHTMLを設定するものだった。そのため、以下のように書けば簡単に画面内にHTMLで構成した要素を登場させられる。

var scene = new Scene();
var myhtml = new Label(300,120);
myhtml.text = '<div style="width:100%; height:120px;">これはテストです。</div>';
scene.addChild(myhtml);
game.pushScene(scene);