2010-11-22 3 views
1

私は、ボールが大砲から打ち出されるゲームアプリケーション(cocos2d)を持っています。このボールは軌跡パスを通り抜けます。建物に着陸する。今問題は、要件に応じて、私の建物の画像が最初のビューで表示されず、ボールの移動が原因で背景画像のサイズを大きくしなければならないため、軌跡パスを妨げずに背景画像をドラッグする必要があります。ボール。この点で私を助けてくれる人がいますか?質問のビットをもっと明確にするために、私もイメージを添付しています。前もって感謝します。バックグラウンド画面を動かすだけでなく、Iphone Gameアプリでボールの軌跡をメインテナンスする

答えて

2

あなたが持っているものは、互いに独立した2つの異なる座標空間です。 ボールは、「スクリーン」座標空間とは無関係に、「ワールド」座標空間内を移動する必要があります。もちろん、「ワールド」は「スクリーン」に表示されなければならないので、「ワールド」座標空間を「スクリーン」座標空間に変換する必要があります。オフセットを追加することによって実行できる単純な変換です。

UIViewの中にすべての「ワールドオブジェクト」を置き、そのビュー内でワールドオブジェクトが「ワールド」に移動している間に「UIView」を左右に移動するだけで、ビューが画面上に描かれたときに、ワールド座標空間(ビュー座標空間)からスクリーン座標空間への変換が行われます。

+0

これについては明確ではありません。あなたは簡単に説明できますか?私は座標空間が何か分かりません。ここではuiviewを使用していません。これはcocos2dゲームアプリケーションです。 – Sri

+0

2つの座標系があることを意味します。独立した座標の2つの起源。ボールの位置は、常に「世界」起源に相対的でなければなりません。 「世界」の位置は、「スクリーン」の原点に対して相対的に移動できます。 – filipe

3

cocos2dでは、これを達成する最も簡単な方法は、レイヤ全体を移動することです。通常のcocos2dの方法で作業している場合、CCLayerをサブクラス化するクラスがあります。

そのクラス内では、その位置を変更するだけで目的の効果が得られます。

例では、「カメラ」を右に移動したいので、レイヤーを左に移動するだけです。例えば:

-(void) centerOnBuilding { 
    CGPoint distanceToMove = ccp(-120, 0); 
    self.position = ccpAdd(distanceToMove, self.position); 
} 

すなわち機能は、CCLayerで、それが以前あった場所の右側にカメラ120個の画素を中心とする効果を有するであろう。スクロール効果を持たせたい場合は、同じことをしますが、レイヤーでMoveToまたはMoveByアクションを実行します。

関連する問題