2011年11月29日火曜日

NSInvocationでターゲットオブジェクトのメソッドコール

よく、オブジェクトの初期化メソッドで
[[AClass alloc] initWithTarget:self selector:@selector(hello:)];
などとしておいて、後で AClass から [self hello:…]をコールしてもらうということがありますが、これってどうやって実現しているんでしょうか?
方法はいくつかありますが、そのうちの一つが NSInvocation を使うという方法です。
cocos2d の内部でも使われていました。

NSInvocation オブジェクトの作成は以下のようになります。

2011年11月24日木曜日

Dr.Mandala ver.2.1予告

Dr.Mandala ver.2.1 を Apple に申請しました!
遅ればせながら iOS 5 をサポートしました。もうしばらくお待ちください。(公開しました)



Dr.Mandala は僕の最初の iPhone アプリで、ver.1.0 のリリースから、かれこれ2年近く経っております。

Auto モードのヴィジュアルエフェクトが、とても気持ちいいアプリなのですが、スクリーンショット画像だとそれが伝わりません…。

そもそも「回転する模様を眺めて楽しむ」という、ニーズが多くなさそうなものを作ってどうするのだ、という意見もありますが…。
最初の1年半は、酷評されたりもして、かなり落ち込みました。

それから機能を選別していきまして、更に今回はいろいろと決断をしました。

  • 体験時間の制限を削除。
  • サウンドエフェクトの制限を削除。
  • 広告の挿入。(製品版へアップグレードしますと表示されなくなります)

Dr.Mandala は無料でダウンロードできるのですが、製品版へアップグレードして頂きたいために体験時間を制限していました。今回は、それを撤廃しました。サウンドエフェクトの制限も同様です。

また、ヴィジュアルエフェクトとサウンドエフェクトも若干変更して、ちょっとずつパワーアップしています。
以下のスクリーンショットは、Dr.Mandala ver.2.1 の Auto モードプレイ中をスクリーンショットしたものです。
未体験の方は、ぜひ一度 Auto モードをお試し下さいませ!

Dr.Mandala スクリーンショット



2011年11月16日水曜日

cocos2dでテクスチャーループ

cocos2d(1.0.1)でテクスチャーループを使ってみました。
テクスチャーループとは、1つの大きなスプライトの中に、スプライトより小さなテクスチャーをループして貼り付ける方法です。
背景画像に使ったり、色々なところで重宝します。

やり方は、OpenGL ES の知識がちょっと必要ですが、難しくはありません。
今回は、cocos2d テンプレートプロジェクトの Hello World を改造して取り組みました。

テクスチャは以下の4種類の画像を用意します。
左から64×64、64×128、64×100、50×128のサイズです。
4つのサイズのテクスチャを用意
テンプレートプロジェクトを作成したら、CCSprite のサブクラスをひとつ作ります。
ファイル名は Background.m と Background.h にしました。
// Background.h
#import <foundation/foundation.h>
#import "cocos2d.h"

@interface Background : CCSprite {
}
+ (id)backgroundWithRect:(CGRect)rect;
- (id)initWithRect:(CGRect)rect;
@end
// Background.m
#import "Background.h"

@implementation Background

+ (id)backgroundWithRect:(CGRect)rect
{
 return [[[self alloc] initWithRect:rect] autorelease];
}

- (id)initWithRect:(CGRect)rect
{
 if ((self = [super initWithFile:@"worm64x64.png" rect:rect])) {
  ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
  [texture_ setTexParameters:&params];
  
  self.anchorPoint = CGPointZero;
 }
 return self;
}
backgroundWithRect: メソッドでスプライトのインスタンス化を行います。その際にrect パラメータで、スプライトのサイズとポジションを指定します。

initWithRect: メソッドで、ループテクスチャーの設定を行います。
ccTexParams 変数に、テクスチャーの縦横伸縮方法(サンプルではLinear)、縦横ループ方法(サンプルではRepeat)を格納し、CCSprite の texture_ メンバ変数にテクスチャーパラメータとして設定してやります。これで完了です。

早速表示してみましょう。HelloWorldLayer クラスの init メソッドを以下のように修正します。
// HelloWorldLayer.m
#import "Background.h"
-(id) init
{
 if( (self=[super init])) {
  CGSize size = [[CCDirector sharedDirector] winSize];
  Background *bg = [Background backgroundWithRect:CGRectMake(0,0,size.width,size.height)];
  [self addChild:bg];
 }
 return self;
}
結果は以下のようになりました。テクスチャーのサイズは64×64です。
ちなみにこれをループさせないと、以下のようになります。
テクスチャーの貼付け位置は、スプライト内の左上が起点となっています。
64×128のテクスチャーの場合は以下のようになります。
テクスチャーサイズが2のn乗でない場合はどうでしょうか。
64×100のテクスチャーで試してみました。
縦のループが128(2の7乗)に補正されていますが、テクスチャーは元のままです。

同じく50×128のテクスチャーで試してみます。
横のループが64(2の6乗)に補正されているのが分かります。

このように OpenGL ES では、テクスチャーのループが2のn乗サイズで行われることが分かって頂けたかと思います。

2011年11月14日月曜日

「はっぱ」が42位に!

App Store にて、「はっぱ」が教育・無料部門で42位に入りました。


本当に嬉しいです。ありがとうございます。

記念に、主なレビュー記事をまとめてみました。

iPhone Painters Japan
http://necojarashi.blogspot.com/2011/09/iphone_28.html

Touch Lab - タッチ ラボ
http://ipodtouchlab.com/2011/10/happa-iphone.html

meet-i
http://web.meet-i.com/?type=iphone&q=%E3%81%AF%E3%81%A3%E3%81%B1&x=0&y=0

『iPhone』オススメ情報-.JP-
http://ameblo.jp/shoukai-jp/entry-11035267561.html

iPhone女史
http://www.iphone-girl.jp/application-review/141341.html

AppBank
http://www.appbank.net/2011/11/12/iphone-application/320502.php

ワオっち!
http://waochi.wao.ne.jp/appli/4552.html

2011年11月10日木曜日

iOS5のpresentingViewController

photo-12 by tubes.
photo-12, a photo by tubes. on Flickr.
iOS 5 で UIImagePickerController を使用して、カメラUIを表示させるまでは良かったのですが、これが消せないという問題に遭遇しました。

「iOS カメラプログラミングトピックス」という Apple のドキュメントを参考にしていたのですが、例えば、カメラUIをキャンセルした時のコードは以下のような感じになっています。
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
 [[picker parentViewController] dismissModalViewControllerAnimated:YES];
 [picker release];
}
しかし iOS 5 では、これだとうまく動きません。
[picker parentViewController] からは nil が返ってくるからです。

2011年11月8日火曜日

AdWhirlのCustom Eventを使う

Custom Car June 2011 by NickGrant.co.uk
Custom Car June 2011, a photo by NickGrant.co.uk on Flickr.
AdWhirl で標準対応していない広告サービスを使うには、Custom Event という仕組みを使います。
使い方について需要がありそうなので、書いてみます。

実はめちゃくちゃ簡単です。
ただし、AdMaker なら AdMaker SDK を、AdLantis なら AdLantis SDK を単独で組み込んで使用できるスキルは必要です。(笑)

AdWhirl の管理画面で、Custom Event を登録します。
Apps の Ad Network Settings で、Add Custom Event というボタンを押します。

AdWhirlとAdStirを比べる

Advertising by Wrote
Advertising, a photo by Wrote on Flickr.
先日リリースしたばかりの iPhone アプリには、AdMaker(mediba ad) を組み込んでいたのですが、これがほとんど広告を配信してくれない状態が続いています。
こういう事があるかもしれないと前々から思ってはいたのですが、最悪のタイミングで起こってしまいました。

それで広告切り替えシステムを導入する気になりました。
試したのは2つ。AdWhirl(3.0.0) と AdStir(1.0.2) です。
AdWhirl は Google 傘下の AdMob のサービスで、SDK はオープンソースになっています。
AdStir は ngi group のサービスで、最近始まったばかりのようです。SDK はフレームワークのみの提供です。

2011年11月5日土曜日

ショートゲーム Worrrm

iPhone/iPod touch 用ゲームの Worrrm をリリースしました。



プレイヤーが標的の中に居続けると、得点が加算されるというシンプルなゲームです。
1回のプレイ時間が短く、ほんのちょっとした時間や気晴らしにプレイしていただくことができます。

遊び方

デバイスを傾けた方向にプレイヤーが移動します。敵ワームに触れないように標的の中に入って下さい。ゲームスタートです!

標的の中心に近いほど、得られる得点が高くなります。ですが、敵ワームに囲まれてしまうリスクも高くなります。

時々現れる緑色のワームがアイテムを置いて行きます。
アイテムを取ると、短い時間、チョウチョに変身することができます。
その間に敵ワームに触れると、高得点ゲットです!

Game Center に対応していますので、他のプレイヤーと得点を比較することができます。

アプリ基本情報

アプリ名:Worrrm
価格:無料
ダウンロードURL:http://itunes.apple.com/jp/app/worrrm/id468015254?mt=8



2011年11月2日水曜日

はっぱ、バージョン1.3

葉っぱが舞い落ちる、お絵かきアプリ「はっぱ」のバージョン1.3がリリースされました。
今回は蝶が追加されて、更に画面が華やかになりました。

更新内容

  • 新しいキャラクター「蝶」が追加されました。
  • iOS5に正式に対応しました。

アプリの基本情報

アプリ名:はっぱ (海外名称:Leaves Paint)
価格:無料
ダウンロードURL:http://itunes.apple.com/jp/app/id464291736?mt=8
サポートURL:http://www.hash.rojo.jp/garbage/iphone/leavespaint/jp/

アプリの概要

描いた絵の上に、葉っぱが舞い落ちるお絵かきアプリです。
お絵かきした線の上に、舞い落ちる葉っぱが積もり、キャンバスをカラフルに飾ってくれます。
お子様はもちろん、絵の苦手な大人の皆様もぜひお絵かきを楽しんでみて下さい。
Related Posts Plugin for WordPress, Blogger...