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);
}
これはおそらく私が今まで持っていた二最も厄介な問題ですので、任意の助けが高く評価され、感謝します。
加速度計に「加速度計:didAccelerate:」セレクタをどのように配線しましたか? – Dani
私のGameWorldレイヤーには、cocos2dで新しいシーンを作成するための標準的なCCSceneがあります。私は確かに加速度計のデータを受けていますが、実際に何が起こっているのかわかりません... – tallen11
多分あなたのフィルタリングはそれをフィルタリングします – Dani