AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung??

Ein Thema von Michelle · begonnen am 23. Apr 2011 · letzter Beitrag vom 26. Apr 2011
Antwort Antwort
Michelle

Registriert seit: 18. Dez 2010
21 Beiträge
 
Delphi 7 Professional
 
#1

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 18:36
Ja, ist es. Zu dem Zeitpunkt stehen 22 verschiedene ganzzahlige Werte im MemoFeld.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.881 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 18:38
Poste mal den ganzen Quelltext
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.580 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 18:51
Füge mal begin..end ein
Delphi-Quellcode:
for i := 1 to 20 do Star[i].Create;
begin
  Star[1].PosX := ... //wie oben beschrieben

  ImgStar1.Left := Star[1].PosX
  ImgStag1.Top := Star[1].PosY;
end;
Das BEGIN natürlich noch vor das Create (und natürlich mit der richtigen Variante des Create)

Delphi-Quellcode:
for i := 1 to 20 do
begin
  Star[i] := TStar.Create;
  Star[i].PosX := ...
Ansonsten kann es nicht schaden, wenn du in den Projektoptionen mal die Überlauf- und die Bereichsprüfung aktivierst.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Zibelas

Registriert seit: 23. Apr 2011
5 Beiträge
 
#4

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 19:23
Noch ein Vorschlag zur Optimierung wo du dir später viel Arbeit sparen wirst:

Zitat:
Das andere tipp ich 20 mal ein, weil ich ja jedes einzelne Bild verschieben will und ich keinen Array of Image habe sondern nur 20 einzelne Bilder ImgStar1, ImgStar2
Nutz findcomponent
Code:
TImage(findcomponent('ImgStar'+inttostr(i))).left := Star[i].PosX;
Du kannst in einer Schleife alle Zuweisungen machen, bist nicht von der Anzahl der Sterne in einem Level abhängig (also kann ein Level auch mal mehr oder weniger Sterne haben)

Die ImgStar Bilder kannst du natürlich auch zur Laufzeit erzeugen. So bleibt dein Spiel dynamisch und ein neues Level kann über die Ladefile erstellt werden, auch wenns mehr als 20 Sterne sind.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.881 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 19:29
Oder noch besser packe diese auch in einen Array oder eine Liste oder verwende eine Imageliste
Markus Kinzler
  Mit Zitat antworten Zitat
Michelle

Registriert seit: 18. Dez 2010
21 Beiträge
 
Delphi 7 Professional
 
#6

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 19:31
Wow, super Tipp, vielen Dank! Davon habe ich noch nie gehört, aber das ist wirklich eine viel bessere Lösung!!
Denkst du, man kann aus dem Rest auch eine Schleife machen?

Code:
 
  Star[1].PosX := StrToInt(MemoLoadPos.Lines[2]);
  Star[1].PosY := StrToInt(MemoLoadPos.Lines[3]);

  Star[2].PosX := StrToInt(MemoLoadPos.Lines[4]);
  Star[2].PosY := StrToInt(MemoLoadPos.Lines[5]);

  Star[3].PosX := StrToInt(MemoLoadPos.Lines[6]);
  Star[3].PosY := StrToInt(MemoLoadPos.Lines[7]);

  ...
Star[i].PosX müsste von 1 bis 20 gehen, MemoLoadPos.Lines[i] von 2 bis 42. Geht das?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.580 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 19:39
Delphi-Quellcode:
for i := 1 to 20 do
begin
  Star[i] := TStart.Create; // man könnte sich glatt fragen, wie du den mehrfachen Hinweis mehrer Leute überlesen konntest
  Star[i].PosX := StrToInt(MemoLoadPos.Lines[i * 2]);
  Star[i].PosY := StrToInt(MemoLoadPos.Lines[i * 2 + 1]);
end;
bzw., da nur die ersten 6 befüllt werden
Delphi-Quellcode:
for i := 1 to 20 do
  Star[i] := TStart.Create;
for i := 1 to 6 do
begin
  Star[i].PosX := StrToInt(MemoLoadPos.Lines[i * 2]);
  Star[i].PosY := StrToInt(MemoLoadPos.Lines[i * 2 + 1]);
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Apr 2011 um 19:45 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Zugriffsverletzung??

  Alt 26. Apr 2011, 09:56
Wow, super Tipp, vielen Dank! Davon habe ich noch nie gehört, aber das ist wirklich eine viel bessere Lösung!!
Denkst du, man kann aus dem Rest auch eine Schleife machen?

Code:
 
  Star[1].PosX := StrToInt(MemoLoadPos.Lines[2]);
  Star[1].PosY := StrToInt(MemoLoadPos.Lines[3]);

  Star[2].PosX := StrToInt(MemoLoadPos.Lines[4]);
  Star[2].PosY := StrToInt(MemoLoadPos.Lines[5]);

  Star[3].PosX := StrToInt(MemoLoadPos.Lines[6]);
  Star[3].PosY := StrToInt(MemoLoadPos.Lines[7]);

  ...
Star[i].PosX müsste von 1 bis 20 gehen, MemoLoadPos.Lines[i] von 2 bis 42. Geht das?

In einer Schleife von i:=1 bis 20:
Delphi-Quellcode:
  Star[i].PosX := StrToInt(MemoLoadPos.Lines[2*i]);
  Star[i].PosY := StrToInt(MemoLoadPos.Lines[2*i+1]);
Ralph
  Mit Zitat antworten Zitat
Michelle

Registriert seit: 18. Dez 2010
21 Beiträge
 
Delphi 7 Professional
 
#9

AW: Zugriffsverletzung??

  Alt 23. Apr 2011, 19:11
Code:

type
  TFormLvl = class(TForm)
    {}
  end;

  TSpielfigur = class
    {}
  end;


  TStar = class
    Found     : Boolean;
    PosX, PosY : integer;
    procedure Shine;
    procedure Find;
    procedure Fly;


  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FormLvl                                 : TFormLvl;
  Spielfigur                              : TSpielfigur;
  Star                                    : Array[1..20] of TStar;
  MoveRight, MoveLeft, Fall               : Boolean;
  JumpCount, SpLeft, SpTop, SpStartX, SpStartY : integer;


implementation

{$R *.dfm}

procedure TFormLvl.StarCreate3;
var i : integer;
begin
  MemoLoadPos.Lines.LoadFromFile('..\Level\1\Pos.txt');
 
  for i := 1 to 20 do Star[i].Create;

  Star[1].PosX := StrToInt(MemoLoadPos.Lines[2]);
  Star[1].PosY := StrToInt(MemoLoadPos.Lines[3]);

  Star[2].PosX := StrToInt(FormLvl.MemoLoadPos.Lines[4]);
  Star[2].PosY := StrToInt(FormLvl.MemoLoadPos.Lines[5]);

  Star[3].PosX := StrToInt(FormLvl.MemoLoadPos.Lines[6]);
  Star[3].PosY := StrToInt(FormLvl.MemoLoadPos.Lines[7]);

  Star[4].PosX := StrToInt(FormLvl.MemoLoadPos.Lines[8]);
  Star[4].PosY := StrToInt(FormLvl.MemoLoadPos.Lines[9]);

  Star[5].PosX := StrToInt(FormLvl.MemoLoadPos.Lines[10]);
  Star[5].PosY := StrToInt(FormLvl.MemoLoadPos.Lines[11]);

  Star[6].PosX := StrToInt(FormLvl.MemoLoadPos.Lines[12]);
  Star[6].PosY := StrToInt(FormLvl.MemoLoadPos.Lines[13]);

  ImgStar1_1.Left := Star[1].PosX;
  ImgStar1_1.Top := Star[1].PosY;
end;

procedure TFormLvl.FormCreate(Sender: TObject);
begin
  DoubleBuffered := true;
  MediaPlayer1.Play;

  Spielfigur.BorderLoad;
  StarCreate3;    
 
  Spielfigur.Move; //hier wird der Fehler angezeigt

  SpLeft := SpStartX; // MLeft und MTop sind die aktuellen Koordinaten der Spielfigur,
  SpTop := SpStartY; // MStartX und MStartY sind die Startkoordinaten am Anfang des Spiels
end;

procedure TSpielfigur.Move;
begin
  if MoveRight then SpLeft := SpLeft + 10; //MoveRight und MoveLeft werden auf den Cursortasten
  if MoveLeft then SpLeft := SpLeft - 10; // true oder false gesetzt. Hat noch nie Probleme
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:11 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