2011-07-13 60 views
5

私はcocos2dでタイルベースの2d RPGを作っています。私は自分のマップにCCTMXTileMapsを使用しています。私のプレイヤーは画面の中央に配置され、地図はその周りを移動します(プレイヤーが地図の端に向かって歩いているとき、中心から離れて実際に移動している場合を除く)。このシステムは大きな地図でうまく機能します。ただし、小さなマップでは、マップは画面の右上に固定されます。メカニックはまだ動作しますが、自動的に小さなマップを自動的に中央に置くことはいいでしょう。小さなCCTMXTileMapをcocos2dの中央に配置するにはどうすればよいですか?

画面のサイズよりも小さいマップを中央に配置するにはどうすればよいですか?私はマップを "赤いボックス"の中央にしたい。 (赤いボックスは、例示目的のためだけにここにある、それはコードでは、実際に存在しません。)

enter image description here

EDIT:

は、だから私は理論的にはそれを行う方法を考え出したが、私は」座標系の理解に問題があります。次のコードを使用して地図を中央に配置していますが、期待どおりに動作していません。地図が画面から読み込まれます。

if ((self.tileMap.contentSize.height < screenSize.height) && (self.tileMap.contentSize.width < screenSize.width)) { 

    CGSize winSize = [[CCDirector sharedDirector] winSize]; 
    CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2);   


    CGPoint centerOfMap = CGPointMake((self.tileMap.mapSize.width*self.tileMap.tileSize.width)/2, (self.tileMap.mapSize.height*self.tileMap.tileSize.height)/2); 

    self.tileMap.anchorPoint = centerOfMap; 
    self.tileMap.position = centerOfView; 

} 

私はここで間違っていますか?

+0

「何かを壊す」と定義すると、クラッシュしたり、必要に応じて動作しませんか? –

+0

@FraserGraham Edited。それは実行されますが、私が望むように動作しません。 – Moshe

答えて

0

私はいくつか欠けていましたが、解決策はかなり簡単です。親にマップをセンタリングするための最も基本的なコードはこれです:

// 
    // Get the center of the 
    // screen/map layer (which are the same) 
    // 

    CGPoint centerOfSelf = CGPointMake(self.contentSizeInPixels.width/2, self.contentSizeInPixels.height/2); 

    // 
    // Position the map in the center 
    // 

    tileMap.position = CGPointMake(centerOfSelf.x - (tileMap.contentSizeInPixels.width/2), centerOfSelf.y - (tileMap.contentSizeInPixels.height/2)); 

あなたはシーンごとにマップをロードする場合、上記のコードは動作します。しかし、あなたが(私のように)地図や関連データをロードする1つの「世界」シーンを持っているなら、少し違ったやり方でやる必要があります。画面よりも大きいマップを読み込むと、レイヤーが拡大して大きなマップに合わせてサイズが変更されます。そうすることで、上記のコードは「引き伸ばされた」マップシーンの中にマップを配置し、続いてロードします。だから、これを打ち消すために、まずスクリーンのサイズに合わせて「ワールドシーン」レイヤーのサイズを変更する必要があります。私達は私達のメインキャラクターを以下に離れて移動した場合には、私はまた戻って0,0位に「カメラ」に移動

注:これを行うには、私は次のコードを使用します。

関連する問題