Alpha IIMedlem sedan maj 20002 579 inlägg
Håller på med en is engine lelr vad det nu heter.. Den är inte klar än och jag försöker fixa lite smoothscrolling nu.. problemet är att garfiken ritas i 2 fps, hur får jag det snabbare?
procedure TMainForm.Draw();
var
x: integer;
y: integer;
plotX: integer;
plotY: integer;
image: tbitmap;
begin
image := TBitMap.Create;
image.Transparent := true;
for y := 0 to YCOUNT do begin
for x := 0 to XCOUNT do begin
plotX := ( x*TITLEWIDTH+(y AND 1)*(TITLEWIDTH div 2) ) + worldX * TITLEWIDTH;
plotY := ( y*( TITLEHEIGHT div 2 + 1 ) ) + worldY *TITLEHEIGHT;
case map[x,y] of
clLime: image.LoadFromFile('grass.bmp');
clRed: image.LoadFromFile('lava.bmp');
clBlue: image.LoadFromFile('water.bmp');
else
image.LoadFromFile('grass.bmp');
end;
DXDraw.Surface.Canvas.Draw(plotX,plotY,image);
end;
end;
Alpha IIMedlem sedan maj 20002 579 inlägg
Precis när jag skrev inlägget kom jag på att det inte var så smart att ladda om grafiken på rutorna hela tiden och gjorde så här istället:
procedure TMainForm.Draw();
var
x: integer;
y: integer;
plotX: integer;
plotY: integer;
grass, lava, water: tbitmap;
begin
grass := TBitMap.Create;
lava := TBitMap.Create;
water := TBitMap.Create;
grass.Transparent := true;
lava.Transparent := true;
water.Transparent := true;
grass.LoadFromFile('grass.bmp');
lava.LoadFromFile('lava.bmp');
water.LoadFromFile('water.bmp');
for y := 0 to YCOUNT do begin
for x := 0 to XCOUNT do begin
plotX := ( x*TITLEWIDTH+(y AND 1)*(TITLEWIDTH div 2) ) + worldX * TITLEWIDTH;
plotY := ( y*( TITLEHEIGHT div 2 + 1 ) ) + worldY *TITLEHEIGHT;
case map[x,y] of
clLime: DXDraw.Surface.Canvas.Draw(plotX,plotY,grass);
clRed: DXDraw.Surface.Canvas.Draw(plotX,plotY,lava);
clBlue: DXDraw.Surface.Canvas.Draw(plotX,plotY,water);
else
DXDraw.Surface.Canvas.Draw(plotX,plotY,grass);
end;
end;
end;
end;
Nu ritas grafiken i 7-8 fps... men fortfarande alldeles för segt....
WiNNeMedlem sedan maj 2000195 inlägg
Varför skapar du nya grass,lava och water object varje gång draw anropas. De laddas ju nu varje gång och det gör det onödigt långsamt...
Lägg
grass := TBitMap.Create;
lava := TBitMap.Create;
water := TBitMap.Create;
grass.Transparent := true;
lava.Transparent := true;
water.Transparent := true;
grass.LoadFromFile('grass.bmp');
lava.LoadFromFile('lava.bmp');
water.LoadFromFile('water.bmp')
i nån annan procedur istället och gör
grass, lava, water: tbitmap;
i Class deklarationen för TMainForm.
borde gå lite snabbare
Alpha IIMedlem sedan maj 20002 579 inlägg
Frågan är varför jag överhuvudtaget anväbder tbitmaps som jag ritade på surface canvas.
Skapade en TPictureCollection (tror de heter så) och ritade upp bilderna direkt på surface och vips 25-30 fps.
Den allra högsta fps fick jag genom att skapa nya surfaces till titles bilderna som jag sedan ritade med blit...
Funderar lite på vad skillnaden är mellan att rita på surface och sedan använda flip() och att använda blit() och fastblit (eller om det var blt...)...
Alpha IIMedlem sedan maj 20002 579 inlägg
Det ska ju bli ett title baserat spel som kanske märks.. Jag sket i att använda "iso titles" (sneda rutor) och använder nu vanliga fyrkantiga - mycket enklare.
Problemet är ju att kanterna bli jävligt fula. På http://www.gamedev.net/reference/articles/article934.asp står det lite hur man kan göra... men jag fattar ändå inte hur jag ska göra.. Nån som kan hjälpa mig?