Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit großerer Abfrage (https://www.delphipraxis.net/23323-probleme-mit-grosserer-abfrage.html)

godman 1. Jun 2004 14:15


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

shmia 1. Jun 2004 14:39

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:
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
Mit diesen Funktionen vereinfachen sich deine If-Abfragen schon erheblich.

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.

godman 1. Jun 2004 18:56

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

shmia 2. Jun 2004 08:57

Re: Probleme mit großerer Abfrage
 
Zitat:

Zitat von godman
Ich habe nur 100 Variablen benutzt ob jedes Objekt in dieser Engine anders beeinflussen zu können! Leider hat das natürlich seine Nachteile!

Genau, diese Nachteile sind entscheidend.
Du kannst ein Array benutzen und trotzdem jedes Sprite mit seinem "Namen" ansprechen:
Delphi-Quellcode:
const S_Ritter1 = 0, S_Ritter2 = 1, S_LaserbeamBlue= 2, ...
var
   sprites : array[0..120] of TSprite;
// Benutzung
   sprites[S_Ritter2].x := 5;
Du könntest auch die Sprites in Gruppen einteilen. Jede Gruppe hat eine andere Funktion
(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 20:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz