| Autor |
Beitrag |
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Di 24.06.08 18:58
Hallo,
ich habe einen zweidimensionalen Array of TSimpleObject mit festgelegter Feldanzahl.
Es geht dabei quasi um eine Map für ein kleines Game, welche nur aus Schwarzen und Weißen Feldern besteht
Somit stehn in der Map Datei (als Textdatei auch nur 0 und 1 =) )
Ich lade mit dieser Methode die Karte aus der Datei in meine Karte. Sieht dann so aus:
So der Record in dem die Map is :
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| TMap = record feld:Array [1..100,1..75] of Boolean; grafiken: array [1..100,1..75] of TSimpleObject; Name:String; FileName:String; end; |
und so die Öffnen Methode:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| function TMapHandler.LoadMap(Filename:String;var Engine:TEngine) : TMap; var Back:TMap; Datei:TSTringList; i:Integer; x:Integer; begin Back.FileName:=filename; Datei:=TStringliSt.Create; Datei.LoadFromFile(filename); i:=0; Back.Name:=Datei[i]; for i := 1 to 75 do begin For x:= 1 to 100 do begin Back.grafiken[x,i]:=TSimpleObject.Create(Engine); Back.grafiken[x,i].Size.X:=10.24; Back.Grafiken[x,i].Size.y:=10.24; Back.Grafiken[x,i].Position.X:=x*10.24; Back.Grafiken[x,i].Position.Y:=i*10.24;
if Datei[i][x] = '0' Then begin Back.grafiken[x,i].Color:=clWhite; Back.feld[x,i]:=false end else begin Back.grafiken[x,i].Color:=clWhite; Back.Feld[x,i]:=true; end; end; end; ShowMessage(Back.Name);
result:=Back; end; |
So die Methode an sich funktioniert.
ICh habe eine weitere funktion, die das ganze über den Feld Array (of Boolean) auf einem Canvas ausgibt. Das funktioniert Prima!
Nur eben, wenn ich das ganze über Fear2D Rendern möchte tuts nit!
Meine Render / Ausgabe Methode
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TMapHandler.Render; var x,y : Integer; begin For y:=1 to 75 do begin For x:=1 to 100 do begin Karte.grafiken[x,y].Draw(True); end; end; end; |
Er gibt mir eine Acces Violation zur Runtime und Borland schickt mich in die F2D_Objects in die TBasicObject.SetMatrix Procedure (Zeile 270) ...
Was könnte das heißen?
Woran kann das liegen?
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Zuletzt bearbeitet von Fighter#1 am Do 26.06.08 16:20, insgesamt 1-mal bearbeitet
|
|
Clemens L.
      
Beiträge: 158
Win Xp SP3
D6 Enterprise, Turbo Delphi Explorer
|
Verfasst: Di 24.06.08 21:06
Ich glaube nicht, dass es daran liegt, aber normal muss um die Draw's ein Engine.DoBegin und Engine.DoEnd stehen!
|
|
Fighter#1 
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Di 24.06.08 21:10
Ahso ... aufgerufen wird die Methode natürlich zwischen dem Engine.DoBegin und Engine.DoEnd
Andere Objekte zeigt das Programm auch Problemlos an, nur diese KLasse will einfach nicht  ^^
Das is der momentane Aufruf der TMapEngine Klasse im Hauptprogramm :
Delphi-Quelltext 1: 2: 3: 4: 5:
| Engine.DoBegin; Karte.Render; part.Draw(false); Engine.DoEnd; |
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
Fighter#1 
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Do 26.06.08 20:51
Also, ich könnt grad echt Hilfe gebrauchen;)
ich hab mir eine neue "Test" Klasse geschrieben  ... die sollte eigentlich wirklich nunmal tun!!
Ich versteh nicht warum sie nicht will!! Es is mir unbegreiflich...
Hier der QuellText
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67:
| unit MapH;
INTERFACE
USES Windows,Classes, F2D_Core, F2D_Objects; TYPE TMapH = class private ABild: TSimpleObject; feld:Array [1..100,1..75] of Boolean; public Name:String; procedure LoadMap(Filename:String;var Engine:TEngine) ; constructor Create(var Engine:TEngine); destructor Free; procedure Render; end; implementation
procedure TMapH.LoadMap(Filename:String;var Engine:TEngine); var Datei:TSTringList; i:Integer; x:Integer; begin Datei:=TStringliSt.Create; Datei.LoadFromFile(filename); Name:=Datei[0]; for i := 1 to 75 do begin For x:= 1 to 100 do begin if Datei[i][x] = '0' Then feld[x,i]:=false else feld[x,i]:=true; end; end; end;
constructor TMapH.Create(var Engine:TEngine); begin ABild := TSimpleObject.Create(Engine); with ABild do begin texture:='black'; Position.X:=0; Position.y:=0; Size.X:=10.24; Size.y:=10.24; Color:=RGB(255,255,255); Z:=1; end; end; destructor TMapH.Free; begin ABild.Free; end; procedure TMapH.Render; begin ABild.Draw(false); end;
end. |
Ich krieg beim Aufruf von Render die selbe Acess Violation wie bei der alten KLasse, obwohl nur ein "einfaches"
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
Fighter#1 
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Do 26.06.08 21:19
Bitte bitte bitte bitte haut mich mal ganz stark!!
Ich hab die Map Klasse erstellt, bevor ich die Engine Instanziiert hab^^ =D
Omg... ok, bitter!
sorry für die Unnötige Speicherplatz belegung;)
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
|