SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Проблемсы с анимацией О_0
Помечено: Анимация
В этой теме 6 ответов, 2 участника, последнее обновление newUser11 8 года/лет, 10 мес. назад.
-
АвторСообщения
-
Всем привет, недавно начал изучать sfml, и возникла проблема с отображением анимации.
Отображается некорректно, перебегает на совсем другую картинку. Пробовал делить координату на что-нибудь, ничего хорошего не вышло.
Вот как я делал анимацию:
if ((Keyboard::isKeyPressed(Keyboard::Left) || (Keyboard::isKeyPressed(Keyboard::A)))) {
CurrentFrame += 0.005*time;
if (CurrentFrame > 4) CurrentFrame -= 4;
herosprite.setTextureRect(IntRect((270*int(CurrentFrame), 384, 32, 38));
herosprite.move(-0.1*time, 0);
}
Вот спрайт.Вложения:
You must be logged in to view attached files.Текущих кадров не 4, а больше. На примере из урока – там было три льва в строке, и кадров было 3. Аналогично тут.
И откуда 270 ? 270 это длина шага кадра, там не больше 65 ти будет.
C++1herosprite.setTextureRect(IntRect((270*int(CurrentFrame), 384, 32, 38));первое число точно не 270. Попробуй подбором какое оно должно быть. там около 50 ти будет.
у тебя 10 магов в строке, ширина спрайта 638. вот 638/10 по 64 шагать попробуй.
и ширина и высота спрайта 32 38 должны быть чуть больше и ширина будет равна шагу, то есть попробуй тоже 64.
Спс, поставил 64, анимация появилась.
И вроде во все стороны теперь ходит нормально, только влево косячит,
if (Keyboard::isKeyPressed(Keyboard::A))
{
p.dir = 1; p.speed = 0.1;
atkPosition = ‘l';
CurrentFrame += 0.005*time;
if (CurrentFrame > 4) CurrentFrame -= 4;
p.sprite.setTextureRect(IntRect(64 * int(CurrentFrame), 384, 34, 38));
}if (Keyboard::isKeyPressed(Keyboard::D))
{
p.dir = 0; p.speed = 0.1;
atkPosition = ‘r';
CurrentFrame += 0.005*time;
if (CurrentFrame > 4) CurrentFrame -= 4;
p.sprite.setTextureRect(IntRect(64 * int(CurrentFrame), 128, 34, 38));
}Должен же нормально влево ходить, а там не влазит картинка.
Вот
Вложения:
You must be logged in to view attached files.Потому что когда он идет влево на картинке(где их много) изначально есть отступ слева. тебе просто надо брать с запасом этот отступ слева (т.е сделай ширину для всех спрайтов больше, чтобы захватить и здесь). либо вручную сместить магов идущих влево в фотошопе или паинте, чтобы там не было отступа. только уравнять надо как с верхними случаями. либо программно сместить.
Сделал вот так :
p.sprite.setTextureRect(IntRect(64 * int(CurrentFrame)+12, 384, 34, 38));
Теперь всё нормально, спасибо:) -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.