Einzelnen Beitrag anzeigen

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