0

scrolllayerのcontentsizeを設定したいです。

それはCCLayerタイプで、移動はccTouchMoveによって設定されます。スムージングのスケジュールは 1 つです。しかし。

問題は、スクロールレイヤーがディスプレイ全体のように大きいことです。scrolllayerのcontentsizeを設定したいです。このレイヤーのコンテンツはスクロールされ、このレイヤーでのみ表示されます。ディスプレイ全体を占有しません。このようなもの

ここに画像の説明を入力

灰色の CCLayer (scrolllayer) だけでスクロール ....画面全体ではありません。

手伝って頂けますか?

PS: CCLayerColor と initWithColor:Width:Height: の設定が機能していません。ばかげたカラーボックスを作るだけで、それも動いています。

4

2 に答える 2

0

マスキングと GL_SCISSOR で必死に試した結果、フォアグラウンドに穴を開け、onTouchMoved更新時にバックグラウンド オブジェクトのみを移動することにしました。

実際の動作を確認するには、 Angry Granの統計ページをご覧ください。

于 2012-01-18T16:59:46.577 に答える
0

わかりました、正直なところ、ウィンドウフレームをスクロールオブジェクトよりも高いzに配置します...ウィンドウコンテンツのスプライトをオンザフライでトリミングおよび変更する必要がある場合があります(少なくともそれが私ができる1つの方法です)これ以上の調査は必要ありません)。

それで :

// initialize this logic somewhere useful

CCNode scrollableContent;
CCSprite windowFrame; 
BOOL isScrollPossible;
[self addChild:scrollableContent z:0];
[self addChild:windowFrame z:1];

// and in the touch delegate methods

-(void) ccTouchBegan:{
  check if the touch happened in the window, if yes, scrolling is possible
}
-(void) ccTouchMoved:{
  if (isScrollPossible) {

    compute displacement
    compute nextPosition for scrollableContent node;
    if ( nextPosition in window ) {
      // make scrollableContent follow touch
      scrollableContent.position=nextPosition;
    } else {
      // stop any further scrolling until the next 'touch began'
      isScrollPossible=NO; 
    }
  } else {
    // scroll not possible, do nothing
  }
}

これが基本的な考え方です。ウィンドウの端を越えて scrollableContent が忍び寄るのを防ぐために、クランプ ロジックが必要になる場合があります。

タイプミスのため編集しました。

于 2012-01-18T16:55:00.437 に答える