Базовый курс С++ Часть #30. Выпадение буквы из кирпича

preview_player
Показать описание
Часть #30. Выпадение буквы из кирпича. (Базовый курс программирования на С++)
Самые лучшие бесплатные курсы по C++, Ассемблеру и Unreal Engine 5!

00:00 - Выпадение буквы из кирпича
00:17 - Исправляем циклы вывода и анимации активных кирпичей
02:07 - Анализируем сценарии, при которых буквы выпадают из кирпичей
03:11 - Добавляем метод On_Hit()
06:31 - Выбираем случайным образом действие при разбитии кирпича
11:10 - Создаём класс падающей буквы AFalling_Letter
14:42 - Создаём массив падающих букв Falling_Letters
16:33 - Добавляем очередную падающую букву в массив
20:57 - Выносим код в метод Add_Falling_Letter()
24:34 - Переносим метод Draw_Brick_Letter() из класса ALevel в AFalling_Letter
26:43 - Выносим в конфиг кисти и карандаши для рисования кирпичей
32:36 - Копируем методы Act(), Draw() и Is_Finished() из класса активного кирпича в класс падающей буквы
36:13 - Описываем прямоугольником Letter_Cell область падающей буквы
39:25 - Дорабатываем метод Draw() падающей буквы
44:44 - Исправляем создание падающей буквы в методе Add_Falling_Letter()
47:11 - Обнуляем массив Falling_Letters в методе Init()
47:44 - Выводим все падающие буквы
48:42 - Вызываем анимацию всех падающих букв
52:08 - Анимируем падение буквы
53:40 - Очищаем фон под падающей буквой
59:01 - Исправляем баг с остановкой падающей буквы
01:02:37 - Исправляем баг с белыми точками после мячика
01:13:35 - Анимируем вращение буквы
01:16:06 - Замедляем вращение буквы в 4 раза
01:19:03 - Смещаем начало анимации на 2 кадра вперёд
01:21:27 - Дописываем метод Is_Finished()
01:23:59 - Рисуем фоном отсутствующие кирпичи в Draw_Brick()
01:25:32 - Стираем из уровня разбитый кирпич

Рекомендации по теме
Комментарии
Автор

Наконец-то! Прошёл 30й урок. Потихоньку приходит понимание и это радует, утешаю себя что 1\3 курса позади :D Cпасибо вам Александр за этот курс <3

arseny.a
Автор

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

andrewsidokur
Автор

Спасибо за урок! Заметил, что из-за того, что обычно дольше играюсь с мячиком после внесения изменений, иногда исправляю мелкие баги раньше Александра) Прям приятно от того, что получилось самостоятельно обнаружить и исправить ошибку

labarantus
Автор

Завершил сегодня урок, ушло 3 дня. Если ответите на предыдущие комментарии, то надеюсь, что смогу вникнуть до конца в код. Спасибо за урок, файлы мерджил. Завтра едем дальше.

KonstantinPt
Автор

Здравствуйте Александр! Что лучше создать перечисление в классе и по этим перечислениям в методе открытия двери сделать оператор switch или сделать общий абстрактный класс дверей и наследовать от него разные типы дверей с переопределенным методом открытия дверей. Двери всего лишь три. Одна которая открывается слева направо, вторая от себя и на себя, третья вверх как гаражная.)

doctor_livsi_pod_phonk
Автор

Александр, нужен ваш мудрый совет.
Два вопроса:
1. В видео 49:41 в ALevel в методе Act() мы используем цикл для отрисовки падающих букв. Не понимаю следующие строчки кода:
delete Falling_letter[ i ]; удаляем область памяти? или что тут удаляется?
Falling_Letter[ i ] = 0; куда записался этот 0, если мы удалили память строчкой выше? А если мы уже удалили ячейку, может эта строчка лишняя? а может ее надо перед delete писать?
2. Чуть ранее в этом же цикле:
Falling_Letter[ i ] -> Act(); Это ситуация, в которой можно использовать ключевое слово this вместо -> Act()? Я теряюсь тут, какой Act мы вызываем? По смыслу, вроде Act из AFalling_Letter (он занимается отрисовкой), но тогда надо указать имя класса и область видимости перед именем метода... Короче потеря потерь :(

KonstantinPt
Автор

Еще вопрос про операторы new и delete.
В книгах я читал ситуации, в которых эти операторы встречаются в пределах одного метода. В нашей игре они разнесены в разных методах. Правильно ли я понимаю, что используя в качестве указателей глобальные члены класса (тут я не уверен на сколько правильно употреблять к членам одного класса понятие "глобальные"), мы можем в одном методе запрашивать новую память, а удалять ее в другом методе?

KonstantinPt
Автор

37:38 А мячит то в текстурку попал и не отразился, а в версии Александра такие отражения работают!)

volodymyrgutsu
Автор

Александр, спасибо большое за урок. Во время просмотра возник вопрос, а почему мы не можем использовать вместо нуля nullptr, тогда бы и не приходилось удалять выделенный new указатель

СтепанБоднар-уэ
Автор

Что то меня сегодня "несет" )).
Александр, поясните пожалуйста, в файле AStyle вы упоминаете параметры методов. Это те же вещи, которые в книгах называют аргументами функций?
В книгах аргументы функция принимает, а параметры, как я понимаю возвращает. Уточняю, чтоб правильно воспринимать, когда в уроке вы говорите о параметрах метода.

KonstantinPt
Автор

У меня возник вопрос: если моя конечная цель это разработчик игр на С++ и Unreal Engine, нужно ли делать свой проект, как подобную этой 2D игру ? или лучше сразу использовать современный движок и после этого курса С++ и Unreal Engine учить?

allmight
Автор

Что-то я совсем запутался с IntersectRect, как я понял изменяется только область paint_area, но в зависимости от чего и где? Мне почему-то казалось, что paint_area - это вся пользовательская область, но видимо нет.

gametap
Автор

Учитель, скажите пожалуйста, по какому принципу мы для одних классов сделали пару файлов(.срр .h), а другие классы пишем в "чужие" файлы?

KonstantinPt
Автор

Александр, а если char в enum вообще нивкакую не хочет преобразовываться, придется всеже создавать map словарь?

keyt_staff
Автор

Александр: затевает массовый рефакторинг...
Я:
🤡🔫

illusionpopper