Objekte unterschiedlicher Klassen als Funktionsparameter
Übersicht

lordlomexBetreff: Objekte unterschiedlicher Klassen als Funktionsparameter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich habe folgendes Problem: Der Compiler haut mir af die Finger wenn ich folgende funktion verwende: (Compile Error: Identifer 'x' not found) Code: [AUSKLAPPEN] Function dist:Float (a:Object, b:Object)
Return distance (a.x, a.y, b.x, b.y) End Function Die Funktion soll eine Entfernung verschiedener Spielobjekte zurückgeben, indem es die Koordinaten extrahiert und die Entfernung mit einer anderen Funktion berechnet. Ich dachte er hat nur ein Problem damit, dass er nicht weiß, dass alle diese Objekte die Felder x und y haben. Also habe ich ihm eine Fake-Klasse geschrieben, um ihn ruhig zu stellen. Code: [AUSKLAPPEN] Type Fake
Field x:Float Field y:Float End Type Function dist:Float (a:Fake, b:Fake) Return distance (a.x, a.y, b.x, b.y) End Function Jetzt meckert der Compiler aber, weil er versucht, meine Objekte zu diesem Fake-Typen zu konvertieren, aber nicht weis, wie (Compile Error: Unable to convert from 'Type' to 'Fake'). Weiß jemand, mit welchem Typen ich die Parameter definieren muss, damit er nicht meckert? Oder wie ich ihm das Konvertieren beibringen kann? Gruß Lomex |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach eine Abstrakte basis-klasse für alle deine Spiel-Irgendwas-Klassen, die alle gemeinsamen felder und Member-funktionen beinhaltet. | ||
lordlomexBetreff: Danke |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das klingt logisch. Scheint auch zu gehen...
Danke! |
||
![]() |
Kernle 32DLL |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst ein Object auch konvertieren wie du es mit int und Float auch z.b. kannst.
z.b. hast du die Klassen TAuto und TPflanze.. dann prüfst du nacheinander ob TAuto(object) oder TPflanze(object) Not Null ist. Dann weist du das es ein solches Objekt ist. Dann kannst du damit auch normal arbeiten. Ich hoffe das war irgendwie verständlich :/ Denk einfach daran das du mit TypeName(Objekt) genauso wie mit Int( ) oder Float( ) oder String ( ) konvertieren kannst. So long, Kernle |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest auch Reflection dazu verwenden ![]() BlitzMax: [AUSKLAPPEN] Function dist:Float (a:Object, b:Object) Die Lösung von btbn, alles zusammenfassbare in ein eigenes Type zu stecken, und davon wiederum dann die anderen abzuleiten, ist allerdings vorzuziehen ... dafür kann BMax ja OOP ^^ |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group