2012-04-01 7 views
-1

私は現在、cocos2dを使ってiPhone用のカードゲームを開発中です。私は現在、各タブがプレイヤーと彼/彼女のカードセットを表すタブビューを必要としています。現在、私はただ1人のプレーヤーを表す単一のビューを持っています。これは、cocos2dが本当にビルドされていないかのように、複数のビューを持っているように見え、コードをハッキングしなければならないことがあります。これを達成する最も効率的な方法は何でしょうか?マルチプレイヤー用cocos2dタブビュー


ここで明らかに間違っているものを見つけることができますか?私はPlayerControllerという新しいクラスを作成しました(アプリケーションデリゲートから) アプリケーションデリゲートがシーンメソッドを呼び出すと、2つの "手"オブジェクトが配列に挿入され、initWithPlayerHandsが呼び出されます(ここには存在しないはずですが、最初に働く)。私はまた、ハード、私は(異なるビューを持つ)この使用cocos2dに似た何かを行っている要素0

-(CCScene *) scene 
{ 
    // 'scene' is an autorelease object. 
    CCScene *scene = [CCScene node]; 
    // 'layer' is an autorelease object. 
    PlayerController *layer = [PlayerController node]; 

    // add layer as a child to scene 
    [scene addChild: layer]; 

    HelloWorldLayer *layer1 = [[HelloWorldLayer alloc] init]; 
    HelloWorldLayer *layer2 = [[HelloWorldLayer alloc] init]; 

    allLayers = [[NSMutableArray alloc] initWithCapacity:6]; 
    [allLayers addObject:layer1]; 
    [allLayers addObject:layer2]; 
    [self initWithPlayerHands:allLayers]; 

    // return the scene 
    return scene; 
} 

-(id)initWithPlayerHands:(NSMutableArray *)layers 
{ 
    NSMutableArray *allPlayers; 

    if ((self = [super init]))  
    { 
     currentScreen = 1; 
     [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:NO]; 
     [self setIsTouchEnabled:YES]; 
     scrollWidth = [[CCDirector sharedDirector] winSize].width; 
     scrollHeight = [[CCDirector sharedDirector] winSize].height; 
     startWidth = scrollWidth; 
     startHeight = scrollHeight; 

     allPlayers = [[NSMutableArray array] retain]; 
     int count = [layers count]; 
     int i = 0; 

     for (CCLayer *l in layers) 
     { 
      l.anchorPoint = ccp(0,0); 
      l.position = ccp((i*scrollWidth),0); 
      [self addChild:l ]; 
      i=i+1; 
      count-=1; 
     } 
     totalScreens = i;  
    }  
    return self; 
} 

-(void) moveToPlayerHand:(int)hand //this represents the layer you want to move to 
{ 
    float dest = /*((currentScreen-1)*scrollHeight);*/ 0; 
    id changeHand = [CCEaseBounce actionWithAction:[CCMoveTo actionWithDuration:0.2 position:ccp(0,dest)]]; 
    [self runAction:changeHand]; 
    currentScreen = hand; 
} 

答えて

0

を指すようにmoveToPlayerHandをコード化しています。私は、2つ(またはそれ以上)の層を収納したスクロールCCLayerを使用して問題を解決しました。このスクロールレイヤーは、その上に配置された別のコントロールレイヤー(より高いz)を持つシーンの一部でした。スクロールレイヤーで異なるプレイヤーの手をレイヤーとして使用し、2つのスプライトを持つスクロールバーよりも高い別のレイヤー、またはスクロールレイヤーにスクロールするレイヤーをスクロールする2つのボタンを使用すると、同じことが実現できます。スクロールレイヤーとコントロールレイヤーは、両方の共有CCSceneを使用して通信できます。

申し訳ありませんが、私の答えは完全にはっきりしていないと思います。これらのメソッドはCCLayerのサブクラスになければならないので、myScrollerLayer:CCLayerをインタフェースにする必要があります。シーンは配列を作成するだけでなく、作成された配列をscrollerLayerに渡して作成する必要があります。シーン内のコントロールレイヤーとscrollerLayerの両方への参照があるので、各レイヤーにメッセージを渡すことができます。ここで

スクロール層のためのコードでは、まず、あなたがそれに層の配列を渡すことによって、新しいスクロール層を開始することができ、プレイヤーの手を表し、あなたの2層を作成する必要があります。

-(id) initWithPlayerHands:(NSMutableArray *)layers 
{ 

    if ((self = [super init])) 
    { 

     // Make sure the layer accepts touches 
     [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:NO]; 
     [self setIsTouchEnabled:YES]; 

     // Set up the starting variables 
     currentScreen = 1; 
     scrollWidth = [[CCDirector sharedDirector] winSize].width; 
     scrollHeight = [[CCDirector sharedDirector] winSize].height; 
     startWidth = scrollWidth; 
     startHeight = scrollHeight; 

     allPlayers = [[NSMutableArray array] retain]; //iVar that holds the layers that represent the players hands. 
     // Loop through the array and add the screens 
     int count = [layers count]; 
     int i = 0; 
     for (CCLayer *l in layers) 
     { 

      l.anchorPoint = ccp(0,0); 
      l.position = ccp((i*scrollWidth),0); 
      //Add them with inverse levels so that the touches can pass through all of the board layers (This is something I did special for my project, I don't think you have to) 
      [self addChild:l z:count]; 
      [allLayers addObject:l]; 
      i=i+1; 
      count-=1; 

     } 

     // Setup a count of the available screens 
     totalScreens = i; 

    } 
    return self; 

} 

そしてここでは、プレイヤーの手に移動する方法です:

-(void) moveToPlayerHand:(int)hand //this represents the layer you want to move to 
{ 

    id changeHand = [CCEaseBounce actionWithAction:[CCMoveTo actionWithDuration:0.3 position:ccp(-((page-1)*scrollWidth),0)]]; 
    [self runAction:changeHand]; 
    currentScreen = hand; 

} 

私はあなたが、これは私のために働いたかを確認したい場合は、あなたが私のプロフィールにリンクをチェックすることができ、これは正しい軌道に乗ってあなたを取得願っています。ページの中央には、スクロールを示すビデオがあります。

+0

私はそれが本当にありがとう、いくつかのコードを投稿することができます場合は、私が探しているものになる可能性があります応答タムズ、ありがとう:) – godzilla

+0

応答のためのTHanks、私はそれを試してみましたが表示されます私はそれが何であるかを確認することはできませんが、私は間違って何かをしているように。私はハードコーディングしているので、常に最初の "サブビュー"、つまり自分のゲームの最初の手が選ばれます。ここに私のコードのいくつかがあります。明白な間違いがあれば、本当に感謝するでしょう。 – godzilla

+0

私はそれをクリアするために私のポストを編集しました。 – tams

関連する問題