Почему мой спрайт не движется с акселерометром? - PullRequest
0 голосов
/ 05 декабря 2011

Я пытался это исправить часами, но безуспешно. Я пытаюсь, чтобы мой подкласс CCSprite (thePlayer) перемещался по экрану вдоль оси Y относительно наклона устройства. Я делал это раньше, и все должно работать, но по некоторым причинам это не так. Вот код:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
    CGSize WinSize = [[CCDirector sharedDirector] winSize];
#define kFilteringFactor 0.1
#define kRestAccelX -0.6
#define kShipMaxPointsPerSec (WinSize.height*0.5)        
#define kMaxDiffX 0.2
    UIAccelerationValue rollingX, rollingY, rollingZ;
    rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
    float accelX = acceleration.x - rollingX;
    float accelDiff = accelX - kRestAccelX;
    float accelFraction = accelDiff / kMaxDiffX;
    float pointsPerSec = kShipMaxPointsPerSec * accelFraction;
    _shipPointsPerSecY = pointsPerSec;
    //CCLOG(@"PointsPerSec: %f", _shipPointsPerSecY);
    CGPoint pos = thePlayer.position;
    pos.y += _shipPointsPerSecY;
    CCLOG(@"Pos.y: %f", pos.y);
    thePlayer.position = pos;
}

- (void)update:(ccTime)dt
{
    CGSize WinSize = [[CCDirector sharedDirector] winSize];
    float maxY = WinSize.height - thePlayer.contentSize.height / 2;
    float minY = thePlayer.contentSize.height/2;
    float derp = _shipPointsPerSecY;
    //CCLOG(@"Derp: %f", derp);
    float newY = thePlayer.position.y + (_shipPointsPerSecY * dt);
    //CCLOG(@"NewY: %f", newY);
    newY = MIN(MAX(newY, minY), maxY);
    thePlayer.position = ccp(thePlayer.position.x, newY);
    //CCLOG(@"Player position Y: %f", thePlayer.position.y);
}

Это, пожалуй, вторая самая неприятная проблема, с которой я когда-либо сталкивался, поэтому любая помощь приветствуется, спасибо.

1 Ответ

1 голос
/ 06 декабря 2011

Похоже, что ваша pos.y в конечном итоге настраивается на основе acceleration.x;просто хочу убедиться, что вы не путаете ваши значения X и Y.

Также обратите внимание, что X и Y на акселерометре обычно относятся к одному и тому же выравниванию экрана, независимо от его ориентации.Таким образом, в альбоме acceleration.x фактически является вашим значением Y, и наоборот.В случае, если это применимо и здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...