■iPod touchを、音楽プレイヤーよりもPDAよりも、PCとして使うという心意気でがんばる■
Apple iPod touch |
買ってからやっていったことを、Web1.0形式でお送りいたします。
iPadはこちら→■
この下のことは、完全に iPod touch 保証外のことをやっています。
local linkくれぐれも、リスクを考えた上で。何かあっても自己責任でよろしくお願いします。
2010/09/26iQuasi88キーボード付いた |
SDL側に、iPhone標準キーボード表示機能が付いてたので、呼び出してみた。
SDL_Window *window = SDL_GetFocusWindow(); SDL_iPhoneKeyboardShow(window); |
うまくでたよ!
しかしながら、入力はうまくいかず。
SDL側で入力は拾えているみたいなのですが、iPhoneは「キーを離した時」が入力確定なので、キーを離した時点で「KeyDown」「KeyUp」が一気にきてしまい、Quasi88側でキー押下検出してくれませんでした。
KeyUPまでにディレイ入れれば行けるかもしれないけど、KeyDown拾えないと、エミュレータ的にできないことが多くなりそう。カーソルキーやファンクションキーも無いし、標準キーボードを使うのは、やめた方がいいですね。
ということで、以前のキーボードを付けた。SDLロジックの側に、UIWindow取得のメソッドを追加して、取得したUIWindowsにAddViewしてます。
SDL_uikitwindow.hに
extern UIWindow* SDL_GetUIWindow(void); UIWindow *currentWindow; |
を追加して、
SDL_uikitwindow.mに
int UIKit_CreateWindow(_THIS, SDL_Window *window){] : UIWindow *uiwindow = [UIWindow alloc]; currentWindow = uiwindow; |
で
extern UIWindow* SDL_GetUIWindow(void) { return currentWindow; } |
こんな感じに取得ロジック追加。
iQuasiの方でgraph.cをgraph.mにRenameしてから、
: #import <UIKit/UIKit.h> : static int open_display( int first_time ){ : UIWindow *uiWindow = (UIWindow*)SDL_GetUIWindow(); iQuasi88KeyboardView * uiView = [[iQuasi88KeyboardView alloc]initWithFrame:CGRectMake(0, 240, 320, 240)]; [uiWindow addSubview:uiView]; |
これでキーボード用のViewを追加。キーボードロジックは以前のがそのまま使えました。
キー入力できたー。
いつか、外付けキーボードにも対応したいとは思ってはいるのですが、KeyDown/KeyUpが拾えないことには、むずかしそう。むずかしいというか、むりそう。
ROMイメージやディスクイメージは、ファイル共有機能使ってiTunesから入れれるようできた。
方法は、info.plistに「UIFileSharingEnable」を追加してYESにするだけ。info.plistをXML PropertyList表示でうまくいかない場合は、標準テキストファイルで表示して直接XMLで書くといいです。一度アプリをアンインストールして再度インストール&実行しないとiTunes側に出てこないかも。
DocumentsフォルダのファイルがそのままiTunesで見れます。アプリ側からも、特に気にせずDocuments下のファイルとして扱えばいいだけ。
2010/09/21 Quasi88 for iPhone4.0 |
まだしつこくやってたりします。SDL1.3が、何気にちょこちょこアップデートされてますね。
動かすとこまでは来た。iOS4からなのかどうかわからないのだけど、Bundle以外のファイルをfopenできなかった…。うーん、そんなことないと思うのだけど、とりあえず動かすこと優先でROMをBundleに入れて動かしてます。
開発環境は普通のXCodeと公式SDKです。だからかな。
いつものサザンクロス。これも、ディスクイメージをBundleに入れてます。色が変なのはV2モードで起動してるから。
Retina対応ってどうやればいいんだろ。Retinaなら横640ドットいけるのになー。
Webで紹介されてる方式をSDL側に入れてみたけど、それだけだと特に変わりなかった。他にSDL/Quasi88側で対応するところあるんだろうな…。
HALFモード&V2モードで。下に出てる画面はバッファ初期化漏れ。とりあえずこれでいいっか。
なんか、下にあるfor iPhone3.0と似たようなスクリーンショットばっかだな。この先、同じようにキーボード組み込みで苦しみそう。
ひととおり動くとこまでたどり着けない可能性も高そう。せめて、Retina対応した画面を見てみたいなあ。
別のアプローチとして、SDL使わずに描画してみようかなあ、とかcocos2Dみたいな別のエンジン使ってみようかなあとか思って試してみたのですが
よけいに難しそうでした。僕には無理だ。
2009/12/20 Quasi88 for iPhone3.0もうちょっと動いた |
SDLのソース側に、無理やりUIViewを埋め込んだりして、キーボードとツールバー追加してみた。
(って簡単に書いてますが、結構苦労して試行錯誤したのでした…。位置も適当なまま。)
前のときは、SDLのキー入力イベント経由でキー入力させてたんだけど、よくよく考えれば、Quasi88側に直接キーコード渡せばよかったので今回はそうした。
設定画面はまだ何も作ってない。ROM/D88ファイルは、DCIMフォルダから読むようにしたんだけども、これだとセーブできないんだな。
2009/12/14 Quasi88 for iPhone3.0ちょっと動いた |
Graffitiっぽいキーボードモジュールを、何とかiPhoneOS3.xでも使えるようにできないかと頑張ってみたのですが、どうにも手詰まり。
3.0用のiKeyExは、今までのとつくりが変わってるのです。変則配置キーボードモジュールのサンプルソースがあればなんとかなるのかもしれないけれど…。
悔しいので、SDL for iPhoneの新しいやつで、Quasi88が動かないかどうか挑戦してみました。
おおー、動いたー。読み込みファイル名とかは全部ハードコーディングしてるし、キーボードも無いので、なんも操作できない状態ですが。
ベースWindowがSDL描画用になっちゃってるから、これにUIViewとかでパーツつけるなら、SDL側のソースも触んないとダメかもな。
iPod touch 2.* の時代
iPod touch 1.1.* の時代
スクリーンショットは後日に撮影してますので、日付とか状況とかはそのときのものとは限りません。
感想・質問は→のちな(nochina@hamkumas.net)までどうぞ。
2009年12月14日作成
2010年09月21日更新