횡스크롤 또는 종스크롤 게임을 만들때 케릭터를 중심으로 배경이랑 맵이랑 움직이고 싶을때가 많은데요
이럴때 사용하면 좋을 함수가 있어서 소개하고자 합니다.
아래 화면은 현재 개발중인 게임실제 화면입니다.
케릭터의 위치를 중심으로 맵이 움직이게 됩니다.
또한 화면 최상단의 UI들은 항상 화면에 표시되게 위치를 보정시켰습니다.
[ 사용 예제 ]
void GameScene::init()
{
_pRoot = CSLoader::createNode("GameScene.csb");
addChild(_pRoot);
_pMudman = (Sprite*)_pRoot->getChildrenByName("mudman");
_pUI = (Node*)_pRoot->getChildrenByName("ui");
_pTileMap = (TMXTiledMap*)_pRoot->getChildrenByName("tiledmap");
}
void GameScene::update(float dt)
{
tickMudmanMove();
}
void GameScene::tickMudmanMove()
{
// 화면의 중심으로 오게 하고 싶은 케릭터의 위치값을 구해서
// 파라미터로 넘겨줍니다.
Point pos = _pMudman->getPosition();
setViewPointCenter(pos);
}
이 함수는 아래 블로그에서 발췌했습니다.
https://www.raywenderlich.com/39113/cocos2d-x-tile-map-tutorial-part-1
다만 추가한 내용은 화면에 항상 표시되어야할 UI들을 위치값을 보정시켰습니다.
void GameScene::setViewPointCenter(Point position)
{
// 케릭터의 중심위치를 구하는 코드
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
int x = MAX(position.x, winSize.width / 2);
int y = MAX(position.y, winSize.height / 2);
x = MIN(x, (_pTileMap->getMapSize().width * _pTileMap->getTileSize().width) - winSize.width / 2);
y = MIN(y, (_pTileMap->getMapSize().height * _pTileMap->getTileSize().height) - winSize.height / 2);
CCPoint actualPosition = ccp(x, y);
CCPoint centerOfView = ccp(winSize.width / 2, winSize.height / 2);
CCPoint viewPoint = ccpSub(centerOfView, actualPosition);
// 이 부분에서 케릭터 중심으로 화면을 세팅하게 됩니다.
// 다만 문제는 이러면 Scene 전체가 움직이게 됨으로, 버튼이나 항상 화면에 표시하고 싶은것 까지
// 다같이 움직이는 문제가 발생합니다.
this->setPosition(viewPoint);
// 이럴때 제가 쓰는 방법은 항상 화면위에 표시하고 싶은 UI들을 움직인것 만큼 보정시켜주는 코드를
// 삽입하는 방법입니다.
// 이렇게 하면 Tiledmap 화면은 움직이고 화면에 계속 보여주고 싶은 UI들은 항상 화면위에 표시됩니다.
CCPoint uiViewPoint = ccpSub(actualPosition, centerOfView);
_pUI->setPosition(uiViewPoint);
}
'개발 > 앱' 카테고리의 다른 글
추석게임추천 미로탐험대 미로찾기게임 (안드로이드 무료게임) (0) | 2016.09.14 |
---|---|
SPSS 반복측정 분산분석 손쉽게 하기 (Repeated measures ANOVIA) (1) | 2016.09.07 |
심심풀이 게임추천 킹덤 러쉬 프런티어 (0) | 2016.09.06 |
앱 개발에 필요한 무료 이미지 사이트 추천 (0) | 2016.08.30 |
하루노트앱 하루일정관리 체크리스트 계획하기 (안드로이드앱 추천) (0) | 2016.08.29 |
안드로이드 게임앱 로또내꺼 (로또 이제 게임으로 즐겨요) (0) | 2016.08.29 |
코코스2dx 콜백함수 사용하기 (cocos2dx callback function) (0) | 2016.08.29 |
코코스2d-x 스케줄러 사용하기 (cocos2dx scheduler example) (0) | 2016.08.29 |
최근댓글