2010-06-15 4 views
3

Мне нужно использовать функциональность акселерометра в моей игре iphone. Мне просто нужно переместить изображение, наклонив устройство. Однако большинство видео на YouTube просто показывают функцию наклона, которая каким-то образом перевернута и забывает включить калибровку. Я хочу, чтобы пользователь откалибровал свое устройство в любом положении, в котором они находятся. Кто-нибудь знает, как я должен начать с этого?Акселерометр и калибровка - iPhone SDK

Ваша помощь очень ценится,

Кевин

ответ

7

Я сделал приложение, как в этот раз. я выложу его здесь, но это для прошивки 4 ...

http://localhostr.com/files/7ca39c/Tilter.zip

Для калибровки:

int tapCount = 0; 
- (void)cancelDoubleTap { 
    if (tapCount < 2) { 
     tapCount = 0; 
    } 
} 
- (void)reset { 
    [[NSUserDefaults standardUserDefaults] setFloat:0 forKey:@"X-Calibrate"]; 
    [[NSUserDefaults standardUserDefaults] setFloat:0 forKey:@"Y-Calibrate"]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Reset!" message:@"Calibration reset." delegate:nil cancelButtonTitle:@"Okay." otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
} 
- (void)calibrate { 
    if (tapCount == 3) { 
     tapCount = 0; 
     return; 
    } 
    [[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@"X-Calibrate"]; 
    [[NSUserDefaults standardUserDefaults] setFloat:accelY forKey:@"Y-Calibrate"]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Calibrated!" message:[NSString stringWithFormat:@"Calibrated to: %.2f %.2f.", accelX, accelY] delegate:nil cancelButtonTitle:@"Okay." otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    tapCount = 0; 
} 
- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(cancelDoubleTap) userInfo:nil repeats:NO]; 
    tapCount ++; 
    if (tapCount == 3) { 
     [timer invalidate]; 
     [self reset]; 
     return; 
    } 
    if (tapCount == 2) { 
     [timer invalidate]; 
     timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(calibrate) userInfo:nil repeats:NO]; 
    } 
} 

И ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    but = [[UIButton alloc] initWithFrame:window.frame]; 
    [but addTarget:self action:@selector(touchesEnded:withEvent:) forControlEvents:UIControlEventTouchUpInside]; 
    [window addSubview:but]; 
    // Override point for customization after application launch. 
    box = [[UIView alloc] initWithFrame:CGRectMake(self.window.center.x - 50, self.window.center.y - 50, 100, 100)]; 
    [window makeKeyAndVisible]; 
    box.backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.75]; 
    [window addSubview:box]; 
    [[UIAccelerometer sharedAccelerometer] setDelegate:self]; 
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1/100.0)]; 
    slider = [[UISlider alloc] initWithFrame:CGRectMake(20, 438, 280, 22)]; 
    [slider setMinimumValue:2.0]; 
    [slider setMaximumValue:50.0]; 
    [window addSubview:slider]; 
    return YES; 
} 

.h файла:

#import <UIKit/UIKit.h> 

@interface TilterAppDelegate : NSObject <UIApplicationDelegate, UIAccelerometerDelegate> { 
    UIWindow *window; 
    UIView *box; 
    UISlider *slider; 
    UIButton *but; 
} 

@property (nonatomic, retain) IBOutlet UIButton *but; 
@property (nonatomic, retain) IBOutlet UISlider *slider; 
@property (nonatomic, retain) IBOutlet UIView *box; 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@end 

Код перемещения:

- (void)moveBoxByX:(float)x byY:(float)y { 
    float newX = box.center.x + x; 
    float newY = box.center.y + y; 
    if (newX < 50) 
     newX = 50; 
    if (newX > 270) 
     newX = 270; 
    if (newY < 50) 
     newY = 50; 
    if (newY > 430) 
     newY = 430; 
    box.center = CGPointMake(newX, newY); 
} 

Должен работать большую часть времени.

+2

СПАСИБО !! Я тоже разработчик, поэтому у меня тоже есть прошивка 4.0. Я проверю это! – lab12

+0

Добро пожаловать! –

+1

Это прекрасно !!! СПАСИБО СНОВА СНОВА СНОВА! – lab12

Смежные вопросы