【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.)