2012-10-29 5 views
1

В настоящее время, в cocos2d, у меня есть приложение, которое выполняет следующие функции:Cocos2d Box2d Scaling Радиус окружность тела

Инициацию с пустым экраном. Когда я коснусь экрана, я получаю круг для всплывающего окна. Когда я держу круг, круг будет продолжать расти с постоянной скоростью. Однако, несмотря на то, что спрайт растет, физическое тело box2d отсутствует, а это означает, что спрайт не столкнется с другими телами. Я пытался выяснить способ изменения радиуса, который масштабируется с помощью спрайта, но здесь нет такого вопроса для cocos2d. Я заметил другой box2d для вещей, отличных от cocos2d, но мне сложно перевести их.

//smile.position = ccp(touchLocation.x, touchLocation.y); 
smile.scale = .05; 
[self addChild:smile]; 


// b2BodyDef smileBodyDef; 

smileBodyDef.type = b2_dynamicBody; 
smileBodyDef.position.Set(touchLocation.x/PTM_RATIO, touchLocation.y/PTM_RATIO); 
smileBodyDef.userData = smile; 
smileBody = world->CreateBody(&smileBodyDef); 
//Radius 
b2CircleShape smileCircleShape; 
int radius = 80; 

//Fixture 
smileFixtureDef.shape = &smileCircleShape; 
smileFixtureDef.density = 0.00f; 
smileFixtureDef.friction = .2f; 
smileBody->CreateFixture(&smileFixtureDef); 




if (CGRectContainsPoint(smileRect, touchLocation)) { 
growForever = [CCRepeatForever actionWithAction: [CCScaleBy actionWithDuration: .5 scale: 1.2]]; 
[growForever setTag:1]; 
[smile runAction:growForever]; 
+0

Пожалуйста, пост код. .! – Shailesh

+0

Код только что добавлен. –

ответ

2

Каждый раз, когда вы хотите изменить свой радиус, захватить объект формы, связанный с b2Fixture, который вы создали для вашего тела, а затем установить новое значение соответственно:

fixture->GetShape()->m_radius = new_radius/PTM_RATIO; 
+0

Можете ли вы это объяснить? Я попытался скопировать и вставить это, но он говорит мне, что new_radius - неопознанная переменная. –

+0

new_radius - это просто новое значение радиуса вашего спрайта «улыбка». Поскольку масштаб спрайтов «улыбка», вы хотите, чтобы радиус формы также соответствовал масштабированному размеру спрайта. Вероятно, вы можете получить значение new_radius: [smile boundingBox] .size.width * 0.5, если ваш спрайт улыбки - идеальный круг. –

+0

Я читал кое-что о том, как тела в Box2d не масштабируются. Тебе нужно уничтожить тела и вновь принести новые тела ... можешь ли ты это понять? –

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