Лучший способ генерировать случайные изображения для перемещения сверху вниз - PullRequest
1 голос
/ 27 мая 2011

Я создаю игру с похожей концепцией, например Tap Tap Ant . Я генерирую динамические изображения, используя NSTimer, используя следующий код.

 NSTimer *tmrGenerateImages1 = [NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(generateImages) userInfo:nil repeats:YES];

 -(void)generateImages
 {
      UIImageView *tmpImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImg.png"]];
      [tmpImg setFrame:CGRectMake([self randomXValueBetween:30 andValue:280] , 50, 118, 97)];
      [self.view addSubview:tmpImg];
      [self.view bringSubviewToFront:tmpImg];
 }

 - (float)randomXValueBetween:(float)low andValue:(float)high {
     return (((float) arc4random() / 0xFFFFFFFFu) * (high - low)) + low;
 }

Мой вопрос заключается в том, чтобы нажать тап, и они генерируют 2/3 изображения за раз, и в моем случае я могу сгенерировать только одно изображение за раз, и у пользователя достаточно времени, чтобы нажать на него.

Пожалуйста, помогите мне.

EDIT: BOUNTY

Я хочу создавать динамические изображения, используя NSTimer или любым другим способом, аналогичным Tap Tap Ant . Пожалуйста, помогите мне в этом отношении. Если предложено решение, все пункты принадлежат вам.

Ответы [ 4 ]

5 голосов
/ 01 июня 2011

Если вы не хотите, чтобы ваша игра была быстро реагирующей и стабильной, я действительно рекомендовал бы изучить OpenGL или Cocos2d.

Выделение UIImageView для каждого и их постепенное перемещение (вы можетене прерывать анимации с нажатиями) действительно сделает игру ... ну ... медленной.

1 голос
/ 06 июня 2011

Вам нужно взять массив ImageView до МАКС. Количество муравьев, которое вы хотите отобразить на сцене при случайном подсчете

 UIImageView img[6];   

вызовите этот метод с количеством подсчетов массива из метода таймера

 -(void)InsideTimerMethod
   {
     for()
      {
      img[i] = [self createImageWithBackgroundInRect::CGRectMake(random*, y+i+constant*, 40, 80) withImageName:STRING FROM THE ARRAY RANDOMLY];
      }
   }


//custom method
- (uiimageview *)createImageWithBackgroundInRect:(CGRect)rect withImageName:(NSString   *)imageName{    
//set up all the necessary need for the image customize  
 }

Надеюсь, это поможет вам
удачи: -)

0 голосов
/ 05 июня 2011

Несмотря на то, что я предполагаю, что вы получите лучшую производительность, когда будете использовать API-интерфейсы ближе к собственному интерфейсу рисования, чем то, что предоставляет UIKit, у меня все еще есть идея.

Сначала вам нужноопределите, сколько изображений вы будете показывать в максимуме на каждом уровне .Предположим, у вас будет 100 изображений.

  1. В методе настройки для вида выделите все изображения
  2. Поместите все изображения в область, которая не видна (например, за пределами)
  3. Для каждогоNSTimerInterval выбирает для перемещения любое количество изображений в случайное место

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

Однако я не уверен, как это повлияет на общую концепцию рендеринга анимации для устройства.Я бы посоветовал взглянуть на концепцию CoreAnimation , которая является стандартной платформой для выполнения анимации на семействе устройств iOS.

0 голосов
/ 28 мая 2011

Таким образом, вы получите два или три изображения для каждого триггера.

NSArray * countPool = [NSArray arrayWithObjects:[NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];   

int count = [[countPool objectAtIndex:arc4random()%2] intValue];

for (int i = 0; i < count; i ++) {

    UIImageView *tmpImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImg.png"]];
    [tmpImg setFrame:CGRectMake([self randomXValueBetween:30 andValue:280] , 50, 118, 97)];
    [self.view addSubview:tmpImg];
    [self.view bringSubviewToFront:tmpImg];

}
...