Переместить объект CCSprite (cocos2d) в ландшафтном режиме в соответствии со значениями ускорения - PullRequest
0 голосов
/ 15 июля 2011

Я готовлю одну игру, для которой хочу переместить один объект в соответствии со значениями ускорения, игра в ландшафтном режиме.

Для игры я использую фреймворк cocos2d и меняю положение спрайта в соответствии со значениями ускорения. Вот мой код акселерометра

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration{
static float prevX=0, prevY=0, prevZ=0;
float accelX = acceleration.x * kFilterFactor + (1- kFilterFactor)*prevX;
float accelY = acceleration.y * kFilterFactor + (1- kFilterFactor)*prevY;
float accelZ = acceleration.z * kFilterFactor + (1- kFilterFactor)*prevZ;


prevX = accelX;
prevY = accelY;
prevZ = accelZ;

NSLog(@"x:%.2f,y:%.2f,z:%.2f",accelX, accelY, accelZ);

if ( ((player.position.x + (-accelY*kSpeed)) >0 && (player.position.x + (-accelY*kSpeed))<480)||
     ((player.position.y + (accelX*kSpeed)) >0 && (player.position.y + (accelX*kSpeed))<320)){

    player.position = ccp(player.position.x + (-accelY*kSpeed), player.position.y + (accelX*kSpeed));
}


CGPoint converted = ccp( (float)-acceleration.y, (float)acceleration.x);

// update the rotation based on the z-rotation
// the sprite will always be 'standing up'
player.rotation = (float) CC_RADIANS_TO_DEGREES( atan2f( converted.x, converted.y) + M_PI );
}

, где player - объект CCSprite. Плеер поворачивается в соответствии с ориентацией устройства, но не меняет положение в соответствии с ориентацией устройства. Что я делаю неправильно? Неужели в ландшафтном режиме ось x ведет себя так же, как ось y, а ось y ведет себя как х?

1 Ответ

0 голосов
/ 24 октября 2011

Значения ускорения x, y, z соответствуют режиму изображения iPhone. В других режимах вам нужно будет переназначить оси в соответствии с этим кодом:

-(void) setAccelerationWithX:(double)x y:(double)y z:(double)z
{
    rawZ = z;

    // transform X/Y to current device orientation
    switch ([CCDirector sharedDirector].deviceOrientation)
    {
        case kCCDeviceOrientationPortrait:
            rawX = x;
            rawY = y;
            break;
        case kCCDeviceOrientationPortraitUpsideDown:
            rawX = -x;
            rawY = -y;
            break;
        case kCCDeviceOrientationLandscapeLeft:
            rawX = -y;
            rawY = x;
            break;
        case kCCDeviceOrientationLandscapeRight:
            rawX = y;
            rawY = -x;
            break;
    }
}

В Значения ускорения Kobold2D уже сопоставлены с текущей ориентацией устройства , так что вам не нужно это учитывать.

...