Autor Beitrag
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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 :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  TMap = record
    feld:Array [1..100,1..75of Boolean;
    grafiken: array [1..100,1..75of TSimpleObject;
    Name:String;
    FileName:String;
  end;

und so die Öffnen Methode:
ausblenden volle Höhe Delphi-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:
    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
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 158

Win Xp SP3
D6 Enterprise, Turbo Delphi Explorer
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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 :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    Engine.DoBegin;
      Karte.Render;
      //part ist nur ein einfacher Balken
      part.Draw(false);
    Engine.DoEnd;

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Fighter#1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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
ausblenden volle Höhe Delphi-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..75of 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
     //Sand Grafik Erstellen
     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
    //Erstmal wird keine Textur mitgerendert (speedUp)
     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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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