2011-08-07 10 views
2

現在、CALayersに基づいたCore Animationを使用して2Dゲームを作成しようとしています。私はすでにユーザースプライトレイヤーを見つけましたが、今はゲームオブジェクトになります。複数のレイヤーを1つのレイヤーから除外したCALayers

オブジェクト(ユーザは避けなければならない)は画面の上部から落ち、決してユーザに触れないと消えてしまいます。しかし、これらの障害物はすべて同じであるため、私はオブジェクトを定義する別々の.hと.mを用意し、それぞれの障害物を「ゲームに参加させる」コードをいくつか用意しました。

ボトムライン 1.それぞれの障害物をメインビューにCALayerとして「インポート」するにはどうすればよいですか?障害物が1つのイメージであっても、障害物のための別々のファイルを持っていることが、最良の方法です。

+0

Cocos2Dを見ましたか?大名ゲームの多くで使用されている偉大な2Dオープンソースのゲームエンジンです。これは本当に多くのことを単純化します。 – Dancreek

+0

@Dancreek私はCocos2Dを見てきましたが、それは私には印象的ではありません。私はサードパーティのソフトウェアを使用したくない。 –

+0

まあ、私はあなたの最終製品が何であるか正確にはわかりませんが、あまりにも速くそれを書き留めてはいません。レビューを読むあなたがする必要がない場合は、ホイールを再発明しないでください。 – Dancreek

答えて

2

すでにユーザースプライトを把握している場合は、別のレイヤーで呼び出されてレイヤーツリーに追加されるaddSublayer:が発生している可能性があります。基本的には、障害物を追加するには、 - [CALayer layer]で新しいレイヤーをインスタンス化し、それを設定し、[rootLayer addSublayer:obstacle]を追加する必要があります。

別々のファイルについての質問はこちらです:独自のヘッダーと実装で新しいクラスを作成するとよいでしょう。しかし、Obstacleがどのように動作するかを定義するための1つのクラス(1つの.h/.mペアを意味する)を行い、 - [[Obstacle alloc] init]呼び出しを発行することにより、

「障害物」はどのようにインポートされて表示されますか? CALayer型のObstacleの@interface {}に変数を置く可能性が最も高いでしょう。 GameBoard(または非常に単純なプロトタイプ/アプリケーション用のViewController)には、障害物を取り、レイヤーを要求してrootLayerに追加するメソッド-addObstacle:があります。

徹底的に試してみると、私はあなたの質問のジストを見逃していたかもしれません。「私は障害クラスを持っているべきか、それとも障害物アレイはCALayersで満たされていますか?あなたは確かにゲームの説明を与えられたようにそれを行うことができます。しかし、個々のObstacleインスタンスに関する情報を保持し始めるとすぐに、オブジェクト自体がその情報に関する質問に答える方がよいでしょう。 CALayerはMVCのView領域にしっかりとしていますが、多くの場合、必要なすべてのモデル情報(x、y、境界、色、コンテンツ)が含まれているため、単純にレイヤー配列を持つプロトタイプ/テストアプリケーションを作成しました。私は本当のアプリに変わりましたが、メンテナンス性のために大きな部分を書き直さなければなりませんでした。

+0

非常に感謝してくれて、とても助けになりました。しかし、私の非常に悪い言葉のあいまいな質問のために、私はまだ助けが必要です。障害物ごとにクラスを持っていれば、そのコードを書く最善の方法と最短の方法は何ですか?障害クラス? initWithFrameを使うことはできますか? –

1

私は2Dタワー防衛ゲームに取り組んでおり、これにはかなり良い解決策があります。障害のためのオブジェクトクラスを作成し、配列に格納する必要があります。障害物が画面の一番下に来ると、それは破壊されずに隠されます。新しいObstancleを作成する場合は、まず新しいObstancleを作成してから、新しいObstancleを作成してから再利用してください。私は何千もの異なるCALayerオブジェクトを面倒なく処理するためにこれを使用します。

-(void)newObstacleAtLocation:(CGPoint)newPosition; 
{ 
    //create the array if it doesn't already exist - could add this to your init 
    if(!obstacles) 
    { 
     obstacles = [NSMutableArray array]; 
    } 
    for(obstacle* anObstacle in obstacles) 
    { 
     //find the first hidden coin and use it 
     if(anObstacle.hidden) 
     { 
      //reset the obstacles position to where you want the "new" obstacle 
      obstacle.position = newPosition; 
      obstacle.hidden = NO; 
      return; 
     } 
    } 
    //didn't find any unused obstacles - make a new one 
    [obstacles addObject:[[[obstacle alloc]initWithSuperLayer:self.mapLayer] autorelease]]; 
} 
+0

応答がありがとう、私はこれがどのように動作するか見ることができますが、私は、エラーメッセージ "宣言されていない識別子の障害物を使用する"を取得します。何か不足していますか? –

関連する問題