0

だから私はcocos2dxのWindows Phoneのバージョンでゲームをしています。背景 (CCLayerColor) があり、その中央に別の CCLayerColor を配置します。問題は、その中間レイヤー内のスプライトを含むレイヤーを移動すると、移動が中央のレイヤーではなく、画面全体に対して行われることです。画面中央にこの CClayerColor を作成するコードは次のとおりです。

mWheelMachine = WheelMachineView::create(symbolMap, path);
mWheelMachine->setContentSize(CCSize(WHEEL_MACHINE_WIDTH , WHEEL_MACHINE_HEIGHT));//values equaling one third of screen size
mWheelMachine->setPosition(ItemManager::sharedItemManager()->getItemPosition(WHEEL_MACHINE_TAG
addChild(mWheelMachine, THEME_WHEEL_MACHINE_ORDER);//position in the middle of the screen

「WheelMachineView」は「CCLayerColor」のサブクラスですが、create は CCLayerColor の対応物をオーバーライドするだけです。このクラス内には、内部に描画された CCSprite オブジェクトと共に移動する別のレイヤーがあります。

unsigned short o;

for (unsigned short i = 0; i < NUMBER_OF_WHEELS; i++)
{
WheelView* wheelLayer = WheelView::create();
wheelLayer->setIsRelativeAnchorPoint(true);
wheelLayer->setAnchorPoint(ccp(0,0));
wheelLayer->setPosition(i * WHEEL_WIDTH, -100 );
wheelLayer->setContentSize(CCSize(WHEEL_WIDTH, WHEEL_HEIGHT)); //large height value, to have room for making an animation with moving symbols

addChild(wheelLayer);
mWheels.push_back(wheelLayer);

/* Get the wheel symbols */
list<Symbol*> wheelSymbols = mWheelModel->getWheelSymbols(i);

/* Index */
o = 0;
for (list<Symbol*>::reverse_iterator it = wheelSymbols.rbegin(); it != wheelSymbols.rend(); it++)
{
  CCSprite* symbol = CCSprite::spriteWithSpriteFrameName((*it)->getName().c_str());
  symbol->setPosition(ccp(WHEEL_WIDTH / 2, SYMBOL_HEIGHT/2 + (o++ * SYMBOL_HEIGHT) - SYMBOL_HEIGHT));
  symbol->setAnchorPoint(ccp(0.5f, 0.5f));
  symbol->setScale(SYMBOL_SCALE_FACTOR);
  wheelLayer->addChild(symbol, 10, o);     
}

}

したがって、「wheelLayer」を「mWheelMachine」のコンテンツ サイズの外側の位置に移動すると、画面全体に移動するため、中央の指定領域 (mWheelMachine) の外側にシンボルが描画されます。親よりもサイズが大きいため、親の外側にシンボルを描画します。なぜこうなった?mWheelMachine のコンテンツ サイズのみを使用するにはどうすればよいですか?

4

1 に答える 1

0

cclayer はノードであり、サイズとアンカーの概念がなく、そのコンテンツ サイズはショーのコンテンツに影響を与えず、コントロール エリアにのみ影響すると想像できます。

一部の写真が地域に表示されることを期待するだけでよいと思います。マスクを使用すると、良い解決策になります。

于 2013-11-14T02:27:34.377 に答える