Итак, у меня есть игра в версии 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?