9VAeきゅうべえiPad版のオフスクリーンを順番に実装していく。
オフスクリーン
9VAeでは、描画速度を速めるために、次の画像バッファを持っている。
- hbmpGdnA タイマーで画面全体の描画を行う。
- hBmpIcon 画面デザイン、アイコン画像を格納
- hbmpPic ページサムネイルや画面出力など汎用
- hbmpOff 背景など画面描画高速化のために使う
これらをメモリ上に確保し、それぞれ描画用コンテクストを割り当てることにした。コンテクストを複数持つのが問題であれば、描画直前に取得するように後から変更する。
無駄な処理を行なっているかもしれないが、まず全体を動かしてから高速化は後から検討する。
オフスクリーンの一部を同じ位置に画面転送するときに、一部を画像にしてから転送すると転送先の位置がずれることがあった。その場合、転送したい範囲にクリッピングを設定し、全体を転送するようにするとうまくいった。転送元と転送先の座標軸に反転があるみたいだ。こういう時はうまくいく方法を採用する。
ポップアップメニュー表示する時、背後の画像を覚えておき、メニューを消した後、復活される仕組みを実装。hbmpGdnAの中からメニューの範囲だけサブイメージとして記憶しておく方法を採用。
サンプル画像の読み込み
次はサンプル画像の読み込みをやってみよう。改造しているプログラムに保存、ツイッターに投稿というボタンがあったので、下を参考にして改造する。
アクションシートの基本をマスター:UIActionSheet | iPhoneアプリ開発大百科
ポップアップメニューの文字は検索でわかるのですぐ変更できた。実行される処理は、
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
の中に書くようだ。ボタンの順番に番号がついていて、それで処理を振り分ける。9VAeのサンプルを読み出す命令を実行することにした。9VAeきゅうべえの内部処理には全て番号がついているが、外部から使える命令だけ 9vaeDef.h に取り出すことにした。
バンドルの中のサンプルを読み出す方法
サンプルデータは、リソースの中に置く。画面データの読み込みに成功しているので、画面データの URLを取得し、そこからリソースが入っているフォルダパスを検出。
アプリケーションバンドル内のファイルの参照 - MARQUEの日記
CFURL関係の関数は以下
CFURL | Apple Developer Documentation
CFStringと char*の変換
c - Converting a CFStringRef to char * - Stack Overflow
これで、9VAeライブラリにフォルダパスを渡し、サンプルアニメの読み出しができるようになった。ムンクの叫びを読み込んだところ。
しかし、メニューバーの項目はどこに配置すると良いだろう。