1

私は、Cocos2dを使用してTiledApplicationTMXTiledMapで作成されたアイソメマップを読み取るiOSゲームに取り組んでいます。

[タイル]では、タイルセット内の各画像(つまり、画面の右下隅に表示される画像)にプロパティを追加できます。

これらのプロパティを使用して、このタイルタイプがゲームキャラクターによってトラバース可能かどうかを判断するのに役立てることは私にとって理にかなっています。

たとえば、タイル3,5が草の画像を使用している場合、陸上のキャラクターはそこを歩くことができます。

逆に、タイル4,8が水の画像を使用している場合、陸上のキャラクターはそこを歩くことができません。

これを実現するために、芝生と水タイルterrain_typeに、土地が0、水が1と呼ばれるプロパティを作成することを望んでいました。それから(私は望んでいた)実行時にタイル3,5にアクセスでき、どういうわけかタイル3,5がterrain_type=0

今、私は同じことを達成するために利用できる他のテクニックがあることに気づきました(オブジェクトレイヤーが思い浮かびます)が、これはそれを実行するための最良の方法のようです。特に、複数のタイルレイヤーを追加し、タイル3,5に草と壁の両方があることを知りたい場合は特にそうです。

私の質問:これは可能ですか?そして、私はそれについてどうしますか。または、TiledTMXTiledMapがどのように機能するかについて、何か誤解していますか?

とても有難い...

4

1 に答える 1

2

すばらしい。質問を投稿する前に、これを機能させるために多くの時間を費やしました。もちろん、数時間後にそれを理解しました。重要なのは、CCTMXMapInfoクラスを使用することです。

とにかく、これは他の人にも役立つと思うので、ここに解決策があります:

  1. Tiledアプリケーションで、「bottom」という名前のタイルレイヤーを持つマップを作成します
  2. 各画像を右クリックして[タイルのプロパティ]を選択し、[タイルセット](右下隅)というセクションの各タイル画像にプロパティを追加します。
  3. プロパティに「terrain_type」という名前を付け、値を好きなように設定します(たとえば、土地の場合はterrain_type = 0、水域の場合はterrain_type = 1)。
  4. これらの画像を使用してタイルマップをペイントし、保存します

次のコードを使用して、場所3,5にある単一のタイルのプロパティを読み取ります。

//read the tile map
TMXTiledMap *tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"sample_map.tmx"];

//get the bottom layer from the tileMap
CCTMXLayer *bottomLayer = [tileMap layerNamed:@"bottom"];

//get CCTMXMapInfo object -- TMXTiledMap DOES NOT Contain the tile image properties
CCTMXMapInfo * mapInfo = [CCTMXMapInfo formatWithTMXFile: @"sample_map.tmx"];

//get tile id of the tile image used at this coordinate (3, 5) in this layer
int tileID = [bottomLayer tileGIDAt: ccp(3, 5)];

//get the properties for that tile image
NSDictionary *properties = [mapInfo.tileProperties objectForKey:[NSNumber numberWithInt:tileID] ];

//get the terrain_type property
NSString *terrainType = [properties objectForKey:@"terrain_type"];
于 2013-02-13T06:07:54.967 に答える