|
//小弟在别处看到一篇关于即时水波的算法文章,是C++的,小弟把它改写成了Delphi的,但在编译运行时,出现了水波不仅无衰减,而且还越来越大!在这里请教各位大虾!还望指教!
[源代码如下]
Type
TPool = array [0..319] of array [0..239] of byte; //320*240的水池矩阵
Var
wx1,wx2,wxt: TPool;
bg: TBitmap;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
begin
bg:=TBitmap.Create; //背景缓冲
bg.Height:=238;
bg.Width:=318;
for i:=0 to 319 do
for j:=0 to 239 do begin
wx1[i][j]:=0;
wx2[i][j]:=0;
end;
timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i,j:integer;
begin
for i:=1 to 318 do
for j:=1 to 238 do begin
wx2[i][j]:=((wx1[i-1][j]+wx1[i+1][j]+wx1[i][j-1]+wx1[i][j+1]) shr 1)-wx2[i][j];
wx2[i][j]:=wx2[i][j]-(wx2[i][j] shr 5);
bg.Canvas.Pixels[i,j]:=rgb(0,wx2[i][j],wx2[i][j]);
end;
wxt:=wx1;
wx1:=wx2;
wx2:=wxt;
form1.Canvas.CopyRect(rect(0,0,318,228),bg.Canvas,bg.Canvas.ClipRect);
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<318) and (y<238) then wx1[x][y]:=64;
end;
[源代码如上]
//还望各位指点一二!
/maxhoov[em10] |
|