2011-12-04 12 views
0

私は何時間もこれを修正しようとしています。私は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); 
} 

これはおそらく私が今まで持っていた二最も厄介な問題ですので、任意の助けが高く評価され、感謝します。

+0

加速度計に「加速度計:didAccelerate:」セレクタをどのように配線しましたか? – Dani

+0

私のGameWorldレイヤーには、cocos2dで新しいシーンを作成するための標準的なCCSceneがあります。私は確かに加速度計のデータを受けていますが、実際に何が起こっているのかわかりません... – tallen11

+0

多分あなたのフィルタリングはそれをフィルタリングします – Dani

答えて

1

pos.yは、最終的にacceleration.xに基づいて調整されているようです。 XとYの値を混同しないようにしてください。

また、加速度計のXとYは、通常、画面の向きに関係なく、画面の同じ配置に関係しています。したがって、ランドスケープでは、acceleration.xは実際にはY値であり、その逆もあります。この場合も同様です。

関連する問題