AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte RPGEditor - Ladeprobleme
Thema durchsuchen
Ansicht
Themen-Optionen

RPGEditor - Ladeprobleme

Ein Thema von Neutral General · begonnen am 12. Nov 2005 · letzter Beitrag vom 15. Nov 2005
 
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

RPGEditor - Ladeprobleme

  Alt 12. Nov 2005, 17:16
Hi,

Ich habe einen Editor für mein Rollenspiel programmiert. Das Laden und speichern klappt eigentlich soweit - bei kleinen Maps. Wenn die Maps etwas größer sind werden die Maps nicht richtig geladen.. Abgespeichert werden sie glaube ich richtig...

Neue Map:

Delphi-Quellcode:
procedure TEditWorld.New(Width:Integer; Height:Integer); //TEditWorld = class(TWorld)
var x,y,i : Integer;
begin
 i:= 0;
 Textures.Clear; // TTextureList = class(TObjectlist)
 World.Engine.Engine.Clear; //Engine = TDXSpriteEngine
 World.LWidth := Width;
 World.LHeight:= Height;
 if FLevel <> nil then FLevel.Free; //FLevel = TBiginifile
 DeleteFile(ExtractFilePath(Application.Exename) + 'Default.rpm');
 FLevel := TBigIniFile.Create(ExtractFilePath(Application.Exename) + 'Default.rpm');
 FLevel.WriteInteger('Count','Count',Width*Height); //Anzahl der Tiles
 for y:= 0 to Height-1 do begin
  for x:= 0 to Width-1 do begin
    inc(i);
    FLevel.WriteString('Tex' + IntToStr(i),'Tex','Wasser'); //Textur
    FLevel.WriteInteger('Tex' + IntToStr(i),'x',x); //x-
    FLevel.WriteInteger('Tex' + IntToStr(i),'y',y); //y-Wert Schreiben
  end;
 end;
 FLevel.FlushFile; //Ini speichern
 LoadFromFile(ExtractFilePath(Application.Exename)+ 'Default.rpm'); //Level laden
end;
Map laden:
Delphi-Quellcode:
procedure TWorld.LoadFromFile(Filename: String);
var i: Integer;
    Count: Integer;
    Tex: TTexture;
    xW,yW: Integer; //Breite und Länge der Welt
begin
  xW:= 0;
  yW:= 0;
  Textures.Clear;
  Engine.Engine.Clear;
  FLevel := TBigIniFile.Create(Filename);
  Count := FLevel.ReadInteger('Count','Count',0);
  for i:= 1 to Count do begin
   Tex:= TTexture.Create(Engine.Engine,ImageList.Items.Find(FLevel.ReadString('Tex' + IntToStr(i),'Tex','')));
   with Tex do begin
    x:= FLevel.ReadInteger('Tex' + IntToStr(i),'x',0) *32; // x, y Koordinaten auslesen
    y:= FLevel.ReadInteger('Tex' + IntToStr(i),'y',0) *32;
    xW:= (Round(x) div 32)+1; //Länge
    yW:= (Round(y) div 32)+1; // Breite
   end;
   Textures.Add(Tex); //Textur zur Texturliste adden
  end;
  LWidth:= xW;
  LHeight:= yW;
end;
end.
Texturen "malen" :

Delphi-Quellcode:
procedure TEditWorld.DXDrawClick(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var Sprite: TImageSprite;
    x1,y1,i: Integer;
    Tex: TTexture;
begin
  if ((x div 32) < World.LWidth) and ((y div 32) < World.LHeight) then begin // Wenn man nicht außerhalb klickt
   Sprite:= TImageSprite(World.Engine.Engine.GetSpriteAt(x,y));
   i:= GetTexNum(Sprite); // Position in der Texturenliste
   Sprite.Free;
   x1:= x;
   y1:= y;
   Tex := TTexture.Create(World.Engine.Engine,World.ImageList.Items.Find(World.Texture));
   with Tex do begin
    x:= (x1 div 32) * 32;
    y:= (y1 div 32) * 32;
    x1:= Round(x) div 32;
    y1:= Round(y) div 32;
   end;
   FLevel.WriteInteger('Tex' + IntToStr(i),'x',x1);
   FLevel.WriteInteger('Tex' + IntToStr(i),'y',y1);
   FLevel.WriteString('Tex' + IntToStr(i),'Tex',World.Texture);
   FLevel.FlushFile; //Änderungen in Ini schreiben
  end;
end;
Speichern:

Delphi-Quellcode:
procedure TForm1.Mapspeichern1Click(Sender: TObject);
var SL: TStringlist;
begin
  if SaveDialog1.Execute then begin // dürfte sich alles von selbst erklären hier
   SL:= TStringList.Create;
   SL.LoadFromFile(ExtractFilePath(Application.Exename) + 'Default.rpm');
   if pos('.rpm',SaveDialog1.Filename) > 0 then begin
   SL.SaveToFile(SaveDialog1.FileName);
   World.Filename:= SaveDialog1.FileName;
   end
   else begin
   SL.SaveToFile(SaveDialog1.FileName + '.rpm');
   World.Filename:= SaveDialog1.FileName + '.rpm';
   end;
   SL.Free;
  end;
end;
Laden:

Delphi-Quellcode:
procedure TForm1.Mapffnen1Click(Sender: TObject);
begin
  if Opendialog1.Execute then
  World.LoadFromFile(Opendialog1.Filename);
end;
Ok das war jetzt viel Code. Ich habe noch den Editor selber angehangen damit ihr den Fehler nachvollziehen könnt und nicht nur einen Haufen Quelltext habt

Ach ja: Ich hoffe das hier ist die richtige Sparte.. Oder hätte das auch in Multimedia gehört ?
Angehängte Dateien
Dateityp: rar editor_453.rar (223,7 KB, 31x aufgerufen)
Michael
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz