Плавная анимация в Cocos2d для iOS - PullRequest
0 голосов
/ 22 ноября 2011

Я перемещаю простое CCSprite по экрану устройства iOS, используя этот код:

[self schedule:@selector(update:) interval:0.0167];

- (void) update:(ccTime) delta {
    CGPoint currPos = self.position;
    currPos.x += xVelocity;
    currPos.y += yVelocity;

    self.position = currPos;
}

Это работает, однако анимация не плавная. Как улучшить плавность анимации?

Моя сцена чрезвычайно проста (только один полноэкранный CCSprite с фоновым изображением и относительно небольшим CCSprite, который перемещается медленно).

Я зарегистрировал дельту ccTime, и она не соответствует (она почти всегда превышает мой указанный интервал 0,0167 ... иногда до 4 раз).

Я рассмотрел адаптацию движения в методе обновления к дельта-времени (большее дельта => большее движение и т. Д.). Однако, учитывая простоту моей сцены, кажется, есть лучший способ (и кое-что базовое, что я, вероятно, упускаю).

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

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

Вместо этого, умножьте ваши xVelocity и yVelocity на delta - это должно масштабировать скорости в гораздо более плавное движение.

Например:

- (void) update:(ccTime) delta {
    CGPoint currPos = self.position;
    currPos.x += (xVelocity * delta);
    currPos.y += (yVelocity * delta);

    self.position = currPos;
}
1 голос
/ 22 ноября 2011

Попробуйте использовать метод [self scheduleUpdate] по умолчанию, а не вызывать его напрямую, как вы это делаете, посмотрите, имеет ли это значение. Этот метод предназначен для того, что вы делаете, и может быть более плавным.

...