Главная » Статьи » Играем Blitz » BlitzMAX |
Теперь мы модифицируем исходник из второй части, заставив лого ездить по экрану и отскакивать от его краев, оставляя при этом красивейший шлейф. ОК, для начала нужно заставить лого отскакивать от краев экрана. Делается это очень просто. Сперва создаем две переменные для хранения текущего направления движения картинки по X и по Y - соответственно xmove и ymove, со значениями или +1 или -1. Для начала выставим обе равными +1. xmove=1
ymove=1 Вставь эти строки перед началом главного цикла. Теперь нам нужно ввести ещё две переменные для хранения текущих координат картинки - xpos и ypos. xpos=xpos+xmove
ypos=ypos+ymove Вставь эти строки где угодно в главный цикл. Они будут добавлять текущие значения xmove и ymove к координатам xpos и ypos, так что за каждое исполнение цикла координаты картинки будут изменятся на 1 пиксель и по X и по Y. Нам также придется изменить параметры команды DrawImage, чтобы использовать значения переменных xpos и ypos для позиционирования картинки. DrawImage logo,xpos,ypos
На данный момент у нас есть картинка (лого BlitzMax), появляющаяся в верхнем левом углу и, затем уезжающая вниз вправо за экран. Это не то что нам надо - картинка не отскакивает от экрана. Так сделаем, как нам надо: будем проверять - не больше ли координаты картинки (xpos и ypos) чем размеры экрана, а если это так, то будем обращать значения xmove и ymove, так что картинка изменит направление движения и получится эффект отскакивания. If xpos>width-(ImageWidth(logo)/2) Then xmove=-1
If xpos<0+(ImageWidth(logo)/2) Then xmove=1 Вставь этот код куда-нибудь в главный цикл. Как видишь, первая строка проверяет, не больше ли xpos, чем ширина экрана, а если так, то ставит xmove равной -1. Вторая линия проверяет не меньше ли нуля xpos, а если так,то ставит xmove равной 1. Последние две линии делают тоже самое, но только с ymove. При проверке на столкновение мы приняли во внимание ширину картинки, если этого не сделать, то мы будем видеть кусок картинки на краю экрана при отскакивании. Так как handle нашей картинки находится в центре, то мы вычитаем половину высоты/ширины при проверке на столкновением с низом / правым краем экрана и прибавляем половину ширины / высоты при сравнении с 0. Итак, теперь наше лого ездит по экрану и отскакивает от его краев. Зашибись! Осталось только одно - забабахать эффект шлейфа. Мы будем использовать блендинг (blending). Блендинг определяет как картинка будет нарисована на экране - при SOLIDBLEND, режимом по умолчанию, картинки будут рисоваться на экране полностью однотонными (такими как они есть в файле). Цвет фона (background) игнорируется. Мы будем использовать режим LIGHTBLEND. При LIGHTBLEND картинка рисуется на экране, но цвет фона (background) не игнорируется. Вместо того для каждого пикселя картинки, цвет фона (background) прибавляется к цвету пикселя картинки. Следовательно если цвет фона (background-а) черный (нулевой цвет), то нарисованная картинка будет выглядеть светлее оригинала. Наш фон черный, и на данный момент это не принесет никакого эффекта. Фрукт в том, чтобы закомментировать команду Cls и, следовательно, не очищать экран каждую итерацию (повторение) цикла. Когда же лого будет ездить по экрану, оно будет рисоваться поверх себя, и тогда, наконец, LIGHTBLEND принесет эффект. Есть ещё одна вещь, которую следует сделать. Сейчас, значения цвета пикселей лого большие, настолько большие, что когда мы будем рисовать 3-тий слой картинок мы получим монотонную картинку(такую какая была файле). Для улучшения эффекта мы сделаем картинку прозрачной, т.е. поставим прозрачность картинки равной 0.1(можно и другую), - это уменьшит значения цветов пикселей картинки и даст более красивый эффект. Так давай внесем эти изменения в код. Сначала поменяем прозрачность картинки и установим режим блендинга (blending) командами SetAlpha и SetBlend. Как и SetRotation, эти команды определяют параметры (прозрачность, режим блендинга) всех картинок, и они остаются такими пока команды не используются вновь с новыми значениями. В нашем случае, нам следует использовать эти команды только один раз, вставь следующие строки перед началом главного цикла. И, наконец, закомментируй команду Cls. 'Cls
В BlitzMax знак комментирования ' а не ;. Вот и весь код:. width=640
height=480 Если всё сделал правильно, то должно появится что-то вроде этого: | |
Просмотров: 86 | |
Всего комментариев: 0 | |