2013-03-19 111 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 
} 

你也可以通过usi停止NSTimer纳克其方法invalidate

[MyTimer invalidate]; 

更多有关NSTimer阅读How do I use NSTimer?