2009年10月18日日曜日

タイトル画面

起動後のロゴからタイトル画面まで表示できるようにしてみました。
後は、開始時の表示を付ければゲームらしくなりますね。

その後はゲームオーバーを付けて、ゲームとしての流れができるように目指すことにしましょう。

2009年9月19日土曜日

審査通過!

今朝、iTunes connectからメールが来まして、バージョン1.1がリリースされました!
今回も審査期間は2週間でした。

2009年9月5日土曜日

提出



セーブ機能が出来ました!!
お城で3つの中から好きなところへセーブできるようになります。
これで、やりこみゲームの仲間入り?

ということで、早速提出しましたっ。
はてさて、アップデートの審査はどのくらいかかるのかな。

2009年9月3日木曜日

保存機能その2

保存と読み込み処理を進めています。
読み書きできるようになったので、後はボタンを表示すれば完成です!!

今週末には審査に出せるといいな。

2009年9月2日水曜日

保存機能

ワタシは勇者か?をリリースしてから、日本語、英語それぞれで「セーブ機能を!!」というご意見をたくさんいただきました。

ということで、現在実装中です。3つまで保存できるようにしようと考え中です。
実装出来次第アップデート申請しますので、しばらくお待ちくださいませ。

2009年8月28日金曜日

リリースされました!


今日iTunes Storeからメールが来まして、審査通過の連絡を受けました!
14日に提出したので、審査期間は約2週間ですね。

まずは第一歩。無事リリースできてよかったです☆

さて、これからです。
毎日300ものアプリがリリースされていると読んだことがあります。
当然このゲームもそのうちの1つとして埋もれています。
まずは存在を知ってもらわないと何も始まらないわけです!

2009年8月15日土曜日

完成!

初めてのiPhoneアプリ「ワタシは勇者か?」が完成しました。
ということで、早速申請用にビルドして提出しました!



なにぶん、何から何まで初めてのことなのでいろいろあるとは思いますが、とにかく、作れてよかったよかった。

2009年8月11日火曜日

言語切り替え

音楽の差し替えと言語切り替えに対応しました。



あと描画周りでいろいろ調べているうちに、今のやり方より効率の良い方法が見つかったので直そうと思ってます。
ということで、技術的目処が立ったのでプロトタイプ作成は終わりとし、本番用の実装を進めていきます!

2009年8月8日土曜日

文字が付きました。

日本語と英語を切り替えられるようにして、文字が表示できるようになりました。



HPが付くと大分ゲームらしくなりますねー。
演出面はまだできていませんが、ゲームとなる骨格部分ができてきましたね♪

2009年8月1日土曜日

ゲーム状態の切り替え

ゲームらしさといえば、状態遷移。
ということで、ロゴ表示からゲーム画面に切り替えられるようにしました。



タイトル画面やオープニングは飛ばしていますが、ちゃんと城にも入れるようになりました。
入る時のフェードイン・フェードアウト等の細かい演出はできていませんが、少しずつiPhoneアプリの作成に慣れてきた感じです。

あと、実機で確認する時に、iPhone 3Gと iPhone 3GSで動きの違いがありました。メモリアクセス速度が違うのはわかっていたのですが、効果音の再生で問題が。

どうやら、3GSでは AudioServicesPlaySystemSound で効果音が鳴らせない?細かいエラー内容は見ていませんが、調べたところBGMの再生で使った AVAudioPlayer を使うとちゃんと鳴るようです。謎です。

2009年7月27日月曜日

画面のフェードイン・フェードアウトと音の再生

ロゴ画面を作成してみました。
画像と音はPCゲーム用のやつをそのまま再利用。
メディアデータはそのまま使えていいですなー。


ちゃんと再生できました!

2009年7月26日日曜日

最初のゲームっぽいアプリテスト

タッチした座標にキャラが歩くというテストアプリを作ってみました。


メモリリークの原因調査に半日くらいを費やしてしまいました(泣)
シミュレータだと動いていたものの、実機だとメモリをまたたく間に食いつくしてしまったようです。

タイマー、タッチ判定、ドット絵の加工がひとまずできるようになりました♪
お作法がまだわからないことが多いのですが、少しずつ理解していけることと思います。

ピクセルデータへのアクセス

ゲームを作るのに必須の手段。ピクセルデータへの直接アクセス方法です。

元画像としてUIImageへアクセスします。

UIImage *img;
int width = CGImageGetWidth (img.CGImage);
int height = CGImageGetHeight (img.CGImage);
CFDataRef inputData = CGDataProviderCopyData (CGImageGetDataProvider (img.CGImage)); UInt8 *pData = (UInt8 *)CFDataGetBytePtr (inputData);

pDataに先頭アドレスが入っているのでここからRGBと明るさの順でアクセスできます。
変更後は新しいUIImageへ変換してあげます。

CFDataRef data = CFDataCreate (NULL, m_pData, CFDataGetLength (inputData));
CGDataProviderRef dataProv = CGDataProviderCreateWithCFData (data);
CGImageRef img = CGImageCreate (width, height, 8, 32, width * 4,
CGColorSpaceCreateDeviceRGB (),
kCGImageAlphaLast,
dataProv, NULL, 0, kCGRenderingIntentDefault);
UIImage *pImage = [[UIImage alloc] initWithCGImage:img];
[pImage autorelease];

pImageに新しいUIImageが出来上がります。後はこれを画面に表示させるもよし、保存するもよし。
UIImageを作り直さずに更新できればいいのですが、どうもよくわからないです。

最後に、使い終わったリソースを解放します。
どれを解放すればいいのかわからずに、UIImageViewのimageを更新し続けるとメモリリークして実機で落ちる現象が出てかなり悩みました。

CGImageRelease (img);
CGDataProviderRelease (dataProv);
CFRelease (data);
CFRelease (inputData);

矩形のコピーは以下のようにできます。

for (int y = 0; y < height; y ++) {
int posSrc = ((srcY + y) * widthSrcSize) + (srcX * 4);
int posDst = ((dstY + y) * widthDstSize) + (dstX * 4);
for (int x = 0; x < width; x ++, posSrc += 4, posDst += 4) {
UInt8 *pDataSrcTmp = &pDataSrc[posSrc];
UInt8 *pDataDstTmp = &m_pData[posDst];
pDataDstTmp[0] = pDataSrcTmp[0];
pDataDstTmp[1] = pDataSrcTmp[1];
pDataDstTmp[2] = pDataSrcTmp[2];
pDataDstTmp[3] = 255;
}
}

初めは UInt8 ではなく unsigned char でやっていたのですが、UInt8 にするとかなりスピードアップしました。何か変換が内部で走るのでしょうかね。

256色画像からフルカラーへ変換

お手軽な画素変換方法。

元画像を読み込んでUIImageに放り込んでおきます。
UIImage *img;

まずは画像情報の取得

CGImageRef cgImageTmp = img.CGImage;
int width = CGImageGetWidth (cgImageTmp);
int height = CGImageGetHeight (cgImageTmp);
int nDataSize = width * height * 4;

他にもCGImageGet*****というのがあるようです。

そして画像の変換

CGSize size = {width, height};
UIGraphicsBeginImageContext (size);
[img drawInRect:CGRectMake (0, 0, width, height)];
UIImage *imgSrcTmp = UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();

コンテキストに描画するとその状態に合った形式に変換されるようです。
コンテキストが何者なのか?詳しくはまだよくわかってません。
Windowsでいうデバイスコンテキストのようなものでしょか。
サイズの変更もできるようですが、拡大するとぼやけた感じになりますね。