adsense


[cocos2d-x] 2D 슈터겜 3종세트 소스


세 가지 스타일 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


덧글

  • 더우 2022/12/28 13:25 # 삭제 답글

    안녕하세요 선생님 !
    그 1번 예제를 인용해서 사용하는데 vector<Sprite*> 정의 할때 vector가 템플릿이 아닙니다 라고 뜹니다 ㅠ
  • 펭귄대왕 2022/12/28 14:24 #

    using namespace std; 되어있는지 봐주세요.
  • 더우 2022/12/28 14:39 # 삭제

    악 ! 바본가봐요 이런게 안보이네요 ㅠ

    그리구 총알구현을 했는데 키를 눌리면 움직이는게 아니라 그냥 캐릭터위에 제자리 생성하고 끝입니다 ㅠ

    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);
    이렇게 추가했는데 반응이없네요 ㅠ
  • 펭귄대왕 2022/12/28 15:42 #

    총알을 생성해서 add만 하고 움직이는 코드가 없네요.
    목표 좌표를 구해서 MoveTo를 사용하거나,
    샘플 소스에서
    //플레이어가 발사한 총알의 비행/적과의 충돌 체크
    이하 부분을 보고 총알이 비행하는 로직을 추가해 주거나 해야 합니다.
  • 더우 2022/12/30 13:17 # 삭제

    안녕하세요 선생님! 올려주신소스로 열심히 하고있습니다 ㅎ

    근데 그 몬스터 충돌 소스랑 저 캐릭터 움직이는
    auto x = Hero->getPositionX(); < 요쪽부분이 읽기 액세스 위반이라고 뜨는데 이건 어디서 잘못된걸까요 ㅠ?
  • 더우 2022/12/30 13:25 # 삭제 답글

    처리되지 않은 예외가 throw됨: 읽기 액세스 위반입니다.
    this->Hero->이(가) 0xDDDDDDDD였습니다.

    요런오류 입니다 ㅠㅠ
  • 펭귄대왕 2022/12/30 13:35 #

    Hero가 생성되어있지 않거나 생성 후 소멸했습니다.
    Sprite라면 Hero = Sprite::create 식으로 생성해준 부분이 있을텐데, 여기서 create 한 후 제대로 생성이 됐는지 확인해보세요. 중단점을 걸어서 디버깅하거나, 생성 직후에 바로 억세스 해 보거나. (파일명이나 경로가 틀려서 제대로 생성되지 않았을 수 있습니다)
    또, Hero가 생성됐어도 addChild 를 하지 않으면 cocos엔진에 의해 메모리에서 삭제됩니다.

    그게 아니고 Hero = getChildByName("HERO"); 이런 식으로 getChild로 얻어온거라면 태그나 이름이 틀렸거나 혹은 부모 노드를 잘못 지정해서 얻어지지 않았을 수 있습니다.
댓글 입력 영역


Books

Geek라이프

나의 오락실 이야기 (나와 인생을 함께한 오락실 연대기)
이시이 젠지 저/엄다인 역/꿀딴지곰 감수

기초부터 시작하는 모형 전자공작
박성윤 저

MSX&재믹스 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

핵심강좌! Cocos2d-x
이재환 저
예스24 | 애드온2
일본서적 전문사이트 NEPIC