|
11.03.2007, 09:53
|
#1
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Перевод туториала по Блиц Максу
...В плане Переводов.
Перевел Туториал по Блитз Максу.
Пройдя этот туториал, вы сможете сделать это:
Для начала вам нужны две вещи
1) Лицензионная копия BlitzMax
2) Графический редактор сохраняющий в .png
Отлично, но перед тем как будем программировать мы должны нарисовать красивую искру. Откройте графический редактор и нарисуйте искру размером 16x16 (Лично я сделал белую линию на черном фоне, рисуйте что хотите, но я рекомендую края затемнить серым цветом.)
Когда закончите, сохраните как "spark.png" и положите в папку с будущим .bmx файлом.
Теперь мы готовы писать код, Секция Инициализации:
Strict
Graphics 800,600
Global SparkList:TList = CreateList()
AutoMidHandle(True)
Global iSpark:TImage = LoadImage ("spark.png",MIPMAPPEDIMAGE|FILTEREDIMAGE)
SetBlend LIGHTBLEND
Надеюсь, это было не сложно. Так как мы работаем в BlitzMax, мы можем добавить элементы ООП.
Для начала создадим Тип, Я назвал его TSpark потому, что буква Т в начале имени Типа полезная практика.
Type TSpark
Field x#,y#,r,g,b,xv#,yv#,scale#,life
End Type
X и Y будут характеризовать позицию частиц, а r,g,b – цвет, который вы сможете изменить по желанию. С помощью Scale, вы сможете масштабировать каждую частицу соответственно. Параметр Life будет отвечать за время жизни частиц.
Сначала мы напишем главный цикл, что бы составить представление, о том, что будет делать Тип, а после, напишем сам Тип. Я считаю, что для вас будет проще понять предназначение Типа до его написания.
Repeat
'Function Create(x,y,xv,yv,scale,life)
Cls
'Когда вы будете удерживать левую кнопку мыши, появиться источник частиц
'Который будет создавать частицы в месте, где находиться курсор
If MouseDown(1)
'yv - это скорость по оси OY,равная единице
'так что y будет меняться на единицу каждый раз
Local yv# = 1
'lx - локальная переменная, являющаяся
'вектором скорости по оси OX для частиц
'Благодаря ей, вы сможете увидеть движение частиц
For Local lx# = 0.1 To 1 Step .1
'Для опрятности, сделаем скорость по оси OY – случайной.
yv#:-RndFloat()
'Итак, lx# лежит в диапазоне от 0.1 до 1.Далее создаем две частицы.
' –lx# в последнем случае для того, что бы вторая частица была
'зеркальным отражением первой
TSpark.Create (MouseX(),MouseY()-5,lx#,yv#,.2,660)
TSpark.Create (MouseX(),MouseY()-5,-lx#,yv#,.2,660)
Next
End If
TSpark.UpdateAll
Flip
Until KeyHit(KEY_ESCAPE)
Надеюсь комментариев в коде достаточно для вашего понимания, если нет, то просто спросите на форуме.
Теперь разберемся с Типом. Из кода выше, вы могли увидеть, что у типа используются две функции: Create() и UpdateAll().
Давайте вернемся к объявлению типа и напишем эти функции:
Type TSpark
Field x#,y#,r,g,b,xv#,yv#,scale#,life
Function Create(x,y,xv#,yv#,scale#,life)
Local Spark:TSpark = New TSpark
Spark.x = x
Spark.y = y
Spark.xv# = xv#
Spark.yv# = yv#
spark.r = 255
spark.g = 255
spark.b = 255
spark.scale# = scale#
spark.life = life
SparkList.AddLast(Spark)
End Function
Method Destroy()
SparkList.Remove(Self)
End Method
Function UpdateAll()
For Local Spark:TSpark = EachIn SparkList
spark.yv#:+RndFloat()
Spark.x#:+Spark.xv#
Spark.y#:+Spark.yv#
spark.r:-1
spark.b:-2
spark.g:-1
SetColor spark.r,spark.g,spark.b
SetScale spark.scale,spark.scale
DrawImage (iSpark,spark.x,spark.y)
SetColor 255,255,255
SetScale 1,1
spark.life:-1
If spark.life < 1 Then spark.Destroy()
Next
End Function
End Type
Из кода выше, вы можете видеть, что функция UpdateAll() увеличивает скорость по оси OY на случайное дробное число, в то время как скорость по оси ОX стабильно увеличивается на заданное число. Значение Красного и Зеленого компонентов цвета снижается на единицу, а значение Синего на два. Из-за этого, чем ближе частица к смерти, тем больше она насыщенна желтым цветом. Частица исчезнет, когда параметр life будет меньше единицы. А параметр Scale остается неизменным.
Всё!
Автор: Matt McFarland.
Перевод by JohnK.
Примечания переводчика:
- В момент создания изображения искры, советую вам создать форму Круга.
- Если вы учли первое примечание, то вы можете увеличить Scale параметр.
Если кому интересно, то вот мой Spark.png:
PS Статья была Создана при помощи Матвея Меркулова
|
(Offline)
|
|
11.03.2007, 13:17
|
#2
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Re: Мой дебют...
Очень рад, что мой труд не пропал зря! Дебют Удался! Буду продолжать!
|
(Offline)
|
|
11.03.2007, 15:01
|
#3
|
Гигант индустрии
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений (для 92 пользователей)
|
Re: Мой дебют...
пасиб
|
(Offline)
|
|
11.03.2007, 17:47
|
#5
|
ПроЭктировщик
Регистрация: 10.08.2006
Сообщений: 95
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Мой дебют...
Спасибо, хороший тутор!
Пиши еще!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Дебют |
Nord |
Личное творчество |
14 |
21.10.2008 03:10 |
Часовой пояс GMT +4, время: 09:46.
|