2011-05-03 6 views
0

나는 가속도계로 사람을 움직일 수있는 앱을 가지고 있습니다. 준비가 된 일련 시퀀스가 ​​있고 그 다음 팝업 애니메이션을 사용하면 그 남자가 나타납니다. 비록 남자가 보이지 않고 준비 세트가 나타나면, 가속도계가 여전히 사용 가능하고 u가 그 사람을 움직일 수 있고 우발적으로 cgrectintersectsrect 변경을 사용하여 장애물을 만질 수 있습니다. 그래서 준비된 설정 순서에서 어떻게 가속도계를 비활성화하고 go word가 나타나면 다시 활성화 할 수 있습니까?일정 기간 동안 가속도계를 비활성화 한 다음 활성화하십시오

.H :

@interface GameScreen : UIViewController <UIAccelerometerDelegate> { 

IBOutlet UIImageView *image1; 
IBOutlet UIImageView *image2; 
UIImageView *ball; 
CGPoint delta; 
IBOutlet UIImageView *man; 
IBOutlet UIImageView *fang; 
IBOutlet UIImageView* hiddenView; 
IBOutlet UILabel* ready; 
IBOutlet UILabel* set; 
IBOutlet UILabel* go; 
IBOutlet UILabel* endScreen; 
IBOutlet UIImageView* guy; 


CAKeyframeAnimation *popAnimation; 
} 

@property (nonatomic, retain)UIImageView *image1; 
@property (nonatomic, retain)UIImageView *image2; 

-(void)checkCollision; 

@property (nonatomic, retain)IBOutlet UIImageView *ball; 
@property CGPoint delta; 
@end 

하는 .m :

당신은 정말 코딩에 좋은 책을 읽고이 작업을 수행하는 방법에 대한 아이디어를 얻기 위해 몇 가지 튜토리얼을하고 있지만되어야한다
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 

NSLog(@"x : %g", acceleration.x); 
NSLog(@"y : %g", acceleration.y); 
NSLog(@"z : %g", acceleration.z); 

delta.y = acceleration.y * 50; 
delta.x = acceleration.x * 50; 

ball.center = CGPointMake(ball.center.x + delta.x, ball.center.y + delta.y); 

// Right 
if(ball.center.x < 0) { 
    ball.center = CGPointMake(320, ball.center.y); 
} 

// Left 

if(ball.center.x > 320) { 
    ball.center = CGPointMake(0, ball.center.y); 

} 

// Top 

if(ball.center.y < 0) { 
    ball.center = CGPointMake(ball.center.x, 460); 

} 

// Bottom 
if(ball.center.y > 460){ 
    ball.center = CGPointMake(ball.center.x, 0); 

} 
[self checkCollision]; 

} 
+0

한 가지 방법 (최선의 방법은 아닐 수도 있음)은 * 위임 * 속성을 * nil *로 설정하는 것입니다. – EmptyStack

+0

내가 원하는 것을 찾을 수 없습니다 – user722566

+0

만약 당신이 남자의 움직임이 허용되는지 여부를 확인하기 위해 플래그 값을 가질 수 있습니다. – EmptyStack

답변

3

플래그의 개념은 간단합니다.

사용자가 이동 한 클래스에서 bCanMove 또는 그와 비슷한 bool이 있고 클래스가 초기화 될 때 false으로 설정합니다.

"준비, 안정, 진행"시퀀스가 완료되면 true으로 설정하십시오.

다음 단계는 운동을 수행하는 코드에서이 플래그를 확인하는 것입니다. 물론 코드는 볼 수 없지만 didAccelerate과 비슷한 이름의 메서드가 있어야합니다. 부울은 사실 여부이며, 그렇지 않은 경우 예를 들어, 아무것도하지 않는 경우 : 나는 당신의 코드를 볼 수 없기 때문에

if(!bCanMove) 
{ 
    return; 
} 

난 당신이 붙박이에 의존하고 있는지 모른다 메커니즘 등을 포함하지만, 다른 사람들이 (그리고 나 자신을) 진술했듯이, 여러분은 여기에서 이러한 종류의 질문을해서는 안됩니다. 여러분이 코딩에 익숙하지 않고 질문을 표현한 방식으로 말입니다. 세부 사항없이 도움을 받으십시오.) 조금 더 읽고 싶다면 물어보십시오.

최소한 : http://cocoadevcentral.com/d/learn_objectivec/을 읽어야합니다. 그러나 기본적인 프로그래밍 개념을 이해하지 못한다면 도움이되지 않을 것입니다. t) - 좋은 책/튜토리얼을 대신 할만한 것은 없다.

+0

+1, 개인적으로 나는이 "질문"이 답이 나오지 않았 으면 좋겠다고 생각합니다. –

+2

그리고 일부 코드를 두드리기보다는 실제 문제를 해결할 수 있습니다. –

+0

감사합니다. Josh, 저는이 질문이 보통 얻을 수있는 응답의 유형을 알고 있었고 실제 문제를 코드 문제와 대비하여 해결하는 방법을 제안하는 것이 더 낫다고 생각했습니다! –

관련 문제