Type in Function
Übersicht

![]() |
adbaBetreff: Type in Function |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Ich habe folgendes Problem: Ich habe einen Type erstellt Type WindowType field bla field blabla end type ;und ich übergebe nun einer functionen diesen type: fenster.WindowType = new WindowType fenster.WindowType = MakeWindow(fenster.WindowType,x,y) ; Hier tritt der Fehler auf: illegal Type conversion ;Meine Function ist in etwa so: function MakeWindow(win.WindowTape,x,y) win\bla=blablabla win\blabla=test return win.WindowType end function ; Wo könnte der Fehler liegen??? |
||
![]() |
Blatolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] function MakeWindow(win.WindowTape,x,y)
Hier wird ein Objekt des types windowtape erwartet aber du übergibst eines vom type windowtype. Oder war das jetzt nur ein Tippfehler der nicht im Programm ist? |
||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Type WindowType Field bla Field blabla end type ;und ich übergebe nun einer functionen diesen type: fenster.WindowType = New WindowType xHandle = MakeWindow(fenster.WindowType,x,y) fenster.WindowType = Object.WindowType(xHandle) Print fenster\bla Print fenster\blabla WaitKey() ;Meine Function ist in etwa so: Function MakeWindow(win.WindowType,x,y) win\bla=122 win\blabla=133 Return Handle(win.WindowType) End Function |
||
walskiEhemaliger AdminBetreff: Re: Type in Function |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
- WEGLASSEN! fenster.WindowType = new WindowType
fenster.WindowType = MakeWindow(fenster.WindowType,x,y) ; Hier tritt der Fehler auf: illegal Type conversion ;Meine Function ist in etwa so: function MakeWindow.WindowType(x,y) local TempType.WindowType = new WindowType TempType\bla=x TempType\blabla=y return TempType end function So ist es wohl am elegantesten gelöst. walski |
||
buh! |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder so :
Global fenster.WindowType ;für For Each Global fenster1.WindowType ;nur dieses fenster1= NewWindow(x,y) x=x+20 SetWindow fenster1,x,y function SetWindow(win.WindowType,x,y) win\x=x win\y=y end function function NewWindow.WindowType (x,y) local win.WindowType = new WindowType win\x=x win\y=y return win end function |
||
![]() |
adba |
![]() Antworten mit Zitat ![]() |
---|---|---|
dankefür eure schnelle Antworten! habs geschafft!
ich habe aber gerade noch eine weiter frage mit types: ich habe ca. folgenden code: type blablatype field x,y end type type testtype field b.blablatype ;also type in typs aber das ist nicht das problem field irgendwas end type und jetzt will ich: for a=0 to 10 t.testtype = new testtype for b=0 to 5 t\b.blablatype = new blablatype next next . . . und jetzt will ich aber nur die blablatypes von einem testtype aufrufen und nicht alle blablatypes: for t.testtype = Each testtype if t\irgendwas>0 then for t\b.blablatype = each blablatype ; <- das funktioniert irgedwie nicht t\b\x=t\b\x*-1 next endif next das problem ist das es wenn ich for t\b.blablatype = each blablatype schreibe es dann immer alle blablatypes durchgeht und nicht nur diese die im t drinn sind also nicht nur diese 5 sondern alle 50! (ist das verständlich?) wie krig ich das hin? (tja blitzbasic ist halt nicht objekt orintierts programmieren aber java ist zu langsam und mit c++ verbraucht man sooo viel zeit bis schon nur das gerüst läuft!) PS: gibt es bald DirectX 8 und 9 unterstützung von B3d? ich finde die DirectX 7 hat langsam ausgedient, mann kann zwar schon schöne sachen zaubern aber nichts mehr revolutionäres ![]() |
||
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mit BMax soll ja OpenGL kommen und das wär geil.
Und gestern hat irgendwer im Chat das Gerücht gestreut, dass der 11. März BMax Stichtag sei... naja wers glaubt... Zu deinem Problem: Das ganze ist leider nur durch n ID Field machbar ![]() Also musst du jedem "Parent-Type" ne ID geben und dann for Type = each TypeType for SubType = each SubTypeType if SubType\ID = Type\ID then ... endif next next Sowas in der Art. Nur dann mussu halt auch wieder IDs vergeben, aufpassen was passiert wenn du eine ID aus der Mitte rauslöschst etc... Wenn du das umgehen willst und nicht "unendlich" Types hast, dann würd ich einfach ne globale (ich weiß is unschön aber was solls) Variable nehmen und die hochzählen bei jeder "Type-Erstellung". So long walski |
||
buh! |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
so geht das nicht weil du jedes mal das Handle überschreibst .
Alternative wenn die 5 fest sind for a=0 to 10 t.testtype = new testtype t\b1.blablatype = new blablatype t\b2.blablatype = new blablatype t\b3.blablatype = new blablatype t\b4.blablatype = new blablatype t\b5.blablatype = new blablatype next oder mit IDs arbeiten die auf t verweisen for a=0 to 10 t.testtype = new testtype t\ID=a for i=1 to 5 b.blablatype = new blablatype b\IDParent=t\ID next next |
||
![]() |
adba |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja das mit den ids hab ich mir auch schon überlegt aber das frisst enorm rechnleistung wenn ich dann mit ca 1000 oder noch mehr typs arbeite den anstatt nur ca 10 durzugehen muss ich dann jedes mal 1000*10 durchgehen und bei jedem noch die id testen... hmm dann ist java schon wider schneller ![]() naja ich schau mal was sich machen lässt oder gibt es eine dll die solche typs unterstützt? währe mal eine gute aufgabe für die c++ spezialisten die könnten doch so eine dll schreiben! ![]() |
||
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das braucht weniger Zeit als du denkst die durchzugehen.
Mach mal ein paar Messungen, es ist wirklich wenig, auch bei vielen Elementen. Aber ich gebe gerne zu: optimal is das nicht. Aber eben auch nicht so schlimm, wie man meinen sollte. walski |
||
buh! |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
schau dir Handle und Objekt an - handles kann man in bank speichern... | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@adba
Wenn es geht kannst du ja das Parent Objekt in den vielen Types merken und direkt ansprechen . Also einmal die Unterliste durch gehen und was mit dem Parent machen . Als Beispiel , du hast drei Spieler aber 10000 Kugeln die durch die Gegend fliegen . Dabei muß man ja nicht erst die Spieler durch gehen und die Kugel heraus suchen max. 3*10000 sondern man kann ja auch 1*10000 Kugeln durch gehen und gucken wen die treffen werden . |
||
![]() |
adba |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja das stimmt. aber ich will nicht meine cpu leistung damit belasten unnütze sachen zu testen...
ich hätte gerne ca folgende type struktur: type baumtype field aestetype field früchtetype field x,y,z,h,w,b,t field color field texturen end type type haustype field wandtype field stocktype field mesh field x,y,z,w,h,b,t field usw... end type type level field terraintype field baumtype field haustemp field uswtype end type ... usw.. aber ich will dann zb nur eine frucht eines baumes ansprechen dann wil ich nicht alle andern auch noch (das könnten ja 10000 sein) naja... |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier mal eine Lösung:
Code: [AUSKLAPPEN] Const TYPE_ENTRY = 0 Const TYPE_INSTANCE = 1 SeedRnd MilliSecs() Global Cnt_Instance Type Frucht Field Typ; 0=Entry 1=Instance ; Könnte man auch in Name oder Gewicht verstecken Field Name$ Field Gewicht End Type Type Baum Field Name$ Field Frucht.Frucht End Type ;Bäume erzeugen abaum.baum = CreateBaum("Apfelbaum", "Apfel") bbaum.baum = CreateBaum("Birnbaum", "Birne") kbaum.baum = CreateBaum("Kirschbaum", "Kirsche") pbaum.baum = CreateBaum("Pflaumenbaum", "Pflaume") ;Früchte erzeugen For b.baum = Each baum Anzahl = Rand(2,7) For i = 1 To Anzahl CreateFrucht(b,Rand(50,250)) Next Next ;Früchte je Baum ausgeben For b.baum = Each baum Print b\name$ f.frucht = After b\frucht While f <> Null If f\Typ = TYPE_INSTANCE Then Exit Print " " + f\Name$ + " " + f\Gewicht + "g" f.frucht = After f.frucht Wend Next WaitKey() ;Ende Hauptprogramm Function CreateBaum.Baum(Baumname$, Fruchtname$) Local b.Baum b = New Baum b\Name$ = Baumname$ b\Frucht = CreateFruchtInstance(Fruchtname$) Return b End Function Function CreateFruchtInstance.Frucht(Fruchtname$) Local f.Frucht f = New Frucht f\typ = TYPE_INSTANCE f\Name$ = Fruchtname$ Return f End Function Function CreateFrucht.Frucht(Baum.Baum, Gewicht) Local f.Frucht Local h.Frucht If baum.baum = Null Return Null h = baum\frucht f = New Frucht f\typ = TYPE_ENTRY f\Name$ = h\name$ f\Gewicht = Gewicht Insert f After baum\frucht Return f End Function Prinzip: Es wird für jeden "Ober-Type" ein eigener Informations-Eintrag im "Unter-Type" angelegt, der entsprechend verlinkt wird. Alle neuen Objekte werden dann direkt hinter dem entsprechenden InfoEintrag erzeugt. Über diesen Infoeintrag werden dann die einzelnen Instanzen direkt abgefragt. Die manuelle Abarbeitung der Type-Einträge ist bei deaktiviertem Debugger übrigens nicht viel langsamer als eine For-Each-Schleife: Code: [AUSKLAPPEN] Type blup Field affe End Type For i = 1 To 1000000 f.blup = New blup Next Print "Zeitmessung Manuell" f.blup = First blup oldtime = MilliSecs() While f <> Null If f\Affe = 5 Then Exit f.blup = After f.blup Wend Print MilliSecs() - oldtime Print "Zeitmessung For-Each" oldtime = MilliSecs() For f.blup = Each blup Next Print MilliSecs() - oldtime WaitKey() |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
adbaBetreff: Cool Danke! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke genau das brauchte ich. ist zwar ein bisschen umständlich aber machbar und genug schnell. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group