2016-12-06 3 views
2

タイルを含む2D配列のタイルマップがあります。空想はありません:tiledMap [列] [行]。タイルは、移動可能かどうかなど、タイルタイプを含むカスタムSKSpriteNodeオブジェクトです。タイルマップ内の特定のタイルに適切かつ効果的な影響を与える方法

1タイルから次のタイルへの文字の移動は、&のように固定されています。しかし、今では、強調表示されている選択されたタイルに移動できるようにするために、文字の動きをリファクタリングしようとすると、私は障害物になってしまいました。これらの強調表示されたタイルは、選択されるたびに文字を囲みます。

周囲のタイルの現在の壊れたハイライトは、文字が配置されているタイルから開始して、右上のタイル、上のタイル、左の&のボトムを単にチェックする厄介なforループによって機能しています。私は1つのタイルでタイルをチェックアウトする機能を拡張することができましたが、それはハイライトプラスのように見えます。どんな種類のパターンでも簡単にハイライトすることができるようにしたい。この悲劇は、ハイライトされる必要があるタイルパターン(配列の中のいくつかの数字など)を単純に入力する機能をどのように適用するかを理解することができないということです。キャラクターのレベルが上がるにつれて、彼はより多彩な動きを可能にするために彼の周りにハイライトされたタイルのより複雑なパターンを持つことができるので重要です。助けてください。

答えて

1

操作するタイルと再帰の深さを示す入力パラメータを持つ再帰関数を試すと、ハイライトするタイルの配列になります。したがって関数の最初の呼び出しには開始タイルと深さが含まれ、その後の呼び出しは隣接タイルと深さ-1を通過します。深さが0になると、タイル配列を返して以前の呼び出しに追加することができます。

これはドラフトの例です。 getAdjacentTilesの独自の実装を提供する必要があり、FABTileはカスタムタイルです。

- (NSArray *)tilesToHighlight:(FABTile *)tile withDepth:(int)depth { 
    NSMutableArray *result = [NSMutableArray array]; 
    if (depth == 0) { 
     return result; 
    } 

    NSArray *adjacentTiles = [self getAdjacentTiles:tile]; 
    for (FABTile *adjacentTile in adjacentTiles) { 
     if (![result containsObject:adjacentTile]) { 
      [result addObject:adjacentTile]; 
     } 
     NSArray *tilesToHighlight = [self tilesToHighlight:adjacentTile withDepth:depth - 1]; 
     for (FABTile *tileToHighlight in tilesToHighlight) { 
      if (![result containsObject:tileToHighlight]) { 
       [result addObject:tileToHighlight]; 
      } 
     } 
    } 

    return result; 
} 

このようなメソッドを呼び出します。

+0

私はこれをどのように適用するかを考えてみましたが、何か難しかったです。現在、CGPointとしてタイルインデックスを返すメソッドがあります。フィボナッチをどのように構造体に変換するのですか? – Krekin

+0

私はこの例を更新しました。この[example](http://www.stone.com/The_Cocoa_Files/Recursion.html)は役に立ちました。私はすぐにそれが必要なので、これがどのように動作するかを見て興味があった:) –

+0

美しく動作します。私の 'getAdjacentTiles'メソッドは、すべてのタイルを標準的な方法でチェックします:右上、左上、左下のタイルをチェックします。 – Krekin

関連する問題