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

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Проблемсы с анимацией О_0

Помечено: 

В этой теме 6 ответов, 2 участника, последнее обновление  newUser11 8 года/лет, 10 мес. назад.

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Автор
    Сообщения
  • #1060

    newUser11
    Участник
    Сообщений:10

    Зарегистрирован:
    19.06.2015

    Репутация:4

    Всем привет, недавно начал изучать 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.
    #1062
    +1
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

    Зарегистрирован:
    04.01.2015

    Репутация:106

    Текущих кадров не 4, а больше. На примере из урока – там было три льва в строке, и кадров было 3. Аналогично тут.

    И откуда 270 ? 270 это длина шага кадра, там не больше 65 ти будет.

    первое число точно не 270. Попробуй подбором какое оно должно быть. там около 50 ти будет.

    у тебя 10 магов в строке, ширина спрайта 638. вот 638/10 по 64 шагать попробуй.

    и ширина и высота спрайта 32 38 должны быть чуть больше и ширина будет равна шагу, то есть попробуй тоже 64.

    #1063

    newUser11
    Участник
    Сообщений:10

    Зарегистрирован:
    19.06.2015

    Репутация:4

    Спс, поставил 64, анимация появилась.

    #1064

    newUser11
    Участник
    Сообщений:10

    Зарегистрирован:
    19.06.2015

    Репутация:4

    И вроде во все стороны теперь ходит нормально, только влево косячит,

    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));
    }

    Должен же нормально влево ходить, а там не влазит картинка.

    #1065

    newUser11
    Участник
    Сообщений:10

    Зарегистрирован:
    19.06.2015

    Репутация:4

    Вот

    Вложения:
    You must be logged in to view attached files.
    #1067
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

    Зарегистрирован:
    04.01.2015

    Репутация:106

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

    #1068

    newUser11
    Участник
    Сообщений:10

    Зарегистрирован:
    19.06.2015

    Репутация:4

    Сделал вот так :
    p.sprite.setTextureRect(IntRect(64 * int(CurrentFrame)+12, 384, 34, 38));
    Теперь всё нормально, спасибо:)

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)

Для ответа в этой теме необходимо авторизоваться.