Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CCSprite的相对定位_C++_Windows Phone 8_Cocos2d X - Fatal编程技术网

C++ CCSprite的相对定位

C++ CCSprite的相对定位,c++,windows-phone-8,cocos2d-x,C++,Windows Phone 8,Cocos2d X,所以我有一个Windows Phone版本的cocos2dx游戏。有一个背景(CcLayError),在中间我放置了另一个CcLayEror颜色。问题是,当移动中间层中包含精灵的层时,移动是相对于整个屏幕进行的,而不是相对于中间层。 在屏幕中部创建这个CcLayror颜色的代码是: mWheelMachine = WheelMachineView::create(symbolMap, path); mWheelMachine->setContentSize(CCSize(WHEEL_MAC

所以我有一个Windows Phone版本的cocos2dx游戏。有一个背景(CcLayError),在中间我放置了另一个CcLayEror颜色。问题是,当移动中间层中包含精灵的层时,移动是相对于整个屏幕进行的,而不是相对于中间层。 在屏幕中部创建这个CcLayror颜色的代码是:

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);     
}
无符号短o;
for(无符号短i=0;i<轮数;i++)
{
WheelView*wheelLayer=WheelView::create();
wheelLayer->setIsRelativeAnchorPoint(真);
车轮层->固定点(ccp(0,0));
wheelLayer->设置位置(i*车轮宽度,-100);
wheelLayer->setContentSize(CCSize(WHEEL_WIDTH,WHEEL_HEIGHT));//较大的高度值,以便有空间使用移动符号制作动画
addChild(车轮层);
M车轮。向后推(车轮层);
/*获取车轮符号*/
列出wheelSymbols=mWheelModel->getWheelSymbols(i);
/*索引*/
o=0;
对于(列表::反向迭代器it=wheelSymbols.rbegin();it!=wheelSymbols.rend();it++)
{
CCSprite*symbol=CCSprite::spriteWithPriteFrameName((*it)->getName().c_str());
符号->设置位置(ccp(车轮宽度/2,符号高度/2+(o++*符号高度)-符号高度));
符号->设置锚点(ccp(0.5f,0.5f));
符号->设置比例(符号\比例\系数);
wheelLayer->addChild(符号10,o);
}
}

因此,当将“wheelLayer”移动到“mWheelMachine”内容大小之外的位置时,它将在整个屏幕上移动,从而在中间指定区域(mWheelMachine)之外绘制符号。由于其尺寸大于其父级,因此它会在父级之外绘制符号。
为什么会这样?如何才能使其仅使用mWheelMachine的内容大小?

您可以想象cclayer是一个节点,它没有大小和锚定的概念,并且设置它的内容大小对节目的内容没有作用,它只会影响控制区域


我想你应该希望一些图片能在一个区域内展示。使用口罩将是一个很好的解决方案。

那么你知道如何使用口罩吗?我的意思是应该有某种方法将一些图片绑定到屏幕的特定区域,这样,当上下移动图片时,这种移动只发生在该区域内