Итак, у меня есть игра в Windows Phone версии cocos2dx. Существует фон (CCLayerColor), а в середине я помещаю еще один CCLayerColor. Проблема в том, что при перемещении слоя со спрайтами внутри этого среднего слоя движение выполняется по отношению ко всему экрану, а не к среднему слою. Код для создания этого CClayerColor в середине экрана:Относительное позиционирование CCSprite
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», в то время как создать просто переопределяет корреспондент 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?
Знаете ли вы, как использовать маску? Я имею в виду, что какой-то способ привязать некоторые изображения к определенной области экрана, чтобы при перемещении изображений вверх и вниз это движение происходит только внутри этой области –