2013-03-19 3 views
0

Я делаю игру на данный момент, и у меня возникают проблемы с созданием D-Pad. В тот момент, когда я нажимаю кнопку, он будет запускаться только один раз, я не знаю, какое событие я могу вызвать, чтобы он постоянно запускал код, пока игрок не перестанет касаться кнопки. Когда я пытался использовать цикл while, он просто перегружает себя и не позволяет вам касаться других кнопок. Это код, который я обычно использую для перемещения игрока и фактическая загрузка кнопок и такой:Постоянно отправляя сообщения от UIButton

- (void) playerMoveLeft 
{  
    NSArray *images = [NSArray arrayWithObjects:img9,img10,img11,img12,img13,img14,img15,img16, nil]; 

    [imageView setAnimationImages:images]; 

     NSLog(@"Called left"); 
     CGRect myFrame = imageView.frame; 
     myFrame.origin.x = imageView.frame.origin.x - 5; 
     imageView.frame = myFrame; 
     [imageView startAnimating]; 
    [NSTimer scheduledTimerWithTimeInterval:0.6 
            target:self 
            selector:@selector(nothingMovingLeft) 
            userInfo:nil 
            repeats:NO]; 
    [myTimer invalidate]; 
    myTimer = nil; 
} 


{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    img1 = [UIImage imageNamed:@"walking-e0000.png"]; 
    img2 = [UIImage imageNamed:@"walking-e0001.png"]; 
    img3 = [UIImage imageNamed:@"walking-e0002.png"]; 
    img4 = [UIImage imageNamed:@"walking-e0003.png"]; 
    img5 = [UIImage imageNamed:@"walking-e0004.png"]; 
    img6 = [UIImage imageNamed:@"walking-e0005.png"]; 
    img7 = [UIImage imageNamed:@"walking-e0006.png"]; 
    img8 = [UIImage imageNamed:@"walking-e0007.png"]; 
    img9 = [UIImage imageNamed:@"walking-w0000.png"]; 
    img10 = [UIImage imageNamed:@"walking-w0001.png"]; 
    img11 = [UIImage imageNamed:@"walking-w0002.png"]; 
    img12 = [UIImage imageNamed:@"walking-w0003.png"]; 
    img13 = [UIImage imageNamed:@"walking-w0004.png"]; 
    img14 = [UIImage imageNamed:@"walking-w0005.png"]; 
    img15 = [UIImage imageNamed:@"walking-w0006.png"]; 
    img16 = [UIImage imageNamed:@"walking-w0007.png"]; 

    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0,180.0,80.0,80.0)]; 

    NSArray *images = [NSArray arrayWithObjects:img7, nil]; 

    [imageView setAnimationImages:images]; 

    [imageView setAnimationRepeatCount:100]; 

    [imageView setAnimationDuration:0.5]; 

    [imageView startAnimating]; 

    [myView addSubview:imageView]; 


    moveRight = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    [moveRight addTarget:self action:@selector(playerMoveRight) forControlEvents:UIControlEventTouchUpInside]; 

    [moveRight setTitle:@"->" forState:UIControlStateNormal]; 

    moveRight.frame = CGRectMake(200, 280, 60, 60); 

    [myView addSubview:moveRight]; 



    //longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(whichWayToMove:)]; 

    //longPress.minimumPressDuration = 0.0; 

    //[myView addGestureRecognizer:longPress]; 

    moveLeft = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    [moveLeft addTarget:self action:@selector(playerMoveLeft) forControlEvents:UIControlEventTouchUpInside]; 

    [moveLeft setTitle:@"<-" forState:UIControlStateNormal]; 

    moveLeft.frame = CGRectMake(30, 280, 60, 60); 

    [myView addSubview:moveLeft]; 

    NSLog(@"Finished setup"); 
} 

ответ

2

При использовании таймера в вашем playerMoveLeft, вы должны использовать тот же метод в таймере повторите сам, он будет работать только один раз в соответствии с вашим кодом. во-вторых, вы устанавливаете повтор в NO, для повторения использования YES

[NSTimer scheduledTimerWithTimeInterval:0.6 
            target:self 
            selector:@selector(playerMoveLeft) 
            userInfo:nil 
            repeats:YES]; 
1

USE NSTimer для вызова несколько раз с особым TIME INTERVAL

[NSTimer scheduledTimerWithTimeInterval:2.0 // You can set TimeInterval as u need. 
    target:self 
    selector:@selector(targetMethod) 
    userInfo:nil 
    repeats:YES]; 

метод вызова targetMethod для 2,0 интервала времени

-(void)targetMethod 
{ 
    // write code for your method 
} 

И вы также можете остановить NSTimer от usi нг его метод invalidate

[MyTimer invalidate]; 

Для получения дополнительной информации о NSTimer чтения How do I use NSTimer?

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