Thema: Delphi Bricks Kollision

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Bricks Kollision

  Alt 3. Feb 2007, 20:13
Zitat von Diamondback2007:
deine idee ist schon mal ganz,aber wie du ja auch geschrieben hast liegt das eher an der kollisionsabfrage un dem zeitpunkt. die abfrage wird im OnIdle der form ausgeführt.
Und das wäre imho ein ziemlich schlechter Zeitpunkt. Besser ist es hier, wenn Du die Kollisionsabfrage dort machst, wo Du auch den Ball bewegst. Ich weiß nicht in welcher Geschwindigkeit dein Ball bewegt wird bzw. wie hoch ein Stein bei Dir ist, aber Du musst die Überprüfung natürlich auch nur dann durchführen, wenn die Reihe / Spalte gewechselt wird.
Die Frage ist halt (irgendwie immer noch unbeantwortet) wann wird der Ball bewegt, wann die Kollision abgefragt. Wie gesagt, dass sollte immer mit der gleichen Priorität geschehen. Die Performance sollte auch jeder Rechner haben. Hast Du ein festes Raster, lässt sich sehr einfach (und schnell) die Position des Balls im Raster berechnen und der Zugriff auf eine Zelle eines 2D-Arrays ist auch sehr sehr schnell möglich (alles andere als ein Flaschenhals!). Liegt daran, dass ein Array immer am Stück im Speicher liegt. Du hast hier dann einerseits den Vorteil, dass Du die Adresse jeder Zelle direkt berechnen kannst (macht Dein Programm natürlich aut.). Und da ein Array am Stück im Speicher liegt greifen hier auch Caching-Mechanismen besonders gut (da lokale Speicherbereiche immer mit geladen werden). Da kostet das Zeichnen des Balls schon deutlich mehr Leistung.
Die Größe des Rasters entscheidet beim Array über dessen Speicher Bedarf, es würden hier nur Referenzen abgespeichert werden, pro Zelle Fallen also 4 Byte an, dann nochmal für die gespeicherte Länge 4 Byte pro Array. Bei einem Raster von 200 x 200 wären dass also 1600 Byte für die Längenangaben + 160000 Byte für die gespeicherten Referenzen, also stolze 158 KByte (so viel Speicher dürfte wohl auch jeder Rechner noch frei haben).

Ich sehe hier also eigentlich keine Probleme. Ich denke mal einfach, dass der Ball nicht mit vollem CPU-Takt wandert, dass dürfte sonst etwas nervige Unterschiede zwischen den Systemen mit sich bringen und auf kaum einem Rechner noch spielbar sein. Die Zeit die zwischen zwei Bewegungen des Balls vergeht sollte mehr als locker reichen um die hier beschriebene Kollisionsabfrage durchzuführen.
  Mit Zitat antworten Zitat