Проблемы с анимацией Cocos2D

Я делаю игру в Cocos2D версии 3.1, используя spriteBuilder. Я создаю свою анимацию, добавляя список кадров в массив и сохраняя его в кеше. Когда мне нужно запустить анимацию, я беру ее из кеша и проигрываю на экране. Это отлично работает для моей анимации бега. У меня есть другая анимация, в которой мой персонаж скользит. Когда я запускаю анимацию скольжения после анимации бега, кажется, что мой персонаж скользит в воздухе, не пересекая землю. Причина этого, вероятно, в том, что кадры загружаются сразу после бегущей анимации, поэтому они загружаются в то же место, что и бегущая анимация. Поскольку кадры анимации скольжения меньше, чем кадры анимации бега, создается впечатление, что игрок плывет.

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

Спасибо


person user2852657    schedule 23.07.2014    source источник
comment
совет: всегда используйте один и тот же размер кадра для набора анимаций. Лишнее прозрачное пространство будет обрезано, если вы создадите листы спрайтов.   -  person LearnCocos2D    schedule 24.07.2014
comment
@LearnCocos2D Я не уверен, что полностью понимаю, что вы имеете в виду. Когда я создаю свою графику в Illustrator, я экспортирую ее в формате PNG с прозрачным фоном. Это неправильно с моей стороны?   -  person user2852657    schedule 24.07.2014
comment
нет, но все ваши экспортированные файлы png должны иметь одинаковые размеры, чтобы избежать этой проблемы, с которой вы столкнулись, - хотя вы можете исправить это в коде, это исправление будет хрупким, правильно примененным и удаленным в зависимости от того, какой кадр спрайт в настоящее время отображает. Вы не хотите идти туда.   -  person LearnCocos2D    schedule 24.07.2014
comment
Я также создаю сенсоры для своего персонажа с помощью CGRectMake. Мои ограничивающие рамки пропорциональны размеру символа, например, позиция x — self.boundingbox.origin.x, а высота — self.boundingbox.size.height. Не повлияют ли все файлы png с одинаковыми размерами на датчики?   -  person user2852657    schedule 24.07.2014
comment
Да, я пробовал это. Размер каждого кадра анимации моих персонажей составляет примерно 100 на 100 пикселей. Итак, я создал документ размером 200 на 200 пикселей в иллюстраторе и экспортировал файлы png, чтобы каждый из них был теперь размером 200 на 200 пикселей. Следовательно, размер был одинаковым. Судя по всему, умные спрайты spritebuilder не обрезали лишнее прозрачное пространство, потому что датчики моего персонажа отключены. Игра думает, что персонаж столкнулся со стеной, хотя на самом деле это не так. Можете ли вы сказать мне, как это исправить?   -  person user2852657    schedule 24.07.2014
comment
Вот скриншот из spritebuilder, обратите внимание на разницу в размерах кадров. [ссылка]gyazo.com/e432d9fc67c09ba2c759a78cec83d658   -  person user2852657    schedule 24.07.2014


Ответы (1)


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

РЕДАКТИРОВАТЬ: Вы, кажется, знаете, где должна быть нижняя часть кадра. На земле? Поэтому, если вы хотите, чтобы нижняя часть спрайта была в одном и том же месте при загрузке анимации, установите положение, например:

sprite.position = ccp(x, theBottomY + sprite.boundingBox.size.height/2);
person mntruell    schedule 24.07.2014
comment
Я использую гравитацию. Как я могу просто использовать один и тот же размер кадра для всех анимаций? Как бы я это реализовал? - person user2852657; 24.07.2014
comment
Я не использовал конструктор спрайтов, но посмотрите, есть ли в нем функция обрезки. @user2852657 - person mntruell; 24.07.2014
comment
Я не уверен. Допустим, так и было, тогда что? @mntruell - person user2852657; 24.07.2014
comment
Ну, вы можете обрезать все кадры до одинакового размера, но если бы вы обрезали часть спрайта, я бы просто менял положение каждый раз, когда вы загружаете анимацию. - person mntruell; 24.07.2014