Road to OpenGL ES (2)

cocos2d for iPhoneを試してみる

まずはcocos2d for iPhoneを試してみる事にしたました。
cocos2dは文字通り2Dのグラフィックス・フレームワークです。多くのAPIはOpenGL ESに対応しており、多彩なグラフィックス表現ができます。

ライブラリのサンプルを実行するだけでもその機能の奥深さが伺えます。

OpenGL ESだけではなく文字列などにも対応しており、UILabelなどを使わずに日本語を表示したりも出来ます。

cocos2dにはインストーラも付いていて、これを起動するとxcodeのテンプレートをインストールしてくれます。パッケージをダウンロードしたディレクトリーに移動し、ターミナルから下記の様に実行します。


 $ ./install-templates.sh
 

これによってxcodeから”File” -> “New…” -> “New Project…” と進むと

このようにテンプレートを選ぶ事が出来ます。

Universal Applicationも作成出来ます。便利ですね。

もちろんこのプロジェクトの中で開発を進めれば効率よくエフェクトなどをインプリしたアプリが出来ると思います。

 

ただ個々で私にとって問題なのが以下の点です。

  • Interface Builderが使いにくい
  • フレーム・ワークが強く結びつきすぎている。
  • 2D

最初の2つは努力次第でなんとかなるのではないかと思います。

RootViewControllerもUIViewControllerのサブクラスですし、そこで生成されるビューもUIViewのサブクラスのEAGLViewで見慣れた感じの構成です。

3番目の2Dもエフェクトなどで3Dっぽく見せる事は可能だと思います。何より全てがオープン・ソースですので、いざとなれば将来のiOSのバージョンアップ等に対しても自分で対応は可能だと思います。

実際に今までのプロダクトの中でもcocos2dのルーチンを参考にさせてもらって部分もあります。依存関係の薄いルーチン群でしたらとても重宝に使えます。

しかしやはり今回は3Dにコダワリを持っていますので、cocos2dの採用については保留にしておく事にします。

 

xcode 4.xでのOpenGL ESテンプレート

xcode 4.xの”OpenGL Game”で生成されるテンプレートは使うつもりはありません。このテンプレートで生成されるプロジェクトがiOS 5.xをベースとしたGLKViewを使っているからです。おそらく生産性は良いのでしょうがrequirementをiOS5.0にするのには抵抗があります。OpenGL ES 2.0ベースにするだけでiPhone3Gを切り捨てなくてはなりません。そのうえiOS4.x以前を切り捨ててしまうのはマーケットの大きさとして大丈夫かな?と単純に思います。

Appleが各デバイスや各iOSの出荷数などを公表してくれれば別ですが、今の所は不採用としたいと思います。

 

 

 

 

 

 

 

 

 

 

 

 

Road to OpenGL ES (1)

例によって定期的に書いていくわけではありませんが、新たなカテゴリーとしてOpenGL ESについて少しずつ買いて行こうと思います。

 

OpenGLはSilicon Graphicsが最盛期の頃から名前だけは知っていましたが、なかなか使う機会がありませんでした。それがヒョンな事から興味の焦点が集中しリサーチをしています。

きっかけはiOS5.0から採用された Using Core Image Filters です。これを使ってアプリを作ってやろうかなと思ったのですが、Mac OS Xと比べると意外と制約が多かったりして諦めました。しかしその一方でアプリを開発する上で重要な「見た目」について掘り下げて行くと「はやり3Dかな?」なんて思うようになりました。

そんな気軽な思いで色々調べておりました。

もちろん今の時点でOpenGL ESのAPIについて詳しく知りません。サンプルのソースを見ながら「へ〜」と思う程度です。

そもそも前提となるのは以下の点です。

  • 面倒くさい事はしたくない(工数を膨らませたくない)
  • でも細かい所に手を入れられるようにしたい。
  • パフォ=マンスで妥協したくない
  • プログラマーとしての充実感も味わいたい。。

最初の障害として立ちはだかった壁は最初の「面倒くさい事はしたくない」でした。OpenGLでそのままプログラミングしようとするとどうしても三次元の座標を処理しながらAPIに渡して行かなければならないと言う事でした。

素人っぽくて申し訳ないのですが、てっきりOpenGLには「球を書く」とか「立方体を書く」くらいのAPIはあるんだと高をくくっていましたが、いざ明けてみるとそれすらも無い。

「おいおいどうするんだ?座標を全部拾えって?冗談でしょ…」と思った所で最初の障害にぶつかってしまいました。

 

ハイレベルなテクニカルの内容を期待した人がいましたら申し訳ございません。

第一回目はこのへんで…

 

ひらがなマスター「あいうえお」 1.4

ひらがなマスター「あいうえお」 1.4 をリリースしました。

 

新しいバージョンでは「ひらがなパズル」で文字をタップすると、その文字を読んでくれます。

文字と音を結びつけて学習する事が出来ます。

 

え?ワールド・ビジネス・サテライトで?

昨日(11/18)のTV東京でやっているWBSを妻と一緒に見ていましたらスマフォ・アプリの開発者が足らないとかいう内容で、冒頭に何故かぽけっと定規が画面に!妻と一緒に目を疑ってしまいました。
ちょっと超えかけてよ。
そんでもって無料アプリじゃなくて、有料アプリの方を出してよ(^^;

ちなみにその時も広告にiAdは表示されていませんでした。
僕もまだ2回しか見た事が無い幻の広告。
しかしiAd Networkで確認すると日本でも毎日、そこそこの数の人がiAdの広告を見て、クリックしてくれている事になっています。

時計の学習 − 「いまなんじ?」 1.1

 時計の学習 −「いまなんじ?」 1.1 をリリースしました。

 

今回のリリースでは、間違って答えてしまった場合にそれぞれの問題の後で正しい答えを見る事が出来るようになりました。

 

◯とけいを あわせる

 

◯とけいを よもう

 

Thread内ループの停止

ツイッターの @iphone_dev_jp でお問い合わせを受けましたので、久しぶりに技術的なコラム(^^;

iOSでもThreadがサポートされており、マルチスレッドでの処理が可能な事はご存知だと思います。ここではiOS4.0以上でサポートされているGCDでの例を挙げます。

並列して処理をしたい場合、Threadを生成して平行して処理をさせる事は有効だと思います。マルチコアCPUをサポートしたiPad2やiPhone4Sでは特に処理効率が有効になると思います。
それにThreadを使用すると一つの処理をまとめて「ポイッ」と投げてしまう事が出来ますので、開発上も楽チンだと思っています(ただし何でもカンでもThreadにする必要はないですし、余計に面倒くさくなります)。

普通に使われているiOSもanimationで内部的にはThreadが使われているため、「ポイッ」と投げてやれば勝手にanimationを行ってくれます。

しかしThreadの中で持続的にループを指せようとする場合には問題があります。
Threadを生成したObjectをreleaseしてもそのThreadは自動的に停止してくれる訳ではないのです。

当然僕も「何かThreadを停止させるAPIは無いのか?」と思いました。で、探したのですが見つかりません。もしかしたら僕の探し方が悪いのかもしれませんが、少なくとも僕にはそういうAPIが見つかりませんでした。

そこで…


@interface TimerView : UIView {
    BOOL started;
}
-(void)startTimer;
-(void)stopTimer;
@end

 


@implementation TimerView
-(void)startTimer {
    if(started == NO) {
        started = YES;
        dispatch_queue_t queue;
        queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
        dispatch_async(queue, ^{
            while(started) {
                useconds_t useconds = 5000;
                usleep(useconds);
                スレッドの中でやらせたい事
                if(CONDITION) {
                dispatch_async(dispatch_get_main_queue(), ^ {
                    描画等の処理をする
                });
            }
        }); 
    }
}

-(void)stopTimer {
    started = NO;
}

@end

 

上のソースでは単純にThread内でループを作り、StopTimerメソッドでstartedNOにしてやるだけです。
5000 ミリ秒ごとに起き上がってくる処理の中でチェックし、終了してしまいます。
Threadの中ではしてはイケナイ事が幾つかあります。例えば描画処理等もそれです。それらは


                dispatch_async(dispatch_get_main_queue(), ^ {
                    描画等の処理をする
                });

の中で行います。

ひらがなマスター あいうえお 1.3

「ひらがなマスター あいうえお 1.3」をリリースしました。

あたらしいバージョンでは「ひらがな を かこう」で、一覧の中から練習する文字を選べられるようになります。

 

My name is Taro Yamada.

iPhone 4Sの中に入っている Siri。

日本語には対応していないため、十分に使いこなす事が難しいですね。改めて自分の英会話力の程度を思い知らされます。

自分の名前さえも認識してくれませんから。

 

ところでSiriを使ってメールを送る場合には、相手先は「連絡先」の中の「読み」を参照しているようです。ですのでそこをアルファベット表記してやれば認識してもらえる可能性が増えます。

でもここでも問題が…

自分の名前をローマ字表記しても「ネイティブは何て読んでいるんだろう?」

ローマ字のままで読んでも認識してくれる確率はかなり低いです。

で、見つけたのが「Repeat After Me」。Xcode 4.2の中に入っています。

 

これを使うとローマ字入力した名前の読み方を、実際に発音して教えてくれます。その真似をするとかなり認識率が高まります。

 

また「連絡先」で「妻」に登録しておいてやると

“I want to send email to my wife.”

なども認識してくれます。

 

 

iPhone 4S from au

予約してあったiPhone 4Sを取りに行ってきました。

混雑を防ぐためにauショップの方からあらかじめ来店時間を聞かれていましたので、開店の10時ちょうどに行ってきました。

 

 

先に待っているお客さんもいませんでしたので1番乗りです。すぐにカウンターに案内されました。

料金プランやなんやらを聞かれ、担当者が端末入力したり何やらで、結局店を出たのは11時半頃です。

家に帰ってSyncしないと何も出来ないと思いきや、昨日のiOS 5.0のアップデートが功を奏し、Apple IDさえ入力してやればiCloudを使った同期でアドレス帳などもいつの間にか同期されていました。とはいえアプリはまだですので、使える物と言えば「設定」での入力の際にボタンが付いてダウンロードが直ぐに出来るTwitterくらいでしょうか。

まずは最寄りの喫茶店に入り、あれこれ設定を始めました。

最初に設定したのがezwebのメールアドレス。

今まではずっとドコモを使っていましたので新たにezwebのアドレスを取得する所から始まりました。

設定方法は店で簡

単な手順書をもらいましたのでそれに従って…

しかし困ったのが「メッセージ」(SMS)を使って登録用のURLを取得しなければならないという所でした。一見何でもない事なのですが、宛先に「#」を付けた番号を指定しなければなりません。

ところがソフトウェアキーボードのどこを押しても「#」が出て来ないのです。

「設定」でキーボードの設定をいろいろいじりましたが解決しません。

困った…と思ったとき、カーソルを本文の所に合わせるとキーボードが変わりました。当然ですが、ここでは何でも入力出来るのです。さっそく「#」を打ち込み、Copy & Pasteで宛先に注力。

後は返信で帰って来たURLをタップして新規にメールアドレスの取得です。

 

しかしここでまた…

普通のケイタイでしたらそのまま携帯用のメールアドレスが使えるのですが、iPhoneの場合には登録しなければなりません。

設定の「メール/連絡先/カレンダー」で登録です。

取得したメールアドレスやSMTPのサーバを入力し「さてこれでOK!」と思いきやユーザ名かパスワードが違いますと弾かれてしまいます。

よく手順書を見ると、ここで入力するべきユーザー名はメールアドレスではありませんでした。先ほどのアドレス登録処理を行った後に「メッセージ」でに帰って来た内容。そえを入力しなければなりません。

とはいえこのユーザ名とパスワード、ランダムに生成されたっぽいもので、簡単には覚えられません。「ん…」と考えていると「編集」ボタンというのが画面の右上に見え、それをタップしてやると、個々のメッセージをコピーする事が出来ました。とりあえずそれをメモ帳に張り付け、ユーザ名とパスワードをそれぞれ設定してやる事で何とかメール設定まで無事に完了しました。

そしてちょっとビックリしたのはiPhone 4SにはSiriが入っています。何かで初回出荷ではお預けとか言われていましたし、昨日iOS5.0を入れたiPod Touch 4には入っていませんでしたので。iPod Touch 4にもマイクはあるにはありますが、やはりちょっと違うのかもしれません。

日本語には対応していませんし、まだ試してもいませんので使い勝手等は何とも言えませんが楽しみです。

 

 

 

iOS 5.0

とうとう本日、待望のiOS 5.0が出ましたね。

それに合わせて昨日はiTunesのアップデートがありましたし、今日はLionのアップデート。

一度アップデートしてしまえばWi-FiリンクでもうPCやMacに直接繋げる必要も無くなりました。

それよりも今後はOTAでiOSさえもネット経由で配信されるため、iOS 5.0にアップグレードしてもらえば開発者側としても楽になります。もちろんAppleも…

文字通りPC Freeになってしまいました。

 

GM Seedから使いだした感想としては、ますます便利になったと思います。

気に入っている機能は「通知センター」、「iMessage」、「リマインダー」、「Wi-Fiシンク」などです。

 

中にはBeta Seedを入れていた方々で正規版のiOS 5.0へのアップグレードに手間取っている方もいるかもしれません。私もそうでした。

既にGM Seedが入っているとiTunesの「アップデートを確認」ボタンを押しても「このバージョンのiPodソフトウェア(5.0)は最新バージョンです。」と表示されてしまいます。

ではどうすれば?

iTunesで「アップデートを確認ボタン」の下の「復元」ボタンを押す事でアップデート出来るようです。

 

明日はiPhone 4Sの発売です。

個人的にはソフトバンクを快く思っていなかった私としてはauから出るiPhoneを楽しみにしています。

もちろん予約済みです。