2013年3月19日から22日のアイフォンアプリ開発日誌

2013年3月19日から22日のアイフォンアプリ開発日誌

アイフォン用のミニストーリーで、絵本風のRPGゲームを作ろうかと思って研究しています。
しかし、思った以上に作成する画像が増えてしまうことと、購入したゲームエンジンはアクションRPGであり、自分が作ろうと思ったのは、ドラゴンクエスト風のRPGであったので、そのまま簡単に利用できないこと、などがあり、RPGゲームを3ヶ月の短期間に作成するのは難しいと思いました。

そこで、いくつか同時並行的に進行していこうと思います。
まず、次の6月の公開は、他のゲームエンジンを使って簡単なものを作成しつつ、自分が作りたいRPGを模索していこうと思います。

RPGエンジンのソース解析、アイフォンアプリでRPGを作る、タイルマップの作り方(5)

タイルマップ作成のおさらい
 ここで、とりあえず、タイルマップ作成の手順をおさらいしてみます。
まず、大まかに説明すると、cocos2dを使用して、タイルマップを用いて、画面に表示させる場合、
1.Tiledアプリでマップを作成(タイルセット用の画像がすでに保有していることが必要です。)
2.XCODE開発環境にて,cocos2dより、CCTMXTiledMap *tileMap;CCTMXLayer *background;等を設定します。
3.プレイヤーや敵キャラを設定、これはTiledアプリのオブジェクトレイヤーで設定します。
4.そして、新しいタイルを読み込んで、“Collidable”と“True” をタイルプロパティで設定します。
詳しくは、次のサイト(英語)でご覧ください。
how to make a tile based game with cocos2d
5.この設定で、タイルの当たり判定が可能になります。つまり壁を突き抜けることがなくなります。
 単純にこのタイル判定方法がないと、IF文判定だらけになって、マップの変更のたびに、IF文を変更する必要があり、チェックも大変になります。
 こういった部分が、タイルマップを使う利点です。
 

今日のエラー

マップに設定したPlayerの位置を基準として、タイルが表示されない。つまり、プレイや画像が表示されず、左下のマップ(0,0)が表示されてしまいました。本当は、もっと上の方の位置が表示されていないといけません。

<先に結論を言えば、参考にしたコードのソースが間違っていたというオチでした。ソースもダウンロードできたのに動かないなんて
困ったものです。正常に動作するものと思っていたのに、誤植だったようです。
//self.position = viewPoint;
_tileMap.position=viewPoint;
として動きました。おかしいと思ったのです。プレイヤーの座標は記載されているのに、Tile画像の処理が見当たらないので、どこでタイル画像を処理しているのか不思議でした。単に誤植だったのです。

Playerオブジェクトの位置はきちんと設定されているので、マップは正常です。

ということは、XCODE側の設定が悪いことになります。
-(void)setViewPointCenter:(CGPoint)positionは問題なさそうです。
-(void)setPlayerPosition:(CGPoint)positionをチェックして問題なし。
-(CGPoint)tileCoordForPosition:(CGPoint)positionをチェックして、問題なし。
ここまで来るとわからないので、ソースをもう一度打ち直して見ます。
@synthesizeを入れてダメ

3/19
次回は、
1.マップのPlayerオブジェクトを左下を基準にしてマップを再度読み込んでみる。
つまり、現在のコードは、マップの左下が基準であって、どこにPlayerオブジェクトを配置しても良いようにはできていない恐れがあります。
ダメでした。Playerの位置ではありません。

// if( ! [director_ enableRetinaDisplay:YES] )
// CCLOG(@”Retina Display Not supported”);
コメントにしました。
実行しても同じでした。マップが正常に表示されずに、上手くいきません。

その後、

よくよく見てみるとタイルマップを動かしているコードが元のホームページに記載が無いと思われます。
そこで、タイルマップを動かしているサイトを参考にします。
また、self.position=position;となっているところがありますが、
tailMap.position=position;の間違いではないかと思います。
tailMapの座標をしているところがありませんから。
//self.position = viewPoint;
_tileMap.position=viewPoint;
として動きました。
どうやら、ホームページに記載されていたコードが間違っているようでした。

2.ダウンロードしたソースをもう一度入力して何が不足しているのかを確認します。
ここまでしなくてもよかったです。

English:
Running through for how to make tiled map
When you use tiled map,
1.
2.
3.

 次に、することは、
Cocos2DでiOSゲームを作る(44) タイルを並べた世界にエイリアン出現 | E v e r G i z m O エヴァー ギズモ
このページを参考にして他の手段をこころみます。
新規にプロジェクトを作成します。
プロジェクト名:2_myTile.xcodeproj

3/22
一部、他のクラスを使用している箇所がありました。
CGPoint position = [AnimationHelper convertToGL:touch];
CGPoint tilePos = [self convertToTilePosition:position];

AnimationHelperクラスを私は持っていない(ダウンロードするのが面倒)ので、

その箇所では、
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
CGPoint locationInView=[touch locationInView:[touch view]];
CGPoint location=[[CCDirector sharedDirector]convertToGL:locationInView];
CGPoint tilePos = [self convertToTilePosition:location];
[self centerTileMapAt:tilePos with:_alien];
#ifdef DEBUG
NSLog(@”_tileMap postion x=%f,y=%f”,_tileMap.position.x,_tileMap.position.y);
#endif
return YES;
}
のようにしました。

なお、このままのコードでは、マップが中心に移動するため、上下左右の端は、黒く表示されることになります。
そのため、見栄えが良くないと思ったら、マップの端になったら、キャラクターだけが移動するコードを追加する必要があります。
今回は、この部分は私の方でも作成しません。
さて、次回は、
なにしましょう。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RPGエンジンの解析、複数のタイルマップでプログラムの動作を確認する

3/17
プロジェクト名:QuexlorLite.xcodeproj
(RPGGameエンジンのサンプルです)

level1.tmxを開いて、どうなっているのかを確認しました。

Tiledアプリを開き、タイルマップの右下側に、オブジェクトとしてTeleport, doorなどがありました。
これをどのようにして使用すれば良いでしょうか。

プレイヤーがこのTeleportの領域に来ると、別の場所に移動するわけです。
そのトリガー、きっかけはどこのクラスで設定されているのでしょうか?−>コードを解析するよりも使い方を先に覚えようと思います。
このTeleportオブジェクトは
From, Toで設定してテレポート移動ができるようです。つまり2つ必要FromからTOしてきて、To側からFromへ移動できる。
また、warpで他のレベル、たとえばlevel2へ移動することができそうです。

どうやら、各tmxに記載されているオブジェクトのプロパティを調査すれば、簡単な処理はできそうな気がしてきました。
たとえば、プレイヤーがマップを動き、テレポートでマップ内のある場所へ移動し、レベルを代えるとき、つまり、マップを代えるときは、Warpを設定すれば良いと思います。

これで、簡単な画面移動はできそうです。

次は、敵キャラとの戦闘設定でしょうか
または、各キャラのパラメータとかレベルの設定はどうすれば良いのでしょうか?
3/18
ここで、Teleportをさせてみることにしました。そのためには、PlayerがTeleportの場所近くに設定されている必要があります。
そこで、Playerオブジェクトを移動させてみます。
上手くいきました。
 TiledでPlayerオブジェクトを移動させて、アプリ実行時にその位置に、Playerが表示されることが確認できました。
 そして、Teleportオブジェクトがそのまま利用できるかも確認できましたし、Warpオブジェクトも確認できました。
 これで、各Level間の移動もできます。
 
 なので、Teleportは、同じマップ内での移動で、Warpは、異なるマップ(Level)間の移動になります。
 これで、ドラゴンクエストのように、部屋の中から外に出るときは、Warpを使用し、同じダンジョン内での移動は、Teleportを使用すればよいことになります。
 
 

次は、level2.tmxをチェックします。

3/20
Level2.tmxはあまり変化無しです。

Level3.tmx

大きな変化無し

Level4.tmx

大きな変化無し。Level1をみれば、だいたいの構成がわかります。
Compornents of level3.tmx and Level4.tmx are almost same compornents of level1.tmx.
So I will make to see the level1.tmx.

3/21、3/22
次回は、サンプルに、
TeleportとWarpを入れてみましょう。
そうすれば、簡単な部分は作成できるかもしれません。

関連記事

「スポンサーリンク」


ツイートツイート
カテゴリー: iPhoneアイフォンアプリ開発, RPG、タイルマップ パーマリンク