![]() |
Probleme mit großerer Abfrage
Hi Leute! Weiß irgendwer wie ich die Werte in einfach in eine If bedingung od. mehrfachauswahl packen kann!
ich hab hundert var ballsprite:TSprite;, ballsprite1:TSprite; definiert das Problem ist nur das ich bei jedem den Wert ballsprite.x und ballsprite.y abfragen muss! Nur jetzt das mit einer if bedingung ist schon ziemlich lang! Bsp: if (ballsprite.x=10) and (ballsprite.y<=500) or (ballsprite1.x=10) and (ballsprite1.y<=500) then begin end; Als nächstes muss ich noch ballsprite.m abfragen! Nach meiner Meinung ist das ziemlich blöd so, weil das Problem ist das das Programm ziemlich lange brauchen wird bis es diese bedingungen abarbeitet! Vielleicht weiß irgendwer eine Möglichkeit wie man die Werte einfacher abzufragt! Danke im Voraus! LG godman |
Re: Probleme mit großerer Abfrage
Du hast anscheinend ein Klasse TSprite. Falls es sich um einen Record handelt, könnte es sich lohnen, den Record in eine Klasse umzuwandeln.
Die Sprite-Klasse braucht bestimmte Grundfunktionen:
Delphi-Quellcode:
Mit diesen Funktionen vereinfachen sich deine If-Abfragen schon erheblich.
function TSprite.IsInsideRect(r:TRect):boolean; // Sprite befindet sich komplett innerhalb des Rechtecks
function TSprite.CollidesWithRect(r:TRect):Boolean; // Sprite überdeckt Rechteck teilweise oder vollständig function TSprite.CollidesWithSprite(s:TSprite):Boolean; // Kollision mit anderem Sprite procedure TSprite.MoveSprite; // bewege Sprite Du hast anscheinend 100te globale Variablen. Das ist eine schlechte Taktik. Gleichartige Objekte/Datentypen werden in einem Array oder einer Liste gespeichert. Damit reduzieren sich hunderte von Abfrage auf eine Schleife innerhalb der du die Abfrage platzierst. |
Re: Probleme mit großerer Abfrage
Ich habe nur 100 Variablen benutzt ob jedes Objekt in dieser Engine anders beeinflussen zu können! Leider hat das natürlich seine Nachteile!
godman |
Re: Probleme mit großerer Abfrage
Zitat:
Du kannst ein Array benutzen und trotzdem jedes Sprite mit seinem "Namen" ansprechen:
Delphi-Quellcode:
Du könntest auch die Sprites in Gruppen einteilen. Jede Gruppe hat eine andere Funktion
const S_Ritter1 = 0, S_Ritter2 = 1, S_LaserbeamBlue= 2, ...
var sprites : array[0..120] of TSprite; // Benutzung sprites[S_Ritter2].x := 5; (Angreifer, Spielfigur, Steine, Waffen,...). TSprite wird um die Eigenschaft Group erweitert und schon kannst du bestimmte Operationen mit allen Sprites einer Gruppe durchführen. (z.B. Prüfe, ob ein Sprite der Gruppe "Waffen" mit der Hauptspielfigur kollidiert) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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