2011-07-01
2011-05-03
いまどきの2Dゲームエンジン
スクリプト言語でiPhoneやAndroid用ゲームを作れる2Dゲームエンジンをまとめてみる試み。
| name | Corona | moai | Imapct | Kobold2D |
|---|---|---|---|---|
| link | link | link | link/iOSImpact | link |
| desc | Corona is the world’s most advanced mobile development platform. | The mobile platform for pro game developers. | Impact is a JavaScript Game Engine that allows you to develop HTML5 Games in no time. | Kobold2D™ is the expert's choice for Cocos2D game development. |
| license | proprietary | OpenSource (CPAL) | proprietary | OpenSource (MIT License) |
| language | Lua | Lua | Javascript | Lua |
| native | ?(C++) | C++ | ?(Objective-C) | Objective-C |
| iOS | available | available | available | available |
| Android | available | available | not yet | - |
| price | $199/year | Free | $99 | Free |
| release | released | private beta | beta | 2011 summer |
2011-03-30
MacVim-KaoriYa 20110330
MacVim-KaoriYa 20110330版をリリースしました。
今回はSparkleによる自動更新を設定していません。(2011/04/01 Sparkle情報を更新しました)
http://code.google.com/p/macvim-kaoriya/
http://macvim-kaoriya.googlecode.com/files/macvim-kaoriya-20110330.dmg
Xcode 4でビルドしています。
Mac OS X 10.5 Leopardを使用されている方、Intel、PowerPC 問わず、動作確認にご協力いただけますと幸いです。
Vim 7.3.146、MacVim Snapshot 57、香り屋パッチ 20110323ベースです。
(2011/04/01 追記)
実験的レンダラを使用していない場合、半透明設定(set transparency)が効かなくなります。半透明設定を使用している場合は、「環境設定」「詳細」の「実験的レンダラを使用する」「インラインインプットメソッドを使用する」の両方をチェックしてみてくださいませ。
http://code.google.com/p/macvim-kaoriya/
http://macvim-kaoriya.googlecode.com/files/macvim-kaoriya-20110330.dmg
Xcode 4でビルドしています。
Mac OS X 10.5 Leopardを使用されている方、Intel、PowerPC 問わず、動作確認にご協力いただけますと幸いです。
Vim 7.3.146、MacVim Snapshot 57、香り屋パッチ 20110323ベースです。
(2011/04/01 追記)
実験的レンダラを使用していない場合、半透明設定(set transparency)が効かなくなります。半透明設定を使用している場合は、「環境設定」「詳細」の「実験的レンダラを使用する」「インラインインプットメソッドを使用する」の両方をチェックしてみてくださいませ。
ラベル:
vim
2011-03-25
Xcode4でPowerPC
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /Developer/usr/libexec/gcc/darwin
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /usr/libexec/gcc/darwin
Xcode 4.0.1でも治ってませんでした。バグレポート忘れてたんですが。
これやっとくと、MacPortsでLeopard用のuniversal buildも可能になります。
$ sudo port install ncurses +universal macosx_deployment_target=10.5 configure.cc=/usr/bin/gcc-4.2 configure.cxx=/usr/bin/g++-4.2
ラベル:
OS X
『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その8
本屋にも並んでます『iOS 4プログラミングブック』。
補遺その8、というか、間違いのお知らせです。ごめんなさい。
iOS 4プログラミングブック 第5章
190ページ 図5-2-5「ヒープからヒープへのコピー」の先頭行に間違いがあります。
(誤) block_t block3_on_heap = Block_copy(block_on_stack);
(正) block_t block3_on_heap = Block_copy(block_on_heap);
@eyesrobe様に発見していただきました。ありがとうございます。
2011-03-03
『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その7
そろそろ浸透して話題にも上がらなくなってきた(?)『iOS 4プログラミングブック』。
補遺その7では、BlocksのObjective-C支援機能に切り込んでみます。
191ページに書いてあるとおり、Objective-Cのオブジェクトは、Block_copy時に自動的にretainされます。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *string = [NSString stringWithFormat:@"score = %d", score];
void (^block)() = Block_copy(^{
NSLog(@"%@", string);
});
[pool drain];
/* stringはblockからretainされてるから、まだ生きてる */
これどういう仕組みなんでしょう?
Objective-Cのオブジェクトは、みなNSObjectの子供。
NSObjectは、C言語としては、
__attribute__((NSObject))アトリビュートの付いた変数。てことで、Block_copy時に__attribute__((NSObject))のついた変数をretainして、Block_release時にreleaseするコードを、コンパイラは簡単に生成できるわけですね。
http://clang.llvm.org/docs/Block-ABI-Apple.txt
2.2.1 Importing __attribute__((NSObject)) variables.
しかし、この自動retainする機能。便利なのはいいのですが、実は気づかないうちに、循環参照してdeallocされない状況に陥ることもある諸刃の剣。
Blockが、Blockをretainしているクラスのselfを自動retainしちゃう、という落とし穴。
詳しくは『iOS 4プログラミングブック』の193ページに!
2011-02-08
OpenGL ES 開発リソースまとめ
GPU作ってるとこのOpenGL ES 1.1/2.0開発リソースが、実は大変充実しています。まとめてみました。
また各サイトでWindowsやLinux用のOpenGL ES 1.1/2.0 emulator libraryが配布されてますので、iPhoneやAndroid向けに作ったOpenGL ES 1.1/2.0用のソースコードを、WindowsやLinux用にビルドして実行することが可能です。
各GPUごとの開発リソースは大変特色が出ているのですが、OpenGL ES 1.1/2.0経由で使うことになりますので、profilerなど専用なもの以外は、どれででも使えてしまいます。便利に使っちゃいましょう。
- ■POWERVR Insider http://www.imgtec.com/powervr/insider/powervr-insider.asp
- □主な使用機種: iPhone 3G(MBX),DROID(SGX530),iPhone 4/iPad(SGX535),Nexus S/Galaxy S(SGX540),NGP(SGX543),...
- ・POWERVR Insider SDK。COLLADAから変換したPOD形式を使って3Dモデルの描画、アニメーション可能。ソースコードのライセンスは非常にゆるい(forumのSDK Code Licenseスレッド参照)。
- ・PowerVR圧縮テクスチャPVR用コンバータ PVRTexToolなどのツールも充実。
- ・POWERVR Insider SDK。COLLADAから変換したPOD形式を使って3Dモデルの描画、アニメーション可能。ソースコードのライセンスは非常にゆるい(forumのSDK Code Licenseスレッド参照)。
- ■ADRENO GRAPHICS http://developer.qualcomm.com/dev/gpu
- □主な使用機種: Xperia,Nexus One,Desire,IS03,Regza,Windows Phone 7...
- ・Adreno™ Profilerが凄い。rootとったNexus OneなどをUSBケーブルで繋ぐだけで、リアルタイムにGPUの負荷やテクスチャ、描画結果を取得可能。
- ・Adreno向けに最適化されたOpenGL ES 2.0 shader source codeあり。でもOpenGL ES 2.0であればどこででも。
- ・Adreno™ Profilerが凄い。rootとったNexus OneなどをUSBケーブルで繋ぐだけで、リアルタイムにGPUの負荷やテクスチャ、描画結果を取得可能。
- ■TEGRA DEVELOPER ZONE http://tegradeveloper.nvidia.com/tegra/
- □主な使用機種: dynabook AZ,各種タブレット,...
- ・Android NDK用のサンプルコードはApache License 2.0。JNI経由で音を鳴らす方法なども含んでいるので、NDKで開発する場合は必見。
- ・EclipseでNDKをデバッグするためのNVIDIA Debug Manager for debugging Android NDK applications in Eclipse とかあったりする。
- ・Android NDK用のサンプルコードはApache License 2.0。JNI経由で音を鳴らす方法なども含んでいるので、NDKで開発する場合は必見。
- ■Mali Developer Center http://www.malideveloper.com/index.php
- □主な使用機種: コンシューマ製品があるかどうか不明
- ・Mali GPU Shader Development Studio。IDE的に結果をみながらshader開発が可能。
- ・Mali GPU Shader Development Studio。IDE的に結果をみながらshader開発が可能。
また各サイトでWindowsやLinux用のOpenGL ES 1.1/2.0 emulator libraryが配布されてますので、iPhoneやAndroid向けに作ったOpenGL ES 1.1/2.0用のソースコードを、WindowsやLinux用にビルドして実行することが可能です。
各GPUごとの開発リソースは大変特色が出ているのですが、OpenGL ES 1.1/2.0経由で使うことになりますので、profilerなど専用なもの以外は、どれででも使えてしまいます。便利に使っちゃいましょう。
2011-02-03
『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その6
楽天BOOKSで一時売り切れになるも、再度入荷中の『iOS 4プログラミングブック』。Amazonでは相変わらず在庫切れ...
補遺その6では、ちょっと趣向を変えてサンプルコードを説明してみます。
第5章マルチスレッドのサンプルコードは、実はTumblr Image Viewerになっていたり、cocos2d for iPhoneを使っていたりする、実戦さながらのサンプルコードとなっております。
今回はcocos2dでの非同期テクスチャ読み込みについて掘り下げてみます。
cocos2dの非同期テクスチャ読み込みAPIは、読み込み終了時にtargetのselectorを呼ぶコードになっています。これBlocksだと楽になるような気がしませんか? Blockを受け取って呼び出すClassを作ってみます。
■TextureCallback.h
/*
* 「5-1 Blocksの概要」(178ページ)
* TextureCallbackクラスにより、
* cocos2dのイメージ非同期読み込み終了コールバックを、
* Blocksに結びつけることにより、より簡単にコールバックを記述できます。
*/
#import "cocos2d.h"
/*
* 「5-2-2 値としてのBlock」(184ページ)
* typedefを使用したBlocksの宣言。
*/
typedef void (^textureCallbackBlock_t)(CCTexture2D *texture);
@interface TextureCallback : NSObject
{
textureCallbackBlock_t block_;
}
/*
* イメージ非同期読み込み終了コールバックで実行されるBlockを指定。
*/
+ (id)callbackWithBlock:(textureCallbackBlock_t)block;
- (id)initWithBlock:(textureCallbackBlock_t)block;
- (void)callback:(CCTexture2D *)texture;
@end
■TextureCallback.m
#import "TextureCallback.h"
@implementation TextureCallback
+ (id)callbackWithBlock:(textureCallbackBlock_t)block
{
return [[[self alloc] initWithBlock:block] autorelease];
}
- (id)initWithBlock:(textureCallbackBlock_t)block
{
if ((self=[super init])) {
/*
* 「5-2-4 Block_copy」(188ページ)
* 渡されたBlockをretainするためにObjective-Cのcopyを使用。
*/
block_ = [block copy];
}
return self;
}
- (void)dealloc
{
/*
* 「5-2-4 Block_copy」(188ページ)
* retainしたBlockをreleaseするためにObjective-Cのreleaseを使用。
*/
[block_ release];
[super dealloc];
}
- (void)callback:(CCTexture2D *)texture
{
/*
* 「5-2-2 値としてのBlock」(184ページ)
* cocos2dのイメージ非同期読み込み終了時Blockを実行。
*/
block_(texture);
}
@end
て感じで。使うときは
#import "TextureCallback.h"
/*
* 非同期イメージ読み込み終了時に
* 実行されるBlockを指定。
*/
TextureCallback *textureCallback =
[TextureCallback callbackWithBlock:
^(CCTexture2D *texture) {
[self addTexture:texture index:index];
}];
/*
* cocos2dの非同期イメージ読み込み
* (要メインスレッド(Main Queue))
*/
[[CCTextureCache sharedTextureCache]
addImageAsync:path target:textureCallback
selector:@selector(callback:)];
さらに、
+ (id)addImageAsyncWithBlock:(NSString *)path block:(textureCallbackBlock_t)block
{
id textureCallback = [[[self alloc] initWithBlock:block] autorelease];
[[CCTextureCache sharedTextureCache]
addImageAsync:path target:textureCallback
selector:@selector(callback:)];
return textureCallback;
}
こんな感じのクラスメソッドにすれば、
#import "TextureCallback.h"
/*
* 非同期イメージ読み込み終了時に
* 実行されるBlockを指定。
*/
[TextureCallback addImageAsyncWithBlock:path block:^(CCTexture2D *texture) {
[self addTexture:texture index:index];
}];
あらすっきり。
CCTextureCacheは渡ってきたtextureCallbackをコールバック終了までretainするので、コールバック終了までちゃんと生存。textureCallbackで持つことになるblockもtextureCallback生存中はretain(copy)されるので、メモリ管理も簡単、安心。
iOS 4プログラミングブックのサンプルコードは、http://www.impressjapan.jp/books/2976のダウンロードよりどうぞー
2011-02-02
MacVim-KaoriYa 20110202
MacVim-KaoriYa 20110202版をリリースしました。
http://code.google.com/p/macvim-kaoriya/
http://macvim-kaoriya.googlecode.com/files/macvim-kaoriya-20110202.dmg
http://code.google.com/p/macvim-kaoriya/
http://macvim-kaoriya.googlecode.com/files/macvim-kaoriya-20110202.dmg
ラベル:
vim
2011-01-31
『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 まとめ
2011年1月27日発売の『iOS 4プログラミングブック』。このうち
- ■第5章 マルチスレッド - Blocks、Grand Central Dispatch の詳解。57ページ。
- ■第10章 ユニバーサル対応 - ユニバーサルアプリケーションについて。15ページ。
- ■第10章 ユニバーサル対応 - ユニバーサルアプリケーションについて。15ページ。
を書かせていただきました。
この「第5章 マルチスレッド」にて、ちょっとAdvanced過ぎるかも、と思った内容を補遺として連載しています。
- 「__block修飾子」について
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その1
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その2
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その3
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その4
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その5
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その2
- 「サンプルコード」について
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その6
- 「Blocks」について
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その7
- 本の間違いについて
- ■『iOS 4プログラミングブック』 第5章マルチスレッド 補遺 その8
登録:
投稿 (Atom)

