1
나는 cocos2dx
에서 장면을 초기화하는 다음과 같은 기능을 가지고 있으며 모든 것을 올바르게 수행했다. 하지만 CCSprite
은 여전히 Physics 본문 역할을하지 않습니다. 화면 중앙에 고정 된 채로 떨어지지 만 중력에 의해 영향을받습니다.CCSprite가 COCOS2dx에서 물리 구조 본문으로 작동하지 않습니까?
도움을 주시면 감사하겠습니다. 미리 감사드립니다.
void HelloWorld::initPhysics()
{
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
//creating the world
b2Vec2 gravity;
gravity.Set(0.0f, -20.0f);
world = new b2World(gravity);
// Do we want to let bodies sleep?
world->SetAllowSleeping(true);
world->SetContinuousPhysics(true);
CCSprite* bird = CCSprite::create("[email protected]");
bird->setScale(2.0);
bird->setPosition(ccp(visibleSize.width/2, visibleSize.height/2));
addChild(bird);
b2Body *_body;
// Create ball body and shape
b2BodyDef ballBodyDef;
ballBodyDef.type = b2_dynamicBody;
ballBodyDef.position.Set(screenSize.width,screenSize.height);
ballBodyDef.userData = bird;
_body = world->CreateBody(&ballBodyDef);
b2CircleShape circle;
circle.m_radius = 26.0/PTM_RATIO;
b2FixtureDef ballShapeDef;
ballShapeDef.shape = &circle;
ballShapeDef.density = 100.0f;
ballShapeDef.friction = 0.5f;
ballShapeDef.restitution = 0.7f;
_body->CreateFixture(&ballShapeDef);
}
여기 내 업데이트 기능이 있으며 전역 변수를 전역으로 추가했습니다.
void HelloWorld::update(float dt)
{
int velocityIterations = 8;
int positionIterations = 1;
world->Step(dt, velocityIterations, positionIterations);
//Iterate over the bodies in the physics world
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL) {
//Synchronize the AtlasSprites position and rotation with the corresponding body
CCSprite* myActor = (CCSprite*)b->GetUserData();
myActor->setPosition(CCPointMake(b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO));
myActor->setRotation(-1 * CC_RADIANS_TO_DEGREES(b->GetAngle()));
}
}
}
질문에 내 업데이트 기능을 추가했으며 'b2world world'를 내 전역 변수로 추가했습니다. 그러나 여전히'CCSprite'가 물리학에 반응 할 수 없습니까? 이것에 어떤 도움이 되었습니까? – Harsh
죄송합니다. 'scheduleUpdate();'함수를 호출하는 것을 잊었다! 물리학이 부드럽게 작동합니다! :) 고마워요. – Harsh