Hallo.
Ich programmiere derzeit ein Programm, in dem ein Monster (TButton) einen vorgegebenen Weg durchlaufen soll. Hierbei werden Wegpunkte(TLabel) gesetzt. Das Laufen klappt auch wunderbar, jedoch macht die optische Gestaltung des Weges Probleme. Die Wegpunkte sind in einem Gitter angeordnet und bekommen nach dem Erstellen eine Weg-Textur. Außerdem wird dann die Weg-Textur zwischen zwei aufeinander folgenden Punkten gezeichnet. Das gesamte Gitter bekam vorher eine Gras-Textur.
Das Erstellen der Wegpunkte ist eigentlich kein Problem, jedoch braucht das Programm wahnsinnig lange um einen neuen Wegpunkt und den dazugehörigen Weg zu zeichnen, da z.B. vorher alle anderen Images usw. ungewollt aktualisiert werden. Die Geschwindigkeit des Programms lässt auch immer mehr nach, je nachdem wie viele Wegpunkte und damit auch Strecken erstellt und angezeigt wurden.
Ich weiß nicht ob das wirklich das Problem ist und bitte um Hilfe von erfahreneren Programmierern. Vielleicht kann sich ja mal jemand mein Programm oder Teile des Quellcodes anschauen. Danke schon mal im Voraus.
Der Fehler könnte in diesem Teil des Programms liegen:
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: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
| procedure TForm1.ErstelleWegPunkt(x,y: integer); var a : Integer; begin if i > 1 then begin if (Wegpunkt[i-1].getX = x) OR (Wegpunkt[i-1].getY = y) then begin Wegpunkt[i] := TWegpunkt.Create(x,y); Wegpunkt[i].Caption := ' ' + inttostr(i); BodenTexturZeichnen((x -20) div size + 1, (y -20) div size + 1, 'Weg'); listbox1.items.add(inttostr(i)); listbox2.Items.add(inttostr(Wegpunkt[i].getX)); listbox3.items.add(inttostr(Wegpunkt[i].getY));
if Wegpunkt[i].getX = Wegpunkt[i-1].getX then begin if Wegpunkt[i].getY > Wegpunkt[i-1].getY then begin a := Wegpunkt[i-1].getY + 1; while a < Wegpunkt[i].getY do begin BodenTexturZeichnen((Wegpunkt[i].getX - 20) div size + 1, (a- 20) div size + 1, 'Weg'); inc(a); end; end else begin if Wegpunkt[i].getY < Wegpunkt[i-1].getY then begin a := Wegpunkt[i-1].getY - 1; while a > Wegpunkt[i].getY do begin BodenTexturZeichnen((Wegpunkt[i].getX - 20) div size + 1, (a - 20) div size + 1, 'Weg'); dec(a); end; end; end; end;
if Wegpunkt[i].getY = Wegpunkt[i-1].getY then begin if Wegpunkt[i].getX > Wegpunkt[i-1].getX then begin a := Wegpunkt[i-1].getX + 1; while a < Wegpunkt[i].getX do begin BodenTexturZeichnen((a - 20) div size + 1, (Wegpunkt[i].getY - 20) div size + 1, 'Weg'); inc(a); end; end else begin if Wegpunkt[i].getX < Wegpunkt[i-1].getX then begin a := Wegpunkt[i-1].getX - 1; while a > Wegpunkt[i].getX do begin BodenTexturZeichnen((a - 20) div size + 1, (Wegpunkt[i].getY - 20) div size + 1, 'Weg'); dec(a); end; end; end; end;
inc(i); end else showmessage('Das ausgewählte Feld ist nicht waagerecht oder senkrecht vom vorherigen erreichbar! Bitte wählen Sie ein anderes.'); end else begin Wegpunkt[i] := TWegpunkt.Create(x,y); Wegpunkt[i].Caption := ' ' + inttostr(i); BodenTexturZeichnen((x -20) div size + 1, (y -20) div size + 1, 'Weg'); Monster.Left := Wegpunkt[i].getX; Monster.Top := Wegpunkt[i].getY; Monster.Visible := true;
listbox1.items.add(inttostr(i)); listbox2.Items.add(inttostr(Wegpunkt[i].getX)); listbox3.items.add(inttostr(Wegpunkt[i].getY));
listbox1.itemindex := 0; listbox2.itemindex := 0; listbox3.itemindex := 0;
inc(i); end; end; |
oder hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.BodenTexturZeichnen(X, Y : Integer; T : String); begin Hintergrund.BringToFront; BodenTextur[X, Y] := TImage.Create(Nil); BodenTextur[X, Y].Parent := Self; BodenTextur[X, Y].Width := 39; BodenTextur[X, Y].Height := 39; BodenTextur[X, Y].Picture.Create; BodenTextur[X, Y].Picture.LoadFromFile(T + '.jpg'); BodenTextur[X, Y].AutoSize := true; BodenTextur[X, Y].Top := (Y-1) * size + 11; BodenTextur[X, Y].Left := (X-1) * size + 11; BodenTextur[X, Y].Refresh; end; |
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Moderiert von
Narses: Inline- in normalen Anhang umgewandelt.