Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > BlitzMax > FAQ и уроки

Ответ
 
Опции темы
Старый 11.03.2007, 06:53   #1
johnk
Легенда
 
Регистрация: 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, 10:17   #2
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: Мой дебют...

Очень рад, что мой труд не пропал зря! Дебют Удался! Буду продолжать!
(Offline)
 
Ответить с цитированием
Старый 11.03.2007, 12:01   #3
Raiter
Гигант индустрии
 
Регистрация: 03.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Мой дебют...

пасиб
(Offline)
 
Ответить с цитированием
Старый 11.03.2007, 12:03   #4
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
2Raiter:
Это еще начало!


Жду отзывов! Жду критики! Жду Вопросы!
Не стесняемся...высказываемся!

Если кто-то не понял этот туториал, то есть смысл посмотреть здесь http://blitzetc.boolean.name/add/wave.htm или задать вопрос здесь http://www.boolean.name/showthread.php?t=3058. Да и вообще посмотрите здесь http://blitzetc.boolean.name, Ибо много интересного имеется.
(Offline)
 
Ответить с цитированием
Старый 11.03.2007, 14:47   #5
Ins!de
ПроЭктировщик
 
Регистрация: 10.08.2006
Сообщений: 95
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Мой дебют...

Спасибо, хороший тутор!
Пиши еще!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дебют Nord Личное творчество 14 20.10.2008 23:10


Часовой пояс GMT +1, время: 18:47.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com