Цель C: заставить кнопки работать внутри изменяемого массива - PullRequest
2 голосов
/ 23 января 2011

Я создаю игру, в которой кнопки перемещаются по экрану, пока пользователь не нажмет их. То, что у меня есть, - это то, что кнопки перемещаются попеременно и генерируются случайным образом. Моя проблема в том, что когда создается новая кнопка, последняя перестает двигаться. Я пытаюсь объединить их в массив, но я не уверен, что это действительно заставит их двигаться.

-(void) generateStickFig:(NSTimer *)timer {

int x = random() % 100;
NSMutableArray *enemies = (NSMutableArray *)timer.userInfo;
if (x == 1) {
    stickFig = [[UIButton alloc] initWithFrame:CGRectMake(0, 650, 50, 50)];
    [stickFig setBackgroundColor:[UIColor blackColor]];
    [stickFig addTarget:self action:@selector(tapFig:) forControlEvents:UIControlEventTouchUpInside];
//  [enemies setObject:object forKey:[NSString stringWithFormat:@"object%i",i]];
    [enemies addObject:stickFig];
    int b = [enemies count];
    [self.view addSubview:stickFig];
    arrayNum++;
}



CGPoint oldPosition = stickFig.center;
stickFig.center = CGPointMake(oldPosition.x + 1 , oldPosition.y);


}

Ответы [ 2 ]

1 голос
/ 23 января 2011

Место, где хранятся кнопки, не имеет значения для их перемещения. Вы должны иметь рутину, которая оживляет их. Вы можете сделать это вручную, переместив их на небольшое количество в ответ на тик по таймеру. Самый простой способ - это быстрое перечисление по вашему массиву.

Таким образом, у вас есть подпрограмма генерации, которая есть в вашем выражении, подпрограмма перемещения и сенсорный обработчик IBAction, который удаляет кнопку из массива. Процедура генерации и процедура перемещения будут вызываться в вашем обработчике отметок времени. (Я склонен называть этот метод «handleTick»)

В псевдо-коде высокого уровня это будет примерно так:

//tick handler
handleTick:
  one out a hundred times, make a new button
          give it a random starting location
          store it in the buttons array
  every time:
    for button in buttons:
      move button a few pixels

//button touch handler
buttonWasTouched:button :
  [buttons removeObject: button];

Я только вхожу в систему, предоставленную анимацией, поэтому я не знаю, может ли ваша кнопка принимать прикосновения во время анимации, но я не удивлюсь.

0 голосов
/ 29 мая 2013

Чтобы узнать, какая кнопка была нажата из массива, вы можете использовать опцию тега для кнопки:

- (IBAction) buttonTouched:(id) sender withEvent:(UIEvent *) event
{
UIButton *btn = (UIButton *)sender;
// in my case, I store the position on the array as a tag for the button
NSUInteger index = btn.tag;
UIControl *control = sender;
// Now you know what button was touched
// Apply actions on to it: remove from superview, animate explosion...
}

Cheers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...