Анимация , класс Анимации

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Анимация , класс Анимации

Помечено: 

В этой теме 12 ответов, 5 участников, последнее обновление Бек Бек 8 года/лет назад.

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Сообщения
  • #1119
    +1
    BiJey
    BiJey
    Участник
    Сообщений:6

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

    Репутация:3

    Прошу прощения за поток вопросов :)

    В 20-ом уроке Павел временно вырезает анимацию из игры, но я, пробежавшись до 26 урока, заметил, что анимацию пока что не вернули. Я решил попробовать сделать анимацию сам, но получилось очень плохо:

    Собственно, подскажите как лучше всего сделать. Я думаю, что надо делать class Animation и в конструкторе передавать время, ввести приватную переменную CurrentFrame и с помощью switch’a прослеживать состояния игрока, изменяя анимацию. Буду благодарен любой помощи.

     

    #1124
    +1
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:582

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

    Репутация:106

    Да, идея верная. Можно так сделать.

    Только в конструкторе время передается единожды при создании объекта класса Менеджер Анимации, поэтому тебе нужно время передавать не в конструкторе, а в функции.

    Делаешь класс Менеджер Анимации, в нем функции, которые меняют картинки в зависимости от состояния. Помимо этого будет функция update, которая и принимает время. Объект класса менеджер анимации создаешь в int main и передаешь его по ссылке в конструктор игрока например (или другого класса, анимацию которого хочешь сделать). А когда передашь – можешь работать внутри класса , вызывая нужную анимацию в зависимости от состояния персонажа, написав что то типа animation.setAnimation(“jump”); или animation.jump(); (это если у тебя для каждой анимации своя ф-ция в менеджере). 1й вар-т красивее.
    и в конце ф-ции update анимируемого класса вызываешь update анимации, как раз таки и передавая то самое время time. (которое приходит в ф-цию update анимируемого объекта).
    Такой урок планируется в скором будущем, пока что я код не писал. И сейчас на очереди урок про платформу, меню, стрельбу.

    #1126
    BiJey
    BiJey
    Участник
    Сообщений:6

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

    Репутация:3

    В общем не стал себе на ночь голову дурить. Сделал пока что так:

     

     

    Завтра доработаю class Animation и сюда выложу.

    #2078

    aztecError
    Участник
    Сообщений:7

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

    Репутация:0

    Видимо не доработал )

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

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

    Репутация:106

    Или интернет не оплатил)

    #2343
    +1

    alex.play
    Участник
    Сообщений:2

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

    Репутация:1

    Что бы не создавать новую тему, напишу здесь.

    По одному из сторонних уроков создал класс анимации, который загружает всю анимацию персонажа из XML-файла.

    В классе int main() прописал функцию вызова

    но не как не могу понять что нужно прописать во втором аргументе(где знак подчеркивания).  Пробовал напрямую обратится к  Player p…., но выдает ошибки. Каким образом можно реализовать эту функцию что бы работало все корректно?
    ЗЫ: код практически такой, как в 20м уроке.

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

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

    Репутация:106

    судя по коду нужно передать туда текстуру по ссылке

    #2350

    alex.play
    Участник
    Сообщений:2

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

    Репутация:1

    Насколько я понял передавать картинку не получится, а нужно именно спрайт?

    И наверно прийдется делать как во втором варианте и не много изменять класс Player под работу с текстурой, а не изображением.

    Поправьте меня, если я не прав.

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

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

    Репутация:106

    нужно передавать именно текстуру как во 2 ом вар-те. но мы можем загрузить в текстуру сам Image объект. посмотри урок вывод картинки на экран (3-й вроде) – там как раз двумя вариантами грузили картинки

    #3531
    Бек
    Бек
    Участник
    Сообщений:8

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

    Репутация:3

    Реееебятттта, ну ввывод какой? пишите правильный ответ

    #3533
    Бек
    Бек
    Участник
    Сообщений:8

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

    Репутация:3

    я остановился 14 уроке, дальше пролистал и заметил что все поменялось, хочу оставить игру квестом! КАк теперь быть, как загрузить туда карту, не преврашая игру в платформер? И там управление анимаций отсуствует! Помогите!

    #3566
    Бек
    Бек
    Участник
    Сообщений:8

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

    Репутация:3

    решил как-то! Воовшем вот так,

    в class Entity написал

    float CurrentFrame = 0;//хранит текущий кадр

    потом вот так

    Player(Image &image, String Name, Level &lev, float X, float Y, int W, int H) :Entity(image, Name, X, Y, W, H){
    playerScore = 0; state = stay; obj = lev.GetAllObjects();//инициализируем.получаем все объекты для взаимодействия персонажа с картой
    if (name == “Player1″){
    sprite.setTextureRect(IntRect(32, 0, 32, 32)); здесь дал координату для одного кадра

    ПОтом вот

    void control(){
    if (Keyboard::isKeyPressed){
    if (Keyboard::isKeyPressed(Keyboard::Left)) {
    state = left; speed = 0.1;
    CurrentFrame += 0.005 * 1, 1;
    if (CurrentFrame > 3) CurrentFrame -= 3;
    sprite.setTextureRect(IntRect(32 * int(CurrentFrame), 32, 32, 32));

    }
    if (Keyboard::isKeyPressed(Keyboard::Right)) {
    state = right; speed = 0.1;
    CurrentFrame += 0.005*1,1;
    if (CurrentFrame > 3) CurrentFrame -= 3;
    sprite.setTextureRect(IntRect(32 * int(CurrentFrame), 64, 32, 32));
    }

    if ((Keyboard::isKeyPressed(Keyboard::Up)) && (onGround)) {
    state = jump; dy = -0.5; onGround = false ;

    }

    if (Keyboard::isKeyPressed(Keyboard::Down)) {
    state = down;
    sprite.setTextureRect(IntRect(32, 0, 32, 32));
    }
    }
    }

    Все анимация работает!

     

    #3568
    +1
    Бек
    Бек
    Участник
    Сообщений:8

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

    Репутация:3
    •  

    <!–more–>

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

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