Cocos2d加速度计景观

时间:2012-11-13 16:12:20

标签: cocos2d-iphone accelerometer landscape

我无法使用cocos2d在横向模式下使加速度计正常工作。一切都在肖像中完美运作,但无法弄清楚如何将其翻转以在景观中正确工作。这是我的代码:

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{

float deceleration = 0.0f;
float sensativity = 15.0f;
float maxVelocity = 100;

playerVelocity.x = playerVelocity.x * deceleration + acceleration.x * sensativity;
playerVelocity.y = playerVelocity.y * deceleration + acceleration.y * sensativity;

if (playerVelocity.x > maxVelocity)
{
    playerVelocity.x = maxVelocity;
}
else if (playerVelocity.x < - maxVelocity)
{
    playerVelocity.x = - maxVelocity;
}

if (playerVelocity.y > maxVelocity)
{
    playerVelocity.y = maxVelocity;
}
else if (playerVelocity.y < - maxVelocity)
{
    playerVelocity.y = - maxVelocity;
}

}

-(void) update:(ccTime) delta
{
CGPoint pos = player.position;

pos.x += playerVelocity.x;
pos.y += playerVelocity.y;

CGSize screeSize = [[CCDirector sharedDirector]winSize];

float imageHalf = [player texture].contentSize.width * 0.5f;

float leftLimit = imageHalf;
float rightLimit = screeSize.width - imageHalf -20;

float bottomLimit = imageHalf;
float topLimit = screeSize.height - imageHalf - 20;

if (pos.y < bottomLimit) {
    pos.y = bottomLimit;
}
else if (pos.y > topLimit){
    pos.y = topLimit;
}

if (pos.x < leftLimit) {
    pos.x = leftLimit;
}
else if (pos.x > rightLimit){
    pos.x = rightLimit;
}

player.position = pos;
}

2 个答案:

答案 0 :(得分:3)

在横向方向上,加速度计x和y值被翻转。此外,在界面方向横向右侧,x为负。在横向左侧,y为负数:

// landscape right:
position.x = -acceleration.y
position.y = acceleration.x

// landscape left:
position.x = acceleration.y
position.y = -acceleration.x

答案 1 :(得分:1)

查看this question

中的答案

cocos2d游戏中加速度计使用的最佳方式。