2013-05-24 3 views
1

Может ли кто-нибудь предоставить некоторые основные указатели на размещение CCSprites на экране?Cocos2d-x - Понимание позиционирующих спрайтов на экране

Пример:

CCSize s = CCDirector::sharedDirector()->getWinSize(); 

С s, скажем, я хотел расположить спрайт на самом низу экрана, начиная с 0, думаю, что-то вроде травы.

если я бегу на 1024 х 768, середина:

setPosition(ccp(s.width/2, s.height/2)); 

так, начиная весь путь влево и середина будет:

setPosition(ccp(0, s.height/2)); 

Так как я получаю дальше вниз?

setPosition(0, s.height)); 

Это ставит меня в верхнем левом углу и остается в верхней части экрана.

Любая помощь будет оценена по достоинству.

ответ

4

Позиция относится к спрайту parent, а также его anchorPoint.

anchorPoint обычно находится в диапазоне от 0 до 1 для каждой координаты со значением по умолчанию 0,5. Я говорю «вообще», потому что это действительно может быть любая ценность, но выходит за пределы 0-1, где вы находитесь за пределами спрайта.

Например, anchorPoint of (0,0) занимает положение относительно левого нижнего положения. (1,0) внизу справа, (0,1) - левый верхний и (1,1) - правый верхний. (0.5,0.5) - это самый центр спрайта по умолчанию.

В принципе, вы просто несколько увеличиваете значение по ширине, чтобы получить относительное положение.

Если вы хотите разместить спрайт в самом низу экрана (нижний левый угол выровнен по левому нижнему углу экрана), вы можете сделать это несколькими способами, основанными только на anchorPoint.

По умолчанию anchorPoint(0.5,0.5), позиция будет (sprite.contentSize.width/2, sprite.contentSize.height/2).

Если вы установили anchorPoint в (0,0), то такое же положение получается просто (0,0).

Если вы хотите, чтобы переместить этот спрайт в самом центре экрана (центр справа спрайтов в середине), с anchorpoint из (0.5, 0.5), позиция будет (s.width/2, s.height/2).

Это все если вы добавляете спрайт родителю размер экрана, который является, где вторая часть позиционирования приходит в

Положение также относительно родительского спрайта. - который может быть любой прочее CCNode (CCLayer, другой CCSprite, и т.п).

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

+0

Я думаю, что получаю это, пробуя несколько экспериментов! – Jason

+0

Я все еще немного борюсь, у вас есть пример настройки чего-то в левом нижнем углу, а затем настройка чего-то в правом нижнем углу? setAnchor (0,0), кажется, внизу слева, но (0,1), похоже, не имеет правильного положения или, может быть, что-то перемещается с экрана. пытаясь понять это. – Jason

+0

SetAnchor (0,1) не будет перемещать спрайт в нижний правый угол экрана, он сделает его положение относительно правого правого правого правого края спрайта. Поэтому, если вы установили Anchor (0,1) и хотите поместить его в нижнем правом углу экрана, его позиция будет ccp (winSize.width, 0); –

0

Также просто чтобы добавить что-то, все кнопки начинаются в середине экрана, после чего вы можете перемещать их оттуда. если вы хотите нажать кнопку (0,0):

CCLabelTTF *label1 = [CCLabelTTF labelWithString:@"Press Me!" fontName:@"Marker Felt" fontSize:20]; 
CCMenuItemLabel *button1 = [CCMenuItemLabel itemWithLabel:label1 block:^(id sender) { NSLog(@"button1 pressed"); }]; 

button1.position = ccp(-(s.width/2) , -(s.height/2)); // <--- 
Смежные вопросы