- 와우 3시즌은 골드만 열심히 모아봤음 [35]
- 와우 뉴비) 무슨 NPC가 이렇게 큽니까 ㅋㅋㅋ [7]
- 로아 안녕하세요 30추 바드입니다. [668]
- 걸그룹 엔믹스 해원, 설윤 워크돌 민간 조리원편
- 차벤 안전벨트 한채로 앞유리 뚫고 나가는줄 ㄷㄷ [2]
Document Version : V1.3 - 2017.07.13 with cocos2d-x 3.15.1
Document Version : V1.2 - 2015.06.08 with cocos2d-x 3.6
Document Version : V1.1 - 2014.03.14 with cocos2d-x 3.0beta2
Document Version : V1.0 - 2013.07.10 with cocos2d-x 2.1.4
제 책인 "시작하세요! Cocos2d-x 3.0 프로그래밍" 내용을 3.15.1 버전에 맞게 수정하여 올리고 있습니다.
이 글은 네이버카페 "Cocos2d-x 사용자 모임"에 동시에 게재되고 있습니다.
개발환경 :
c:> cocos new Box2dEx13 -p com.study.box13 -l cpp ↵
Box2dEx04의 모든 코드를 방금 만든 Box2dEx13에 적용시킵니다.
Box2dEx04의 Classes 폴더의 다음 파일들을 Box2dEx13의 Classes 폴더에 덮어 쓰면 됩니다.
■ HelloWorldScene.h
■ HelloWorldScene.cpp
■ GLES-Render.h
■ GLES-Render.cpp
그러고 나서 다음의 디렉터리에서
{Cocos2d-x가 설치된 디렉터리} / tests / cpp-tests / Resources / Images
아래의 파일을 찾아 리소스 폴더에 추가합니다.
[ HelloWorldScene.h – 박스2D 휠 조인트 ]
… 생략 : Box2dEx04의 코드와 같음 …
[ HelloWorldScene.cpp – 박스2D 휠 조인트 ]
… 생략 : Box2dEx04의 코드와 같음 …
void HelloWorld::setBox2dWorld()
{
// 마우스 조인트 바디를 생성해서 월드에 추가한다.
bDrag = false;
gbody = this->addNewSprite(Vec2(0, 0), Size(0, 0), b2_staticBody, nullptr, 0);
// *****************************************************************************
b2WheelJointDef jd1;
b2WheelJointDef jd2;
body0 = this->addNewSprite(Vec2(340, 70), Size(100, 40), b2_dynamicBody, nullptr, 0);
b2Body* body1 = this->addNewSprite(Vec2(310, 50), Size(30, 30),
b2_dynamicBody, nullptr, 1);
b2Body* body2 = this->addNewSprite(Vec2(370, 50), Size(30, 30),
b2_dynamicBody, nullptr, 1);
b2Vec2 axis(0.0f, 1.0f);
jd1.Initialize(body0, body1, body1->GetPosition(), axis);
jd1.motorSpeed = 30.0f;
jd1.maxMotorTorque = 20.0f;
jd1.enableMotor = true;
jd1.frequencyHz = 4.0f;
//jd1.dampingRatio = 0.7f;
jd2.Initialize(body0, body2, body2->GetPosition(), axis);
jd2.motorSpeed = 30.0f;
jd2.maxMotorTorque = 20.0f;
jd2.enableMotor = true;
jd2.frequencyHz = 4.0f;
//jd2.dampingRatio = 1.0f;
m_spring1 = (b2WheelJoint*)_world->CreateJoint(&jd1);
m_spring2 = (b2WheelJoint*)_world->CreateJoint(&jd2);
}
… 생략 : Box2dEx04의 코드와 같음 …
void HelloWorld::tick(float dt)
{
int velocityIterations = 8;
int positionIterations = 3;
// Step : 물리 세계를 시뮬레이션한다.
_world->Step(dt, velocityIterations, positionIterations);
// 만들어진 객체 만큼 루프를 돌리면서 바디에 붙인 스프라이트를 여기서 제어한다.
for (b2Body* b = _world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != nullptr) {
Sprite* spriteData = (Sprite *)b->GetUserData();
spriteData->setPosition(Vec2(b->GetPosition().x * PTM_RATIO,
b->GetPosition().y * PTM_RATIO));
spriteData->setRotation(-1 * CC_RADIANS_TO_DEGREES(b->GetAngle()));
}
}
// 월드 안에서 좌우로 움직임을 제어한다. -- 추가 부분
b2Vec2 p = body0->GetPosition();
//log("%f..%f", p.x, p.y);
if (p.x < 1.6)
{
m_spring1->SetMotorSpeed(-30.0f);
m_spring2->SetMotorSpeed(-30.0f);
}
else if (p.x > 13.4) {
m_spring1->SetMotorSpeed(30.0f);
m_spring2->SetMotorSpeed(30.0f);
}
}
… 생략 : Box2dEx04의 코드와 같음 …
jd1.Initialize(body0, body1, body1->GetPosition(), axis);
jd1.motorSpeed = 30.0f;
jd1.maxMotorTorque = 20.0f;
jd1.enableMotor = true;
jd1.frequencyHz = 4.0f;
// 월드 안에서 좌우로 움직임을 제어한다. -- 추가 부분
b2Vec2 p = body0->GetPosition();
//log("%f..%f", p.x, p.y);
if (p.x < 1.6)
{
m_spring1->SetMotorSpeed(-30.0f);
m_spring2->SetMotorSpeed(-30.0f);
}
else if (p.x > 13.4) {
m_spring1->SetMotorSpeed(30.0f);
m_spring2->SetMotorSpeed(30.0f);
}
내폰젤무거워