Показать сообщение отдельно
Старый 27.01.2010, 19:01   #6
Flash
Нуждающийся
 
Регистрация: 26.04.2006
Сообщений: 66
Написано 8 полезных сообщений
(для 21 пользователей)
Ответ: Реализация эффекта линз

Вот функция для бликов, но она отжирает фпс при нахождении в кадре 2 и более бликов ровно в 2 раза, вот это действительно проблема
Global  flar.flare
 
 Type Flare
  Field lightsphere 
  Field lightsp
  Field visible
  Field timefade
  
End Type
 
 Function CreateNewFlare.Flare(x#,y#,z#,sx#,sy# ) 
 
 
flar.Flare=New Flare
  flar\lightsphere = CreateSphere() 
  EntityAlpha flar\lightsphere, 0
  PositionEntity flar\lightsphere,x,y,z
  EntityPickMode flar\lightsphere, 2
  flar\lightsp=LoadSprite( ".\Data\effects\misc_flare.png",8,flar\lightsphere )
  ;HandleSprite f\lightsp,0,-1
  ScaleSprite flar\lightsp,sx#*10,sy#*10
  PositionEntity flar\lightsp, 0,0,0
  SpriteViewMode flar\lightsp,3
  EntityColor flar\lightsp,100,100,100
  ;EntityShininess f\lightsp, 1 
  EntityOrder flar\lightsp, -1
  HandleSprite flar\lightsp, 0, 0
  flar\visible = False
  Return flar
End Function

 Function UpdateFlares()
  For flar.Flare=Each Flare
    If EntityVisible(CameraBody, flar\lightsphere) And (Not flar\visible)
       flar\visible = True
       EntityColor flar\lightsp,150,150,150
       distan = EntityDistance(CameraBody,flar\lightsphere) 
       scale = distan/2
       ScaleSprite flar\lightsp, scale, scale
       ShowEntity flar\lightsphere 
       RotateSprite flar\lightsp, EntityYaw(camerabody)*2
    Else
       If flar\visible
flar\visible = False
       ; If Rnd(500)<100 Then  HideEntity flar\lightsphere 
          flar\timefade = 100
       Else
          If flar\timefade >= 0
             flar\timefade = flar\timefade - 10
             EntityColor flar\lightsp,flar\timefade,flar\timefade,flar\timefade 
             
          EndIf         
       EndIf 
    EndIf
  Next
End Function
(Offline)
 
Ответить с цитированием