
세 가지 스타일 2D 탑뷰 슈터게임을 구현하기 위한 기초 예제 소스입니다.
게임 1. 오소독스한 세로 슈터게임. 화면 터치(마우스) 드래그로 전투기를 움직입니다.
게임 2. 아스테로이드 게임. 터치한 부분으로 전투기가 회전해 터치 부분을 목표로 총알을 쏘고 전투기를 직접 드래그하면 전투기를 움직일 수 있습니다. (기존의 자바 게임과 같은 리소스지만 구현은 상당히 다릅니다)
게임 3. 궁수의 전설 스타일 좀비 게임. 키보드의 방향키로 이동하며 키보드를 놓으면 가장 가까운 좀비를 향해 사격합니다.
cocos2d-x 4.0에서 만들었지만 대체로 3.1x에서도 무리없이 적용되..ㄹ겁니다
어디까지나 기초 구현을 위한 것이므로 디테일한 조정(피격범위 조정 등)은 들어가있지 않습니다. 그것은 각자의 과제로?
사용법
- 적당한 프로젝트를 생성 후, HelloWorldScene.cpp/h를 압축 내의 것으로 바꾸고
- Shooter1, 2, 3 폴더를 Resources 안에 풀어주고
- AppDelegate.cpp에서 해상도는 800*1280으로, HelloWorld::createScene을 HelloScene::createScene으로 바꾸면 됩니다.
국내에서는 극히 쓰임이 적은 엔진이지만 빠르고 가벼운 cocos2d-x를 공부하고자 하는 분께 도움이 되길 바랍니다.
파일 : Shooter3.zip
at 2020/09/05 15:44
덧글
그 1번 예제를 인용해서 사용하는데 vector<Sprite*> 정의 할때 vector가 템플릿이 아닙니다 라고 뜹니다 ㅠ
그리구 총알구현을 했는데 키를 눌리면 움직이는게 아니라 그냥 캐릭터위에 제자리 생성하고 끝입니다 ㅠ
updata에 이렇게 추가하고
Node* Hero = getChildByName("HERO");
if (isFire == true)
{
shootCnt -= delta;
if (shootCnt <= 0)
{
if (Hero)
{
shootBullet(Hero);
}
}
}
shootBullet에
auto bullet = Sprite::create("dongbang/PlayerBullet.png");
bullet->setName("BULLET");
bullet->setRotation(Hero->getRotation());//총알은 targetPos가 아니라 기체가 향하고 있는 방향으로 쏩니다
bullet->setPosition(_getDest(Hero->getPosition(), Hero->getRotation(), 20));
bullet->setScale(1.5f);
addChild(bullet);
이렇게 추가했는데 반응이없네요 ㅠ
목표 좌표를 구해서 MoveTo를 사용하거나,
샘플 소스에서
//플레이어가 발사한 총알의 비행/적과의 충돌 체크
이하 부분을 보고 총알이 비행하는 로직을 추가해 주거나 해야 합니다.
근데 그 몬스터 충돌 소스랑 저 캐릭터 움직이는
auto x = Hero->getPositionX(); < 요쪽부분이 읽기 액세스 위반이라고 뜨는데 이건 어디서 잘못된걸까요 ㅠ?
this->Hero->이(가) 0xDDDDDDDD였습니다.
요런오류 입니다 ㅠㅠ
Sprite라면 Hero = Sprite::create 식으로 생성해준 부분이 있을텐데, 여기서 create 한 후 제대로 생성이 됐는지 확인해보세요. 중단점을 걸어서 디버깅하거나, 생성 직후에 바로 억세스 해 보거나. (파일명이나 경로가 틀려서 제대로 생성되지 않았을 수 있습니다)
또, Hero가 생성됐어도 addChild 를 하지 않으면 cocos엔진에 의해 메모리에서 삭제됩니다.
그게 아니고 Hero = getChildByName("HERO"); 이런 식으로 getChild로 얻어온거라면 태그나 이름이 틀렸거나 혹은 부모 노드를 잘못 지정해서 얻어지지 않았을 수 있습니다.