Показать сообщение отдельно
Старый 03.08.2011, 00:39   #1
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Рябь на воде

Хочу сделать функцию для создания эффекта ряби на воде. Думаю смотреть надо в сторону pixmap'ов. Как вы считаете стоит ли ее создавать, или такая функция нагрузит процессор? Так же буду рад помощи в создании этой функции...

Type Effect
    Field x
%, y%, r%, t%, rnx%, rny%, timer%
    
Field myi%,myj% = 0
    Field mypm1
:TPixmap,mypm2:TPixmap
    Field myimg
:TImage
    Method Draw
()
        
mypm1=CreatePixmap(r*2,r*2,PF_RGBA88884)
        
mypm2=CreatePixmap(r*2,r*2,PF_RGBA88884)
        
mypm1=GrabPixmap(x-r,y-r,r*2,r*2)
        For 
myi=0 To r*2-1
            
For myj=0 To r*2-1
                rnx
=10-Rand(5)
                
rny=10-Rand(5)
                If 
myi+rnx>r*2-1 Then rnx=0
                
If myj+rnx>r*2-1 Then rnx=0
                
If myi+rnx<0 Then rnx=0
                
If myj+rnx<0 Then rnx=0
                
                
If myi+rny>r*2-1 Then rny=0
                
If myj+rny>r*2-1 Then rny=0
                
If myi+rny<0 Then rny=0
                
If myj+rny<0 Then rny=0
                mypm2
.WritePixel(myi,myj,mypm1.ReadPixel(myi+rnx,myj+rny))
            
Next
        Next
        DrawPixmap mypm2
x-r+5y-r+5
    EndMethod
    
Function Create(x%,y%,r%,t%)
        
Local NewEffect:Effect = New Effect
        NewEffect
.x=x
        NewEffect
.y=y
        NewEffect
.r=r
        NewEffect
.timer=MilliSecs()
        
NewEffect.t=t
        EffectList
.AddLast NewEffect
    EndFunction
    Method destroy
()
        
EffectList.remove(Self)
    
EndMethod
EndType 
Эффект конечно требует доработки, а так же начинает поддтормаживать при радиусе больше 64 пикселей...
__________________
OS: Ubuntu Linux 11.04
CPU: Intel® Core™ 2 Quad Q9000 (2.0GHz, 1066MHz, 6Mb)
RAM: DDR2 SODIMM 4096 Мб
Video: NVIDIA® GeForce® GT240M 1024 Мб

Последний раз редактировалось xmarat, 03.08.2011 в 21:08.
(Offline)
 
Ответить с цитированием