2014-11-23 4 views
0

오리엔테이션을 Landscape Left에 잠근 상태로 아이폰에서 사용할 수있는 2 차원 게임에 대한 간단한 논리가 있습니다.IOS는 CMRotationRate를 사용하여 화면에서 객체를 이동합니다.

휴대 전화가 멀리에서 회전하는 경우, 가로 모드에서 들고 있다고 상상해보십시오. 개체를 위로 움직여야합니다. 그렇지 않으면 개체를 내려야합니다.

-(void)outputRotationData:(CMRotationRate)rotation 
{ 


    if (fabs(currentMaxRotY - rotation.y) < .3) { 
     return; 
    } 
    if(rotation.y > 0){ 
     if (!(ship.position.y < 10)) { 
      [ship runAction:actionMoveDown]; 
      NSLog(@"moving down"); 
     } 
    }else{ 
     if (!(ship.position.y > screenHeight)) { 
      [ship runAction:actionMoveUp]; 
      NSLog(@"moving up"); 

     } 
    } 

    currentMaxRotY = rotation.y; 


} 

위의 코드는 작동합니다. 당신이 기대하는 것만 큼은 아닙니다. 휴대 전화가 멀리 떨어져있을 때도 때로는 물체가 아래로 움직입니다. 그러나 그것은 대부분의 시간을 정확하게 움직입니다. 나는 우리의 마지막 회전과 현재 회전이 .3 이상 차이가 나지 않는다면 되돌아 감으로써 고쳐 졌을 것으로 생각되는 감도로 추정한다.

+0

자주 변경하는 작업은 적합하지 않으며 여러 이동 작업을 동시에 실행할 수도 있습니다. 회전 속성을 직접 업데이트 할 수도 있습니다. cocos2d 개발자 안내서에서이 artcile의 두 번째 절반을보십시오 : https://www.makegameswith.us/docs/#!/cocos2d/1.3/concepts/cocos2d-actions – LearnCocos2D

+0

아마도 자이로 스코프 회전은 절대 회전이 아니라 회전 차이? 그것을 확인하십시오. 실제로 자이로가 아닌 가속도계를 사용하려고 한 것입니까? – LearnCocos2D

답변

0

@ LearnCocos2D는 주석에서 언급했듯이, 자이로는 우리가 원하는 것이 아니다. 여기에서 사용하십시오.

아래 코드는 각도를 기반으로 한 위치에 개체를 배치합니다.

나는 이것도 사용하지 않고 결국 이동하기 위해 탭을 사용했다.

-(void)outputAccelertionData:(CMAcceleration)acceleration 
{ 

    double x, y, z, angle; 
    x = roundThree(acceleration.x); 
    y = roundThree(acceleration.y); 
    z = roundThree(acceleration.z); 
    angle = atan(x/z); 
    angle = [self RadiansToDegrees:angle]; 
    if (z == 0) { 
     angle = 90; 
    } 
    if (angle < 40) { 

     [self runThisAction:angle]; 
    }else if (angle > 50){ 

       [self runThisAction:-angle/2]; 
    } 

}