【cocos2d-x】물리 엔진의 중력을 변경하면 몬스트도 만들 수 있어!
배경
Cocos2dx는 v3.x에서 Chipmunk2D로 통합되어 쉽게 구현할 수 있습니다.
중력을 변경하고 싶었지만 조금은 빠져 버렸으므로 메모를 해 둡니다.
중력을 0으로 함으로써 「몬스터 스트라이크」과 같은 움직임을 하는 앱을 간단하게 만들 수 있습니다!
물리 엔진을 켜고 중력을 변경
우선 물리 엔진을 켜십시오.
Scene의 create()를 createWithPhysics()로 바꾸면 켜집니다.
그런 다음 중력을 변경합니다. 다음과 같이 하면 중력이 0이 되어 우주 공간과 같이 됩니다.
PhysicsWorld* world = scene->getPhysicsWorld();
world->setGravity(Vec2(0, 0));
※ Vec2(0, -980) 로 하는 것으로 일반적인 현실 세계의 중력이 된다.
GameScene.cppScene* GameScene::createScene() {
//auto scene = Scene::create(); //通常シーンの作成
auto scene = Scene::createWithPhysics(); //物理エンジンのシーンの作成
auto layer = GameScene::create();
scene->addChild(layer);
//gravityを変更(現実の場合0,-980)
PhysicsWorld* world = scene->getPhysicsWorld();
world->setGravity(Vec2(0, 0));
return scene;
}
물체(PhysicsBody) 생성
여기에서는 원형과 사각형의 물체를 생성하는 샘플을 보여줍니다.
이 샘플은 로드할 이미지와 같은 크기의 객체를 생성합니다.
필요에 따라 변경하여 사용하면 좋다고 생각합니다.
원형 물체 생성
GameScene.cpp// 丸(物理エンジン)を作成
Sprite* GameScene::addNewCircleAtPosition(Node *parent, Point p, bool dynamic, const char *fileName) {
Sprite* sprite = Sprite::create(fileName);
auto material = PHYSICSBODY_MATERIAL_DEFAULT;
material.density = 1.0f; // 密度
material.restitution = 0.7f; // 反発係数
material.friction = 0.0f; // 摩擦係数
sprite->setPhysicsBody(PhysicsBody::createCircle((sprite->getContentSize().width/2 - 1), material));
sprite->getPhysicsBody()->setDynamic(dynamic);
sprite->setPosition(p);
parent->addChild(sprite, 10);
return sprite;
}
사각형 모양의 물체 생성
GameScene.cpp// 四角(物理エンジン)を作成
Sprite* GameScene::addNewBoxAtPosition(Node *parent, Point p, bool dynamic, const char *fileName) {
Sprite* sprite = Sprite::create(fileName);
auto material = PHYSICSBODY_MATERIAL_DEFAULT;
material.density = 1.0f; // 密度
material.restitution = 0.7f; // 反発係数
material.friction = 0.0f; // 摩擦係数
sprite->setPhysicsBody(PhysicsBody::createBox(sprite->getContentSize(), material));
sprite->getPhysicsBody()->setDynamic(dynamic);
sprite->setPosition(p);
parent->addChild(sprite, 10);
return sprite;
}
이런 느낌으로 사용합니다.
GameScene.cpp// 固定された物体(壁などに利用)
auto map = this->addNewBoxAtPosition(this, Point(0, 100), false, "map.png");
// 物理計算されてダイナミックに動く物体(プレイヤーなどに利用)
auto player = this->addNewBoxAtPosition(this, Point(100, 100), true, "player.png");
실제로 움직이기
실제로 움직이면 중력을 무시한 상태가 되어, 튀어나와도 똑바로 이동하게 됩니다.
파라미터를 조정함으로써, 의사 몬스트와 같은 동작을 실현할 수 있습니다.
반발 계수를 1.0로 설정하면 영원히 되돌아갈 수 있습니다.
계수를 여러가지 변경해 시험해 놀아 보세요.
후기
이 메커니즘을 사용하여 최근 앱을 만들었습니다.
원한다면 봐주세요.
참고: 【쿠마노 굿코】 재키의 호시 아츠메

이번은 「물리 엔진의 중력을 변경해 놀기」였습니다.
그럼 또.
Reference
이 문제에 관하여(【cocos2d-x】물리 엔진의 중력을 변경하면 몬스트도 만들 수 있어!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tadamatu/items/df7e9ad060462936fcde
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 물리 엔진을 켜십시오.
Scene의
create()를 createWithPhysics()로 바꾸면 켜집니다.그런 다음 중력을 변경합니다. 다음과 같이 하면 중력이 0이 되어 우주 공간과 같이 됩니다.
PhysicsWorld* world = scene->getPhysicsWorld();
world->setGravity(Vec2(0, 0));
※
Vec2(0, -980) 로 하는 것으로 일반적인 현실 세계의 중력이 된다.GameScene.cpp
Scene* GameScene::createScene() {
//auto scene = Scene::create(); //通常シーンの作成
auto scene = Scene::createWithPhysics(); //物理エンジンのシーンの作成
auto layer = GameScene::create();
scene->addChild(layer);
//gravityを変更(現実の場合0,-980)
PhysicsWorld* world = scene->getPhysicsWorld();
world->setGravity(Vec2(0, 0));
return scene;
}
물체(PhysicsBody) 생성
여기에서는 원형과 사각형의 물체를 생성하는 샘플을 보여줍니다.
이 샘플은 로드할 이미지와 같은 크기의 객체를 생성합니다.
필요에 따라 변경하여 사용하면 좋다고 생각합니다.
원형 물체 생성
GameScene.cpp// 丸(物理エンジン)を作成
Sprite* GameScene::addNewCircleAtPosition(Node *parent, Point p, bool dynamic, const char *fileName) {
Sprite* sprite = Sprite::create(fileName);
auto material = PHYSICSBODY_MATERIAL_DEFAULT;
material.density = 1.0f; // 密度
material.restitution = 0.7f; // 反発係数
material.friction = 0.0f; // 摩擦係数
sprite->setPhysicsBody(PhysicsBody::createCircle((sprite->getContentSize().width/2 - 1), material));
sprite->getPhysicsBody()->setDynamic(dynamic);
sprite->setPosition(p);
parent->addChild(sprite, 10);
return sprite;
}
사각형 모양의 물체 생성
GameScene.cpp// 四角(物理エンジン)を作成
Sprite* GameScene::addNewBoxAtPosition(Node *parent, Point p, bool dynamic, const char *fileName) {
Sprite* sprite = Sprite::create(fileName);
auto material = PHYSICSBODY_MATERIAL_DEFAULT;
material.density = 1.0f; // 密度
material.restitution = 0.7f; // 反発係数
material.friction = 0.0f; // 摩擦係数
sprite->setPhysicsBody(PhysicsBody::createBox(sprite->getContentSize(), material));
sprite->getPhysicsBody()->setDynamic(dynamic);
sprite->setPosition(p);
parent->addChild(sprite, 10);
return sprite;
}
이런 느낌으로 사용합니다.
GameScene.cpp// 固定された物体(壁などに利用)
auto map = this->addNewBoxAtPosition(this, Point(0, 100), false, "map.png");
// 物理計算されてダイナミックに動く物体(プレイヤーなどに利用)
auto player = this->addNewBoxAtPosition(this, Point(100, 100), true, "player.png");
실제로 움직이기
실제로 움직이면 중력을 무시한 상태가 되어, 튀어나와도 똑바로 이동하게 됩니다.
파라미터를 조정함으로써, 의사 몬스트와 같은 동작을 실현할 수 있습니다.
반발 계수를 1.0로 설정하면 영원히 되돌아갈 수 있습니다.
계수를 여러가지 변경해 시험해 놀아 보세요.
후기
이 메커니즘을 사용하여 최근 앱을 만들었습니다.
원한다면 봐주세요.
참고: 【쿠마노 굿코】 재키의 호시 아츠메

이번은 「물리 엔진의 중력을 변경해 놀기」였습니다.
그럼 또.
Reference
이 문제에 관하여(【cocos2d-x】물리 엔진의 중력을 변경하면 몬스트도 만들 수 있어!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tadamatu/items/df7e9ad060462936fcde
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 丸(物理エンジン)を作成
Sprite* GameScene::addNewCircleAtPosition(Node *parent, Point p, bool dynamic, const char *fileName) {
Sprite* sprite = Sprite::create(fileName);
auto material = PHYSICSBODY_MATERIAL_DEFAULT;
material.density = 1.0f; // 密度
material.restitution = 0.7f; // 反発係数
material.friction = 0.0f; // 摩擦係数
sprite->setPhysicsBody(PhysicsBody::createCircle((sprite->getContentSize().width/2 - 1), material));
sprite->getPhysicsBody()->setDynamic(dynamic);
sprite->setPosition(p);
parent->addChild(sprite, 10);
return sprite;
}
// 四角(物理エンジン)を作成
Sprite* GameScene::addNewBoxAtPosition(Node *parent, Point p, bool dynamic, const char *fileName) {
Sprite* sprite = Sprite::create(fileName);
auto material = PHYSICSBODY_MATERIAL_DEFAULT;
material.density = 1.0f; // 密度
material.restitution = 0.7f; // 反発係数
material.friction = 0.0f; // 摩擦係数
sprite->setPhysicsBody(PhysicsBody::createBox(sprite->getContentSize(), material));
sprite->getPhysicsBody()->setDynamic(dynamic);
sprite->setPosition(p);
parent->addChild(sprite, 10);
return sprite;
}
// 固定された物体(壁などに利用)
auto map = this->addNewBoxAtPosition(this, Point(0, 100), false, "map.png");
// 物理計算されてダイナミックに動く物体(プレイヤーなどに利用)
auto player = this->addNewBoxAtPosition(this, Point(100, 100), true, "player.png");
실제로 움직이면 중력을 무시한 상태가 되어, 튀어나와도 똑바로 이동하게 됩니다.
파라미터를 조정함으로써, 의사 몬스트와 같은 동작을 실현할 수 있습니다.
반발 계수를
1.0로 설정하면 영원히 되돌아갈 수 있습니다.계수를 여러가지 변경해 시험해 놀아 보세요.
후기
이 메커니즘을 사용하여 최근 앱을 만들었습니다.
원한다면 봐주세요.
참고: 【쿠마노 굿코】 재키의 호시 아츠메

이번은 「물리 엔진의 중력을 변경해 놀기」였습니다.
그럼 또.
Reference
이 문제에 관하여(【cocos2d-x】물리 엔진의 중력을 변경하면 몬스트도 만들 수 있어!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tadamatu/items/df7e9ad060462936fcde
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【cocos2d-x】물리 엔진의 중력을 변경하면 몬스트도 만들 수 있어!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tadamatu/items/df7e9ad060462936fcde텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)