Вопрос по iphone – Как лучше всего сделать анимацию прыгающего мяча с бесконечным циклом на iPhone?

1

Я разрабатываю игру для iPhone, в которой птицы подпрыгивают.

Я настроил изображения для анимации крыльев летящей птицы следующим образом:

<code>[imgBird[i] setAnimationImages:birdArrayConstant];
[imgBird[i] setAnimationDuration:1.0];
[imgBird[i] startAnimating];
</code>

Теперь я заставляю птицу двигаться, используя NSTimer для стрельбы каждые 0,03 секунды, который добавляет / вычитает 1 из координаты x или y из imgBird [i] .center.

Я узнал о том, как делать это отсюда.http://icodeblog.com/2008/10/28/iphone-programming-tutorial-animating-a-ball-using-an-nstimer/

Но проблема в том, что птицы замедляются, как только срабатывает другой таймер (для перемещения моего корабля таким же образом) и возвращается к первоначальной скорости, когда я прекращаю движение корабля.

Есть ли лучший способ сохранить движение птицы, кроме NSTimer?

Движение птицы - это бесконечный цикл.

Ваш Ответ

3   ответа
4

ш проект.

Добавьте эти строки в начало вашего файла.

#import <QuartzCore/QuartzCore.h>
#import <CoreGraphics/CoreGraphics.h>

...

UIImageView *bird = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bird2.png"]];

CALayer *b = bird.layer;

// Create a keyframe animation to follow a path to the projected point

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"scale"];
animation.removedOnCompletion = NO;


// Create the path for the bounces
CGMutablePathRef thePath = CGPathCreateMutable();

// Start the path at my current location
CGPathMoveToPoint(thePath, NULL, bird.center.x, bird.center.y);
CGPathAddLineToPoint(thePath, NULL,20, 500.0);

/*  // very cool path system.
CGMutablePathRef thePath = CGPathCreateMutable();
CGPathMoveToPoint(thePath,NULL,74.0,74.0);

CGPathAddCurveToPoint(thePath,NULL,74.0,500.0,
                      320.0,500.0,
                      320.0,74.0);
CGPathAddCurveToPoint(thePath,NULL,320.0,500.0,
                      566.0,500.0,
                      566.0,74.0);
*/

//animation.rotationMode = kCAAnimationRotateAuto;

animation.path = thePath;

animation.speed = 0.011;
//animation.delegate = self;
animation.repeatCount = 1000000;

// Add the animation to the layer
[b addAnimation:animation forKey:@"move"];

Надеюсь, это немного поможет.

Спасибо Джон ... Теперь я делаю это так. Chintan Patel
1

что ты используешь более одного таймера. Используйте только один, чтобы оживить все ваши объекты. Где-нибудь, когда ваше приложение запускается, имейте это:

[NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(mainLoop:) userInfo:nil repeats:YES];

Затем в основном цикле что-то вроде этого:

- (void)mainLoop:(NSTimer *)timer
{
    // compute new position for imgBirds
    for (int i=0; i<kBirdCount; i++)
    {
        imgBirds[i].center = CGPointMake(somex, somey);
    }

    // compute new position for ship
    ship.center = CGPointMake(somex, somey);
}

Кроме того, ты должен вычислитьsomex а такжеsomey как функция вашего интервала таймера. Таким образом, если вы измените его, ваша анимация будет выглядеть так ж

Вы правы, что я использую более одного NSTimer. Но я должен сделать это, так как я лишаю законной силы «движущийся» корабля, когда я хочу остановить его (в моем случае, событие касания внутри кнопки). И в функции я вижу, как вы проходите мимо NSTimer, но не пользуетесь им. Это ошибка или вы хотите, чтобы я понял что-то, что вы не написали? Chintan Patel
У вас может быть бул для движения вашего корабля: если это правда, вы обновляете позицию корабля, если ложь, то нет. Кроме того, NSTimer всегда передается методу при вызове запланированным NSTimer. Marco Mustapic
0

ц. Взгляни на CAAnimation в документах. Вы в основном настраиваете анимацию, путь, по которому вы хотите, чтобы она двигалась, и просто указываете ее запуск. Это позаботится обо всем остальном. Он также поддерживает замедление, которое замедляет и ускоряет темп, поэтому выглядит более естественным.

Благодарность. Да, я смотрю на код MoveMe прямо сейчас. Надеюсь, это решит проблему. Я должен поддерживать постоянную скорость птицы, что должно облегчить е Chintan Patel

Похожие вопросы