2011-08-03 4 views
0

내 게임 (cocos2d)을 끝내었지만 xcode 제품 -> 보관 파일에서 보관함을 만들었 으면 공유 (game.api 얻기)를 클릭 한 다음 iTunes에 넣고 내 iPhone에 동기화 가속도계가 작동하지 않는 것처럼 보였습니다. 5 대의 장치에서 게임을 테스트했는데 작동하지 않았습니다. 우주선이 항상 고정 위치에 있고 이동하지 않았습니다. 그러나 빌드를 클릭하고 xcode에서 제대로 작동하면 모든 개발자 장치에서 나는 아래의 코드를 사용합니다 초기화 내부cocos2d + 가속도계 문제

- (id)init 
{ 
    if ((self = [super init])) 
    { 
    self.isAccelerometerEnabled = YES; 
    [self scheduleUpdate]; 
} 

가속도계 handeler :

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

#define kFilteringFactor 0.1 
UIAccelerationValue rollingX, rollingY, rollingZ; 

rollingX = (acceleration.x * kFilteringFactor) + 
    (rollingX * (1.0 - kFilteringFactor));  
rollingY = (acceleration.y * kFilteringFactor) + 
    (rollingY * (1.0 - kFilteringFactor));  
rollingZ = (acceleration.z * kFilteringFactor) + 
    (rollingZ * (1.0 - kFilteringFactor)); 

float accelX = acceleration.x - rollingX; 

CGSize winSize = [CCDirector sharedDirector].winSize; 

#define kRestAccelX 0.6 
#define kShipMaxPointsPerSec (winSize.height*0.5) 
#define kMaxDiffX 0.2 

float accelDiffX = kRestAccelX - ABS(accelX); 
float accelFractionX = accelDiffX/kMaxDiffX; 
float pointsPerSecX = kShipMaxPointsPerSec * accelFractionX; 

_shipPointsPerSecY = pointsPerSecX; 

} 

선박 위치 :

- (void)updateShipPos:(ccTime)dt { 

    CGSize winSize = [CCDirector sharedDirector].winSize; 

    float maxY = winSize.height - _ship.contentSize.height/2; 
    float minY = _ship.contentSize.height/2; 
    float newY ; 
    (isYAxisInverted) ? newY = _ship.position.y + (-_shipPointsPerSecY * dt) : newY = _ship.position.y + (_shipPointsPerSecY * dt); 
    newY = MIN(MAX(newY, minY), maxY); 
    _ship.position = ccp(_ship.position.x, newY); 

} 

하고 업데이트의 :

- (void)update:(ccTime)dt { 
... 
    [self updateShipPos:dt]; 
...} 

답변

1

솔루션을 대체하는 것입니다 :

UIAccelerationValue rollingX을;

의해

UIAccelerationValue rollingX = 0 rollingY = 0 rollingZ = 0;