2013-11-13 4 views
0

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

ответ

0

Вы можете представить себе, что cclayer - это узел, у него нет понятия размера и привязки, а его размер содержимого не имеет роли в содержании шоу, это повлияет только на область управления.

Я думаю, вы должны просто надеяться, что некоторые из изображений будут отображаться в регионе. Использование маски будет хорошим решением.

+0

Знаете ли вы, как использовать маску? Я имею в виду, что какой-то способ привязать некоторые изображения к определенной области экрана, чтобы при перемещении изображений вверх и вниз это движение происходит только внутри этой области –

Смежные вопросы