Cocos2dx:CCAcceleration
간단한 사용방법
우선, 관련 이벤트를 획득하기 위한 메서드를 상속받는다.
덧붙여서, onEnter()는 아래와 같이 설명되어있다.
- Event callback that is invoked every time when CCNode enters the 'stage'.
- If the CCNode enters the 'stage' with a transition, this event is called when the transition starts. During onEnter you can't access a "sister/brother" node. If you override onEnter, you shall call its parent's one, e.g., CCNode::onEnter().
onEnter()에 가속도 센서의 사용여부를 추가한다.
센서를 적용할 경우 화면밖으로 나가지 않도록 조정할 매크로를 작성한다.
#define FIX_POSITION(pos, min, max) \
if (pos < min) { \
pos = min; \
} else if (pos > max) { \
pos = max; \
}
플레이어 CCSprite 캐릭터를 init()에 생성한다.
_player = CCSprite::create(kPlayerPng);
if (_player != NULL) {
_player->setPosition(ccp(window_size.width / 2.0f, window_size.height / 2.0f));
_player->retain();
addChild(_player);
}
중요한 점은 플레이어 객체는 멤버변수로 적용하며, 소멸자에서 _player->release();
를 호출해야 한다. 마지막으로, didAccelerate()를 구현한다.
void GameScene::didAccelerate(cocos2d::CCAcceleration * acceleration)
{
using namespace cocos2d;
CCDirector * director = CCDirector::sharedDirector();
if (_player == NULL || director == NULL) {
return;
}
CCSize player_size = _player->getContentSize();
CCPoint player_position = _player->getPosition();
CCPoint ui_position = director->convertToUI(player_position);
ui_position.x += acceleration->x * kGravityConstant;
ui_position.y -= acceleration->y * kGravityConstant;
CCPoint next_position = director->convertToGL(ui_position);
CCSize window_size = CCDirector::sharedDirector()->getWinSize();
FIX_POSITION(next_position.x,
(player_size.width / 2.0f),
(window_size.width - player_size.width / 2.0f));
FIX_POSITION(next_position.y,
(player_size.height / 2.0f),
(window_size.height - player_size.height / 2.0f));
_player->setPosition(next_position);
}