Домашнее задание 3 к уроку 25.

SFML и C++ Уроки \ Разработка игр Форумы Домашние задания Домашнее задание 3 к уроку 25.

В этой теме 3 ответа, 2 участника, последнее обновление  Alaz777 10 мес., 2 нед. назад.

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

    Alaz777
    Участник
    Сообщений:19

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

    Репутация:15

    Предлагаю своё решение задания 3 к уроку 25.

    Первым делом я удалил несколько строк, там где мы прописывали столкновение игрока с врагом. А именно:

    и

    а также

    Это всё дело удалять совсем не обязательно ( ну кроме зануления скорости врага, т.к. это противоречит заданию ), но я удалил, т.к. иногда глючило и врага телепортировало внутрь текстур или он исчезал, хотя убийство врага – закомментировано.

    Затем, в классе Entity я добавил 3 логические переменные kickL, kickR, kickUp:

    И инициализировал их в конструкторе:

    Затем, в int main (там где было прописано столкновение игрока с врагом) я написал:

    Т.е. когда враг движется на нас, например, справа и пересекается с игроком, то переменные kickR, kickUp и onGround становятся равны false и у игрока отнимается здоровье. Аналогично для случая, когда враг едет на игрока слева.

    OnGround = false здесь прописано, чтобы когда нас отталкнёт и подкинет вверх мы не могли подпрыгнуть в воздухе. Также это сделано для того, движение игрока по координате икс после толчка заканчивалось при приземлении на землю (так более красиво и реалистичнее).

    И наконец, в классе игрока внутри функции update (сразу после “switch(){}”) я прописал следующие строки:

    Если kickUp = true, то нас подбрасывает и kickUp становится равным false. Если kickR = true, то мы отлетаем со скоростью dx = 0.3 вправо, если kickL = true, то с той же скоростью отлетаем влево. И когда мы приземлимся и onGround станет равным true, то kickR и kickL станут равными false.

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

     

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

     

     

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

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

    Репутация:103

    Отлично:))) прям хоть медали впиливай на форум и давай ачивки за выполнение домашек)))

    как тебе в целом задания? я перестал придумывать их к урокам т.к их никто не делает, хотя можно было бы возобновить..

    #2813
    +1

    Alaz777
    Участник
    Сообщений:19

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

    Репутация:15

    Мне интересны задания. К тому же, решения многих из них 100% пригодится в будущем. Хотя, конечно, было бы интересно, если б и другие выкладывали свои решения, чтобы можно было сравнить свои с чьими-нибудь.

    Кстати, я решил проблему со смертью врага. Просто if(){} отвечающее за смерть игрока переносим вначало функции отвечающей в int main за переключение логических переменных kickL, kickR и kickUp. Вот так:

    Теперь, если нас толкает враг то мы его не убиваем. Ещё можно добавить, например, условие && (kickUp == false), чтобы и оно требовалось для убийства врага (это нужно для того, чтобы мы не убивали врага, если мы по каким-то причинам приземлились ему на голову просле откидывания), но я решил это не добавлять.

    Старое убийство врага нужно удалить.

    #2815

    Alaz777
    Участник
    Сообщений:19

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

    Репутация:15

    Чтобы не убивать врага падая ему на голову, после откидывания, надо прописывать доп. условия && (p.kickL == false) && (p.kickR == false), а не && (p.kickUp == false). Т.к. после подкидывания кикАп сразу становиться равным фолс. Я немного ошибся.

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

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