Einzelnen Beitrag anzeigen

fui-tak

Registriert seit: 24. Okt 2008
117 Beiträge
 
Turbo Delphi für Win32
 
#949

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]

  Alt 22. Aug 2009, 15:53
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;
  Mit Zitat antworten Zitat