Пятница, 19.04.2024, 07:21
Приветствую Вас Гость
Главная | Реализация Молнии - Форум | Регистрация | Вход
Меню сайта
Наш опрос
Слушаете ли вы музыку?
1. Да
2. Иногда
3. Нет
Всего ответов: 25
Форма входа
Друзья сайта
Статистика
Форум
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 1 из 1
  • 1
Форум » Программирование » BlitzMax » Реализация Молнии
Реализация Молнии
JohnKDate: Среда, 28.03.2007, 20:02 | Message # 1
EA FAN
Группа: Администраторы
Сообщений: 408
Статус: Offline
Вот достаточно красивый пример создания молнии, автор Zang
Code
SuperStrict

Framework brl.GLmax2d
Import brl.Random
Import brl.bmploader

Graphics 1024, 768, 32, 75
SeedRnd MilliSecs()

Const GenQ : Float = 1.05

Global LightingList : TList = New TList
Global LImage : TImage = CreateImage(9, 1, 1, MipMappedImage | FilteredImage | dynamicimage)

Local p : TPixmap = LockImage(LImage)
RestoreData IData
Local Color : Int
For Local index : Int = 0 To 8
      ReadData Color  
      WritePixel p, index,0, color
Next
UnlockImage LImage

SetImageHandle LImage, 5, 0

HideMouse

Repeat
      If KeyHit(Key_Space) Or Rand(0,1000) < 7 Then
            NewLighting()
      EndIf
      SetAlpha 1
      SetColor 255,255,255
      UpdateLighting(5)
      SetBlend AlphaBlend
      SetAlpha 0.075
      SetColor 0,0,0
      SetRotation 0
      SetScale 1,1
      DrawRect 0,0,1024,768
      Flip
      GCCollect()
Until KeyHit(key_escape)

End

Type TLightingElement
      Field Width : Float
      Field Length : Float
      Field x : Float
      Field y : Float
      Field tx : Float
      Field ty : Float
      Field angle : Float
      Field Updateable : Byte = True
      Method Update()
            If self.Updateable Then
                  self.updateable = False
                  If self.y < 768 Then
                        For Local index : Int = 0 To Floor(Rnd(0, GenQ))
                    Local e : TLightingElement = New TLightingElement
                    e.x = self.tx
                    e.y = self.ty
                    e.width = self.width*0.98
                    e.tx = self.tx+Rnd(-25, 25)
                    e.ty = self.ty + Rnd(15, 35)
                    e.angle = ATan2(e.x-e.tx, e.ty-e.y)
                    e.length = Sqr((e.x-e.tx)*(e.x-e.tx)+(e.ty-e.y)*(e.ty-e.y))
                    LightingList.AddLast(e)
                        Next
                  Else
                        LightingList.clear()
                  EndIf
            EndIf
      End Method
      Method Draw()
            SetRotation self.angle
            SetScale self.width*0.1, self.length
            DrawImage limage, self.x, self.y
      End Method
End Type

Function NewLighting()
      Local e : TLightingElement = New TLightingElement
      e.x = 512+Rnd(-100, 100)
      e.y = 0
      e.width = Rnd(3, 7)
      e.tx = Rnd(-25, 25)+e.x
      e.ty = Rnd(15, 35)
      e.angle = ATan2(e.x-e.tx, e.ty-e.y)
      e.length = Sqr((e.x-e.tx)*(e.x-e.tx)+(e.ty-e.y)*(e.ty-e.y))
      LightingList.AddLast(e)
End Function

Function UpdateLighting(steps : Int)
      For Local s : Int = 1 To steps
            Local c : Int = CountList(LightingList)
            Local d : Int = 0
            For Local e : TLightingElement = EachIn LightingList
                  d :+1
                  If d <= c Then
                        e.Update()
                        If s = steps Then e.Draw()
                  EndIf
            Next
      Next
End Function

#IData

DefData $FF000060
DefData $FF0000DA
DefData $FF2A2AFF
DefData $FFB3B3FF
DefData $FFFFFFFF
DefData $FFB3B3FF
DefData $FF2A2AFF
DefData $FF0000DA
DefData $FF000060




 
TadeusDate: Вторник, 03.04.2007, 21:50 | Message # 2
Аццкий Магичег
Группа: Пользователи
Сообщений: 169
Статус: Offline
А можно ехе-шником? Хачю полюбоватся smile
 
JohnKDate: Среда, 04.04.2007, 15:18 | Message # 3
EA FAN
Группа: Администраторы
Сообщений: 408
Статус: Offline
Quote
А можно ехе-шником?
Кончено! Ехе в аттаче.
Прикреплено: 46649152.exe (118.0 Kb)



 
TadeusDate: Среда, 04.04.2007, 15:42 | Message # 4
Аццкий Магичег
Группа: Пользователи
Сообщений: 169
Статус: Offline
Красиво ok

Надо будет се под блиц3д переделать smile

Сообщение отредактировал JohnK - Среда, 04.04.2007, 15:45
 
JohnKDate: Пятница, 06.04.2007, 03:25 | Message # 5
EA FAN
Группа: Администраторы
Сообщений: 408
Статус: Offline
Желаю удачи! smile


 
StaticDate: Среда, 01.08.2007, 17:31 | Message # 6
Рядовой
Группа: Пользователи
Сообщений: 14
Статус: Offline
Красиво!

Жив тот, кто не дышит
 
Ize_g0reDate: Четверг, 02.08.2007, 22:14 | Message # 7
Рядовой
Группа: Пользователи
Сообщений: 24
Статус: Offline
Предупреждаю сразу - код не смотрел, не запускал, и вообще [:
Есть идея: сделать пре-генерацию молний. Делаем 2-3 имиджа по 10-15 кадров, и в процессе загрузки рисуем на кадрах молнии. С глоу-эффектом, ответвлениями, можно даже с фрактальными алгоритмами - не суть. Мне кажется, пре-генерированные молнии будут красивее (ибо с глоу всегда красиво), ну и немного быстрее. Минус - увеличение времени загрузки.


Ize'g0re's game lab
Return=CurrentPhase(Ize'g0re)
Read Returned. . .
/Work in Progress
 
JohnKDate: Пятница, 03.08.2007, 06:19 | Message # 8
EA FAN
Группа: Администраторы
Сообщений: 408
Статус: Offline
Так в примере же тоже глоу есть smile


 
Форум » Программирование » BlitzMax » Реализация Молнии
  • Страница 1 из 1
  • 1
Поиск:
Copyright JohnK© 2024