box2d의 강체, 맞춤형 필기
10250 단어 box2D
맞춤형 제작기(Fixture): 모양, 밀도, 마찰력 등 속성을 가진 생성 방식: b2FixtureDef를 정의하고 강체를 호출하는createFixture 방법은 강체에 맞춤형 제작기(추가 속성에 해당), 각 강체는 여러 개의 Fixture를 지원한다.강체의createFixture는 두 가지 모드를 다시 불러옵니다. 하나는 b2FixtureDef이고, 하나는 shape입니다. 효과는 같습니다.
모양(shape): 강체의 형상 종류:circle(원형), Polygon(다각형), 기타 등등
기본적으로 그들의 범위는 다음과 같다. 월드, 바디,fixture(강체의 여러 속성)
tips:b2Vec2는 2dx에 CGPoint 같은 거예요.
코드를 구체적으로 보다
1 //
2 b2BodyDef testBodyDef;
3 testBodyDef.type = b2_staticBody;
4 testBodyDef.position.Set(0,0);
5
6 //
7 b2EdgeShape testShape;
8 testShape.Set(b2Vec2(0,0), b2Vec2(s.width/PTM_RATIO,0));
9
10 b2FixtureDef testFixtueDef;
11 testFixtueDef.shape = &testShape;
12
13 b2Body* testBody = world->CreateBody(&testBodyDef);
14 testBody->CreateFixture(&testFixtueDef);
15
16 //
17 testShape.Set(b2Vec2(0,s.height/PTM_RATIO), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO));
18 testBody->CreateFixture(&testFixtueDef);
19
20 //
21 testShape.Set(b2Vec2(0,0), b2Vec2(0,s.height/PTM_RATIO));
22 testBody->CreateFixture(&testFixtueDef);
23
24 //
25 testShape.Set(b2Vec2(s.width/PTM_RATIO,0), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO));
26 testBody->CreateFixture(&testFixtueDef);
27
28 //
29 CCPoint ballPosition = CCPointMake(200, 100);
30 CCSprite* ballSprite = CCSprite::create("Ball.png");
31 ballSprite->setPosition(ballPosition);
32 this->addChild(ballSprite);
33
34 b2BodyDef moveableBodyDef;
35 moveableBodyDef.type = b2_dynamicBody;
36
37 //
38 // , box2d
39 moveableBodyDef.position.Set(ballPosition.x/PTM_RATIO,ballPosition.y/PTM_RATIO);
40 // b2BodyDef userData , update
41 moveableBodyDef.userData = ballSprite;
42
43 b2Body *moveableBody = world->CreateBody(&moveableBodyDef);
44
45 //
46 b2CircleShape testCircleShape;
47 // , ok
48 testCircleShape.m_p.Set(0,0);
49 float radius = ballSprite->getContentSize().width/(2*PTM_RATIO);
50 testCircleShape.m_radius = radius;
51
52 b2FixtureDef moveableFixtureDef;
53 moveableFixtureDef.shape = &testCircleShape;
54 moveableFixtureDef.density = 1.0f;
55 moveableFixtureDef.friction = 0.3f;
56 moveableBody->CreateFixture(&moveableFixtureDef);
업데이트 방법
1 void HelloWorld::update(float dt)
2 {
3 int velocityIterations = 8;
4 int positionIterations = 1;
5
6 world->Step(dt, velocityIterations, positionIterations);
7
8 //
9 for (b2Body* body = world->GetBodyList(); NULL!= body; body = body->GetNext())
10 {
11 if ( NULL != body->GetUserData() )
12 {
13 CCSprite* sprite = (CCSprite*)body->GetUserData();
14
15 sprite->setPosition( CCPointMake( body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO) );
16 sprite->setRotation( -1 * CC_RADIANS_TO_DEGREES(body->GetAngle()) );
17 }
18 }
19 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
box2d의 강체, 맞춤형 필기강체(Body): 세계를 통해 만들어진 대상, 물리 엔진 안의 모든 것이 강체 생성 방식: b2 Body Def를 정의하고, b2 World는create Body를 호출하여 이 인자를 전송합니다. 맞춤형 제작기(Fi...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.