Четверг, 25.04.2024, 12:02
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
BlitzMax [14]
Blitz3D [9]
BlitzPlus [0]
Xna [1]
DarkBasic [0]
Общее [3]
Наш опрос
Билл Гейтс уходит в отставку, Вы рады?
1. Да :)
2. Нет :(
Всего ответов: 9
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Статьи
Главная » Статьи » BlitzMax

BlitzMax для начинающих, часть 3
В этом тьюториале мы модифицируем исходник из второй части, заставив лого (качать отсюда) ездить по экрану и отскакивать от его краев, оставляя при этом красивейший шлейф.

ОК, для начала нужно заставить лого отскакивать от краев экрана. Делается это очень просто. Сперва создаем две переменные для хранения текущего направления движения картинки по 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
If ypos>height-(ImageHeight(logo)/2) Then ymove=-1
If ypos<0+(ImageWidth(logo)/2) Then ymove=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, эти команды определяют параметры (прозрачность, режим блендинга) всех картинок, и они остаются такими пока команды не используются вновь с новыми значениями. В нашем случае, нам следует использовать эти команды только один раз, вставь следующие строки перед началом главного цикла.
SetAlpha 0.1
SetBlend LIGHTBLEND

И, наконец, закомментируй команду Cls.
'Cls

В BlitzMax знак комментирования ' а не ;. Вот и весь код:.
;blitzmaxc.bmx
width=640
height=480
depth=16
Graphics width,height,depth

AutoMidHandle True

logo=LoadImage("bmax120.png")

xmove=1
ymove=1

SetAlpha 0.1
SetBlend LIGHTBLEND

While Not KeyDown(KEY_ESCAPE)

ang=ang+1
SetRotation ang

xpos=xpos+xmove
ypos=ypos+ymove

If xpos>width-(ImageWidth(logo)/2) Then xmove=-1
If xpos<0+(ImageWidth(logo)/2) Then xmove=1
If ypos>height-(ImageHeight(logo)/2) Then ymove=-1
If ypos<0+(ImageWidth(logo)/2) Then ymove=1

DrawImage logo,xpos,ypos

Flip
'Cls

Wend

Источник: http://blitzetc.boolean.name/issue03.htm#a18

Категория: BlitzMax | Добавил: JohnK (30.03.2007) | Автор: MANIAK_dobrii
Просмотров: 1328
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright JohnK© 2024