![]() |
[Andorra] Sprites lassen sich nicht platzieren
Hallo zusammen,
ich habe grade ein ziemlich merkwürdiges Problem und ich bin mir fast sicher, dass der Fehler ein Dummheitsfehler auf meiner Seite ist. Ich versuche grad einen Leveleditor für ein Spiel zu schreiben. Genauergesagt für ein Breakout. Soweit kein Problem, ich speichere alle Bricks in eine Inidatei. Doch jetzt kommt das Problem. Ich kann diese Datei nicht mehr lesen. Sobald ich z.b. in jeder Ecke ein Brick platziere, dann speichere und wieder lade ist nur noch der in der rechten unteren Ecke da. Und zwar unabhängig davon ob das der letzte Stein im Level war oder nicht. Ich stell euch einfach mal den Code hoch, ich hab keine Ahnung mehr wo der Fehler liegen könnte...:(
Delphi-Quellcode:
procedure TMainForm.Load;
var Path : string; tmpStrLst : TStringList; i : Integer; begin New; //Spielfeld leeren with TOpenDialog.Create(nil) do begin Filter := 'Level|*.lvl'; if Execute then begin Path := FileName; with TIniFile.Create(Path) do begin tmpStrLst := TStringList.Create; ReadSections(tmpStrlst);//Dektionen auslesen for i := 0 to tmpStrLst.Count - 1 do begin AddBrick(ReadFloat(tmpStrLst.Strings[i], 'X', 0), ReadFloat(tmpStrLst.Strings[i], 'Y', 0), ReadInteger(tmpStrLst.Strings[i], 'Color', 0)); //Jede Sektion öffnen und den Brick hinzufügen end; tmpStrLst.Free; Free; end; end; Free; end; end;
Delphi-Quellcode:
Vielleicht kann mir ja jemand helfen... :(
procedure TMainForm.AddBrick(aX, aY: Double; aColor: Integer);
var tmp : TBrickEditor; begin tmp := TBrickEditor.Create(AdSpriteEngine); tmp.Image := AdImgLst.Find('brick'); tmp.Width := 90; tmp.Height := 20; tmp.X := aX; tmp.Y := aY; tmp.Color := aColor; tmp.Free;//Auch das Weglassen hier hilft nichts... end; |
Re: [Andorra] Sprites lassen sich nicht platzieren
Liste der Anhänge anzeigen (Anzahl: 1)
So,
also ich habe jetzt folgendes festgestellt. Wenn ich folgenden Code habe klappt es auch nicht.
Delphi-Quellcode:
Nun sollte eigentlich das ganze Feld links nach rechts und von oben nach unten mit Bricks gefüllt sein.
procedure TGameForm.Loadlevel;
var i, j : Integer; w : Integer; const AnzahlBricksProReihe = 10; BrickHeight = 18; begin Randomize; w := Round(Clientwidth / AnzahlBricksProReihe); //Breite der Bricks herrausfinden for j := 0 to 10 do //Alle Zeilen begin for i := 0 to AnzahlBricksProReihe - 1 do //Alle Spalten begin with TBrick.Create(AdSpriteEngine) do //Brick erzeugen begin Image := AdImgLst.Find('brick'); //Und Eigenschaften zuweisen Width := w; Height := BrickHeight; Y := j * Height; X := i * w; Color := clRed; end; end; end; end; Dies funktioniert aber nicht. Die erste Spalte und Zeile ist komplett leer. Näheres dazu im Screenshot. Weiß jemand was das ist? Kann man keine Objekte erzeugen, die eine Koordinate 0 hat? EDIT: Wenn ich
Delphi-Quellcode:
schreibe klappts... :?
Y := 1+j * Height;
X := 1+i * w; Geht das nicht anders? |
Re: [Andorra] Sprites lassen sich nicht platzieren
Hi.
Habs selber grad mal ausprobiert und bei mir lassen sich Sprites ohne Probleme bei (0/0) platzieren.
Delphi-Quellcode:
... funktioniert tadellos.
...
FPlayer.X := 0; FPlayer.Y := 0; ... Eventuell kommen hier:
Delphi-Quellcode:
nicht immer die Werte raus, die du gerne hättest und dann gibt's hier Probleme.
...
w := Round(Clientwidth / AnzahlBricksProReihe); //Breite der Bricks herrausfinden ...
Delphi-Quellcode:
Prüfe das mal...
...
begin Image := AdImgLst.Find('brick'); //Und Eigenschaften zuweisen Width := w; // <-- Evtl. ist hier die Breite der Bricks immer 0 ??? Height := BrickHeight; Y := j * Height; X := i * w; Color := clRed; end; ... Edit: Jepp, ich glaube das sollte es sein: ClientWidth: 699 Round: 70 Div: 69 Gruss BlackDragon |
Re: [Andorra] Sprites lassen sich nicht platzieren
Hmmm...
Nein, an dieser Breitenzuweisung kanns nicht liegen, im anderen Code wo ich die nicht habe klappts auch nicht. Ich hab eigentlich auch schon Objekte bei [0;0] platziert und hatte nie Probleme... Könnte es daran liegen, dass ich Newton mitverwende? Also das integrierte von Andorra. |
Re: [Andorra] Sprites lassen sich nicht platzieren
Nein, Newton habe ich in meinem Test von eben auch mit eingebunden.
Aber schau noch mal in meinen letzten Post -> Edit Gruss BlackDragon |
Re: [Andorra] Sprites lassen sich nicht platzieren
Also an irgendwelchen Round und Div Sachen kann es nicht liegen, in meinem "richtigen" Code also den um ein Level aus einer Datei zu lesen, hole ich mir einfach nur die Koordinaten... Die Breite stelle ich per Hand ein. Einfach nur eine Schleife die Alle Einträge in der Ini durchläuft und hinzufügen soll...
|
Re: [Andorra] Sprites lassen sich nicht platzieren
Erstmal kann man deinen code zu kürzten:
Delphi-Quellcode:
procedure TMainForm.AddBrick(aX, aY: Double; aColor: Integer);
begin with TBrickEditor.Create(AdSpriteEngine) do begin Image := AdImgLst.Find('brick'); Width := 90; Height := 20; X := aX; Y := aY; Color := aColor; end; end; Zitat:
Du veränderst gleich große Objekte von einer Größe von 90X20. Wenn du so speicherst wie es Igel in seinen Brekout Clone macht gilt folgendes: Nehmen wir an du hast eine Breite von 640 und eine Höhe von 480. 640 div 90 = 7 480 div 20 = 24 Du hast also jetzt ein zwei 2D raster welches 7X24 große ist. also haben die Objekte z.b. jetzt als Positions angaben: X:2 und Y: 2 jetzt muss du einfach nur noch X*90 und y*20 rechnen und schon hast du die genau Zeichen Position. das geht aber nur bei gleich großen Objekten wie in deinen Fall. |
Re: [Andorra] Sprites lassen sich nicht platzieren
Wie speicherst Du das ganze denn ab?
|
Re: [Andorra] Sprites lassen sich nicht platzieren
ich nehme einfach mal an irgendwie so:
Delphi-Quellcode:
So macht es aufjedenfal Igel bei seinem BreakOut Beispiel. Und drauf basiert auch meine Erklärung/Lösung für das Problem.
------------
- 1 - - 2 - - - - - - - - - ------------ |
Re: [Andorra] Sprites lassen sich nicht platzieren
Er speichert es aber in einer Inidatei und ich würde gerne wissen, wie er es speichert, vielleicht ist ja da noch ein Fehlerchen drin.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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-2025 by Thomas Breitkreuz