Вопросы по уроку № 20 Притяжение персонажа к земле

SFML и C++ Уроки \ Разработка игр Форумы SFML System, Window и другие вопросы Вопросы по уроку № 20 Притяжение персонажа к земле

В этой теме 4 ответа, 2 участника, последнее обновление Dracula Dracula 5 года/лет, 3 мес. назад.

Просмотр 5 сообщений - с 1 по 5 (из 5 всего)
  • Автор
    Сообщения
  • #1531
    Dracula
    Dracula
    Участник
    Сообщений:4

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

    Репутация:1

    Добрый вечер! Подскажите как восстановить анимацию персонажа при создании функции управления (void control):

    void control(){
    if (Keyboard::isKeyPressed(Keyboard::Left)) {
    state = left;
    speed = 0.1;
    }
    if (Keyboard::isKeyPressed(Keyboard::Right)) {
    state = right;
    speed = 0.1;
    }
    if ((Keyboard::isKeyPressed(Keyboard::Up)) && (onGround)) {
    state = jump; dy = -0.4; onGround = false;
    }
    if (Keyboard::isKeyPressed(Keyboard::Down)) {
    state = down;
    speed = 0.1;
    }
    }

    Перепробовал много способов, но почему-то везде провал:( Может быть нужно в функции void update прописать новый логический блок под анимацию, но как это сделать я не знаю.

    Так же возник вопрос по состоянию объекта jump. Как увеличить высоту прыжка?

    Заранее спасибо за ответ!

     

    #1532
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:587

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

    Репутация:106

    jump просто делать меньше dy. т.е dy чем меньше при прыжке, тем выше прыгнешь.

    про анимацию можно расписать если state == left, то давать такую то анимацию (описать это в ф ции анимации в этом же классе, и потом вызвать эту фцию анимации в update ф ции этого класса)

    #1535
    Dracula
    Dracula
    Участник
    Сообщений:4

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

    Репутация:1

    Спасибо!

    Прописал так:

    void control(){
    if (Keyboard::isKeyPressed(Keyboard::Left)) {
    state = left;
    speed = 0.2;
    if (state == left) {
    currentFrame += 0.005*time;
    if (currentFrame > 3) currentFrame -= 3;
    sprite.setTextureRect(IntRect(150 * int(currentFrame)+150, 0, -150, 150));
    }
    }
    if (Keyboard::isKeyPressed(Keyboard::Right)) {
    state = right;
    speed = 0.2;
    if (state == right) {
    currentFrame += 0.005*time;
    if (currentFrame > 3) currentFrame -= 3;
    sprite.setTextureRect(IntRect(150 * int(currentFrame), 0, 150, 150));
    }
    }

    Только еще в классе player пришлось объявить time и currentFrame, а так все работает. Отличные уроки у вас:)

    Еще маленький вопрос, но уже не по уроку 20. Не смог до конца очистить спрайт от белого цвета. Проверил через paint, указал нужный код и большая часть цвета пропала, но вокруг самой анимации персонажа осталась тонкая линия. Не знаю как ее убрать. Может что посоветуете?

    #1536
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:587

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

    Репутация:106

    тайм можно брать тот, который уже есть в int main (как с update(time)).  линию можно убрать в графическом редакторе, хоть в паинте. или программно. это уже вопрос для другой темы..

    #1541
    Dracula
    Dracula
    Участник
    Сообщений:4

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

    Репутация:1

    Все проблема решена. Спасибо за помощь!

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

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