Hallo, ich hab da nochmal ein Problem:
Ich bin im Moment dabei bei meinem Leveleditor für mein Spiel von TImage zu Andorra zu wechseln. Das eigentliche Spiel läuft schon super mit Andorra.
Nun mein Problem: Im OnCreate-Ereignis Erzeuge ich das ganze Andorra-Zeugs und anschließend meine Sprites und weise ihnen als Breite und Hoehe 48 zu und als X und Y Werte ihre Position im 2 dimensionen Array multipliziert mit 48 (Sprite[1,1] hat also die Koordinaten 48/48.
Das ganze wird aber nicht so dargestellt. Die Sprites werden vergrößert, aber immernoch schön aneinander dargestellt, als hätte man Breite, Höhe, X und Y verändert. Wenn ich mir die Koordinaten der Maus auf dem Bildschirm ausgeben lasse, sehe ich das die Sprites auf dem Bildschirm ca. 100 Pixel hoch und 125 Pixel breit sind. Lasse ich mir die Daten aber mit ShowMessage ausgeben sind sie so wie sie sollen.
Hier noch etwas Code der relevant sein müsste:
Delphi-Quellcode:
TLevelEditorSprite = class(THintergrundBild)
tag: integer;
hint: string;
end;
procedure TLevelEditor.FormCreate(Sender: TObject);
var i,h: integer;
const startgroesse = 48;
begin
Timer1.Interval := 100;
zoom := startgroesse;
Panel1.caption := '';
left := Form1.left + 20;
top := Form1.top + 20;
ListBox1.OnKeyDown := FormKeyDown;
Label1.caption := '';
Label2.caption := 'Steuerung:'+#13#10+
'Bewegen der Oberfläche: W,A,S,D'+#13#10+
'Quellcode generieren: M'+#13#10+
'Vergrössern/Verkleinern: +/-';
Label3.caption := 'Größe: '+IntToStr(startgroesse)+'*'+IntToStr(startgroesse);
Panel2.caption := '';
for i := 0 to StrToInt(Form1.objektZurueckgeben(-1)) do
ListBox1.Items.Add(Form1.objektZurueckgeben(i));
ListBox1.ItemIndex := 0;
Image1.Picture.Bitmap.LoadFromFile( programmpfad+'bilder\'+ListBox1.Items.Strings[ListBox1.ItemIndex]+'.bmp');
AdDraw := TAdDraw.Create(Panel1);
AdDraw.DllName := programmpfad+'AndorraDX93D.dll';
if AdDraw.Initialize then
begin
//Application.OnIdle := Idle; //Ich rufe das ganze in einem Timer auf
AdImageList := TAdImageList.Create(AdDraw);
Form1.AndorraBilderZuweisen(AdImageList);
AdSpriteEngine := TSpriteEngine.Create(nil);
AdSpriteEngine.Surface := AdDraw;
AdPerCounter := TAdPerformanceCounter.Create;
setLength(hb,15,10);
for i := 0 to high(hb) do
for h := 0 to high(hb[0]) do
bildErzeugen(i,h,startgroesse);
panelAnpassen;
label4.caption := 'Spalten: '+IntToStr(high(hb)+1)+' Zeilen: '+IntToStr(high(hb[0])+1);
end;
end;
procedure TLevelEditor.bildErzeugen(xNummer,yNummer,groesse:integer);
begin
hb[xNummer,yNummer] := TLevelEditorSprite.Create(AdSpriteEngine);
Form1.hbdatenZuweisen(hb[xNummer,yNummer],0,AdImageList);
with hb[xNummer,yNummer] do
begin
hint := IntToStr(xNummer)+'t'+IntToStr(yNummer);
X := xNummer * groesse;
Y := yNummer * groesse;
width := groesse;
height := groesse;
visible := true;
end;
end;
procedure TLevelEditor.panelAnpassen;
begin
Panel1.Width := Round((high(hb)+1)*zoom);
Panel1.Height := Round((high(hb[0])+1)*zoom);
end;
procedure TForm1.hbdatenZuweisen(bild:THintergrundBild;objektNummer:integer;AndorraImageList:TAdImageList);
begin
Bild.Image := AndorraImageList.Find(AnsiLowerCase(objektZurueckgeben(objektNummer)));
with Bild do
case objektNummer of
0: begin
wand := false;
AnimActive := false;
AnimLoop := false;
AnimSpeed := 0;
AnimStart := 0;
AnimStop := 0;
end;
1: begin
...
6: begin //Wand Haus
wand := true;
AnimActive := false;
AnimLoop := false;
AnimSpeed := 1;
AnimStart := 1;
AnimStop := 1;
AnimPos := 0;
end;
end;
end;
procedure TForm1.AndorraBilderZuweisen(AndorraImageList: TAdImageList);
begin
with AndorraImageList.Add('schuss') do
begin
Texture.LoadGraphicFromFile(programmpfad+'bilder\schuss.bmp',true,clWhite);
PatternWidth := 20;
PatternHeight := 20;
end;
with AndorraImageList.Add('scrollpfeile') do
...
AndorraImageList.Restore;
end;