На этом уроке мы сделаем анимацию раскладывания всех плашек домино на столе. Для этого напишем метод RollDomino(), а ещё нам потребуется отлавливать момент, когда все доминошки уже выложены на стол. Для этого мы добавим поле string mode, чтобы в таймере отловить этот момент.
Дата отправки отчёта:
17 июня 2015 г.
Задание выполнено: за
5 час. 00 мин.
Чему научился:
Разным методам анимации, перепробовал кучу всяких вариантов
Что было сложным:
В моем случае не вся анимация хорошо выглядит, я все реализовывал так чтоб по минимуму перерисовывать графику, из-за этого постоянные затирки других спрайтов или остаются атрибуты от недотертых спрайтов. Со всем этим разобраться ушло много и времени, и мозгов.
Комментарии:
Бурум-бурум. Ну не знаю, что тут писать в КАЖДОМ уроке!))))
Руслан, Бурум-бурум это прикольно как не крути! Может напишешь свое впечатление об уроке, хотя ты же умны, я уверена ты придумаешь, что хочешь сказать хорошего Евгению! :)
Ну только обижаться не надо( Писать в каждом отчете: урок Гуд, мне нравится, все замечательно и т.д. Мне кажется я это уже столько раз написал... Ну не копипастить же мне эти фразы в разных вариантах просто для приличия. А так веселее и разнообразнее. ЕВ я восторгаюсь, мне до него далеко, до его опыта, до его скорости в уме все выстроить в рабочую версию. Да, у него чувствуется долгий опыт паскаля, но это не мешает ему писать работающий код, а если код работает, то он замечательный. В моем случае, я усугубляю с кодом, потому, что когда меня учили программировать, то учили делать ставку на командную разработку, а соответственно модульность и масштабируемость. И опять таки в моём случае это увеличивает время разработки. Большинству учеников ЕВ это не нужно, учатся либо для начала (для азов), либо программировать для себя. А я учусь программировать для того, чтобы собрать команду, либо самому войти в работающую группу и заниматься не соло проектами. Поэтому и ставлю для себя соответствующие задачи, а не для того чтоб "выделиться" (перевёл на русский :)). И своими реализациями делюсь с вами не для похвалы, а в помощь вам, как альтернативный вариант реализации. Вот кому из вас захотелось реализовать игры ЕВ по своей логике, либо оптимизировать какие-то методы? Все только копипастят, а это далеко не программирование. ЕВ даёт замечательную базу как это МОЖЕТ выглядеть, а не как ДОЛЖНО.
Начинаем практику по языку C#
Чтобы стать хорошим программистом — нужно писать программы.
На нашем сайте очень много практических упражнений.
После заполнения формы ты будешь подписан на рассылку
«C# Вебинары и Видеоуроки»,
у тебя появится доступ к видеоурокам и консольным задачам.
Несколько раз в неделю тебе будут приходить письма —
приглашения на вебинары, информация об акциях и скидках,
полезная информация по C#.
Научился: Так как работа анимации привязана к таймеру и не зависит от основного потока управления программы, то научился определять момент завершения анимации, с помощью проверки статуса stopped. Трудности: Придумать свой вариант анимации, в моем случае четные строки появляются слева, нечетные справа. В начале урока был разговор об альтернативных вариантах дизайна классов анимаций. На мой взгляд, анимация это некий процесс, действие, которое не привязано к домино. Текущий дизайн не позволяет мне использовать эту иерархию классов для того же самого Аполлона, так как в базовом классе Animate мы явно указали зависимость от SpriteDomino.
В качестве возможного решения, можно разделить данные от алгоритмов. Данные - это спрайты. Алгоритмы - это анимации. Данные реализовать в виде иерархии классов Sprite. В классе Sprite добавить поле Animate, которое будет означать текущую анимацию, которую можно потом гибко менять по ситуации.
struct Point {
int x;
int y;
}
interface Animate {
void play();
Point position();
}
class AnimateStatic : Animate{}
class AnimateMove : Animate{}
class AnimateTurn : Animate{}
class Sprite {
Animate animation;
int x, y;
public void set_animation(Animate a)
{
animation = a;
}
public virtual void Draw()
{
animation.play();
Point location = animation.position();
x = location.x;
y = location.y;
}
}
class SpriteDomino : Sprite {}
class SpriteFlower : Sprite {}
void test()
{
Sprite domino = new SpriteDomino();
domino.set_animation(new AnimateMove());
domino.Draw();
domino.set_animation(new AnimateTurn());
domino.Draw();
Sprite flower = new SpriteFlower();
flower.set_animation(new AnimateMove());
flower.Draw();
}