0

iPhone用のcocos2dで、あるシーンで、あるレイヤーをフェードアウトして別のレイヤーをフェードインするにはどうすればよいですか?

アイデアは、私が1つの画面を持っているということです:

  • 上部にページ付けコントロール(切り替えとセレクターを備えたメニュー項目として実行)がある1つのレイヤー
  • 画面の残りの部分は、現在のページのコンテンツを表示する別のレイヤーで埋められます。

ここで、ユーザーがページネーションコントロールのいずれかをクリックしたら、現在のページのコンテンツレイヤーをフェードアウトし(ただし、ページネーションレイヤーは保持します)、次のページのコンテンツレイヤーをフェードインします。これらは両方とも同じレイヤーであり、変数に基づいてplistからデータを取得するcurrentPageため、効果的にレイヤーを更新する必要があります。

replaceSceneシーンの場合、を呼び出すときにトランジション効果を指定できることを知っています。そして、それをそのように行うと、すべてが機能します。しかし、明らかに、それはページネーションコントロールもフェードアウトします。これはばかげているように見えます。では、レイヤーに対してどのように機能するのでしょうか。

4

3 に答える 3

1

hmmm .... CCLayerColor(CCRGBAProtocolプロトコルを実装)を使用すると、フェードは内部の任意のオブジェクトに伝播します。次に、次のようなことを行います。

-(void) buttonTouchedCallBack{
    id out = [CCFadeTo actionWithDuration:.35 opacity:0];
    id callFunc = [CCCallFunc actionWithTarget:self selector:@selector(changeContent)];
    id in = [CCFadeTo actionWithDuration:.35 opacity:255];
    id enableMenus = [CCCallFunc actionWithTarget:self selector:@selector(layerInView)];

    _menu.isTouchEnabled=NO;
    [_contentLayer stopAllActions];
    [_contentLayer runAction:[CCSequence actions:out,callFunc,in,enableMenus,nil]];
}

-(void) changeContent{
    // do your stuff here
}

-(void) layerInView{
    _menu.isTouchEnabled=YES;
    // and anything else that is appropriate
}
于 2012-07-19T13:24:11.657 に答える
0

あなたが望むものを達成できるように、あなたの sに s を実行runAction:させるために使用できると思います(および など)。CCLayerCCActionCCFadeInCCFadeOut

現在のページ (ページ A) と次のページ (ページ B) をそれぞれ保持するには、2 つの「コンテンツ レイヤー」が必要です。両方のコンテンツ レイヤーのフェード アクションが終了したら、ページ A をクリーンアップできます。

于 2012-07-19T05:36:01.487 に答える