.| Autor | Beitrag |
|---|---|
|
000 27.11.2007, 20:53 Exorretar |
Hallo, Hauptunit: interface uses type var gegner : array[1..40] of TGegner; const formWidth = 800; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
Unit uGegner unit uGegner; interface uses type implementation procedure TGegner.move(x,y : integer); procedure TGegner.takeDamage(damage : integer); constructor TGegner.create(healthpoints,ruestung : integer); end; end. Wie dem ganzen zu entnehmen ist, soll beim drücken von Button1 (testweise) Hat jemand einen Vorschlag? -- |
|
Profil || Suche |
|
001 27.11.2007, 21:06 rawe |
gegner[1].image.parent := Form1; ? (image->Parent=Form1; funktioniert jedenfalls beim Borland C++ Builder und da kann man Pascal/Delphi-Code von den Befehlen her ~ 1:1 übernehmen) --O o Dieser Beitrag wurde am 27.11.2007 um 21:14 von rawe bearbeitet. |
|
Profil || Suche |
|
002 27.11.2007, 21:10 Exorretar |
Ich werds gleich mal versuchen , aber durch Edit : Du bist mein Held :> --Dieser Beitrag wurde am 27.11.2007 um 21:11 von Exorretar bearbeitet. |
|
Profil || Suche |
|
003 27.11.2007, 23:56 hausi |
Du hast das Parent / Owner Konzept der VCL falsch verstanden. Owner gibt an, wer für die Freigabe des Objektes zuständig ist. Wenn du Create(Form1) machst, wird beim schliessen vom Form1 auch das Bild freigegeben. Den Parent musst du allerdings immer manuell setzen, damit eine Komponente gezeichnet wird, da der Parent ja auch z.B. ein Panel sein kann. -- |
|
Profil || Suche |
|
004 28.11.2007, 23:15 Exorretar |
So, gibt ein weiteres Problem , und ich bin mit meinem Latinum am Ende, nach einer Stunde Lösungsansätze für so ein kleines Problem zu suchen frustiert massiv. Wie immer erstmal der (relevante) Code: Unit TGegner Destroy ist wie man erkennen kann dabei der Standard-Destruktor. Da durch die Bedingung in der IF Abfrage das ganze keinesfalls auf nil verweist, bringt Erklärung am Rande : ein 'TGegner' folgt einem 'TPath' bestehend aus einem Array von 'TWaypoints' und soll sich beim erreichen des letzten existierenden Wegpunktes selber zerstören. Hauptunit Das ist die einzige Prozedur ausserhalb die die Methode aufruft. Dieser Beitrag wurde am 28.11.2007 um 23:24 von Exorretar bearbeitet. |
|
Profil || Suche |
|
005 29.11.2007, 16:34 Exorretar |
Niemand eine Lösung parat? -- |
|
Profil || Suche |
|
006 29.11.2007, 16:49 hausi |
Dein Problem ist warscheinlich (lässt sich ohne den kompletten Code nicht definitiv sagen) wieder ein Verständnis und auch ein kleines Kommunikationsproblem. |
|
Profil || Suche |
|
007 29.11.2007, 16:59 Exorretar |
Ich werds mal versuchen umzusetzen, allerdings habe ich das manuelle nil-setzen auch schon versucht mit dem selben Resultat. Edit1: Freeandnil -> Selbes Resultat. Jetzt könnte ich ja noch versuchen das ganze ausserhalb der Klasseneigenen Prozedur aufzurufen ... Edit2 : Jup , so klappt es,wieder unter Verwendung von freeandnil. Dieser Beitrag wurde am 29.11.2007 um 17:15 von Exorretar bearbeitet. |
|
Profil || Suche |
|
008 29.11.2007, 17:51 hausi |
Du solltest dir mal einige OOP-Basis-Tuts durchlesen. Korrekt währe es so: |
|
Profil || Suche |
|
009 29.11.2007, 21:43 Exorretar |
Wie ich es hasse, dass man selber kleine Fehler u.U so schlecht entdeckt :/ Ein neues Problem ist aufgetaucht, allerdings dürfte diesmal lediglich ein Logikfehler vorhanden sein. First of all, wie immer , der Code, diesmal übersichtlich als img:
Hier wird das Zielsystem der Towers verwaltet. Nach X-fachen durchchecken ist mir immer noch keine Fehlerquelle aufgefallen. Edit: Durch probieren habe ich rausgefunden, dass beim ERSTEN zu tötenden gegner noch alle Towers problemlos funktionieren,danach nur noch der erste. Edit2: Ah , Problem mittlerweile gefunden. Wenn 1 Turm einen Gegner zerstört,während die anderen Türme diesen aber noch als Ziel haben, arbeiten diese nicht mehr. --Dieser Beitrag wurde am 29.11.2007 um 22:52 von Exorretar bearbeitet. |
|
Profil || Suche |
|
010 29.11.2007, 23:01 hausi |
Debuggen ist hier die wohl einzige Lösung. Wir kennen deinen Code nicht und können dir also höchstwahrscheinlich auch nicht sagen, weshalb das Problem auftritt und wodurch es verursacht wird. Übrigens: Falls du weiterhin meine gut gemeinten Hinweise zur Verbesserung deines Codes so ignorieren solltest, werde ich in Zukunft nicht mehr antworten. -- |
|
Profil || Suche |
|
011 03.12.2007, 13:14 Exorretar |
@ Hausi: Ich ignoriere deine Vorschläge doch nicht, ich versuche sie doch mit einzuarbeiten. Kurze Frage: In C++ gibt es eine Funktion, um die Millisekunden die seit Programmstart vergangen sind, aufzurufen. Genau so etwas bräuchte ich nun für Delphi, um das Timing hinzubekommen. Die TTimer sind in der Hinsicht sehr unzuverlässig, da bspl. ein Timer mit dem Intervall 1 (1ms) nicht in jeder Millisekunde ausgelöst wird. GetTime liefert nur die komplette Systemzeit, was nicht mal so ein Problem wäre, wenn er nicht nur Sekunden anstatt auch Millisekunden liefern würde. Edit: Ich versuche es mal mit MilliSecondsBetween. --Dieser Beitrag wurde am 03.12.2007 um 13:15 von Exorretar bearbeitet. |
|
Profil || Suche |
|
012 03.12.2007, 14:38 KhanRKerensky |
Unter Delphi müsste es eigentlich auch GetTickCount geben. Damit kann man eigentlich auch Zeiten messen. Damit hat man eine Auflösung in die Millisekunden, was allerdings nicht heißt, das das Teil auch auf Millisekunden genau ist. Ich mein das man dort alle 15ms einen neuen Wert bekommen kann. Wenns genauer sein soll, dann google mal nach QueryPerformanceCounter. Lässt sich nicht ganz so einfach benutzen ist dafür genauer als du es brauchen wirst. --"[...] you're going to burn in a very special level of Hell. A level they reserve for child molesters and people who talk at the theater." - Book |
|
Profil || Suche |


