[gelöst] Type Handle

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Hex²

Betreff: [gelöst] Type Handle

BeitragMi, März 15, 2006 5:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schau mir grade BMax an und habe da etwas, was ich bisher nirgends gefunden habe.

Wie komme ich an ein bestimmten Type ran, ohne die komplette Liste durchlaufen zu lassen?

Also in BB3D war es ja so:
obj.window=OBJECT.window(id)

Gibt es sowas auch in BMax? Und wenn nicht, wie löse ich es dann?

Danke..
  • Zuletzt bearbeitet von Hex² am Sa, März 18, 2006 2:11, insgesamt einmal bearbeitet
 

klepto2

BeitragMi, März 15, 2006 8:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Global List:TList = New TList

Type TTest
   Field Name:String
End Type

For Local I:Int = 0 To 99
Local T:TTest = New TTest
T.Name = "TestType"+I
List.Addlast(T)
Next

Local Temp:TTest = TTest(List.Valueatindex(45))

Print "Type 45 = " + Temp.Name



mit ValueatIndex kann man Werte direkt ansprechen, wenn man die genaue Position kennt. Allerdings macht diese Funktion auch nichts anderes
als die Liste solange durchzugehen, bis sie an der gewünschten stelle ist. Das kostet halt viel Zeit und ist dementsprechend langsam.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Markus2

BeitragMi, März 15, 2006 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du das Objekt dauerhaft brauchst speichere es einfach
in eine extra Variable .
Wird das Objekt angefordert machst du erst einen vergleich mit
dem was du zwischen gespeichert hast und wenn es unterschiedlich
ist suchst du in der Liste und merkst es dir wieder .
 

Hex²

BeitragMi, März 15, 2006 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke. Ich werde mal ein wenig rumprobieren. Ich muß aber sagen, die Lösung mit dem Handle fehlt mir schon ein wenig sehr in BMax...

Ich denke mit ein bißchen Fummeln wird mir klepto2's Lösung erstmal weiterhelfen.
 

Dreamora

BeitragMi, März 15, 2006 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst in BM keine Handles mehr, weil die Objekte wirkliche Objekte sind und nicht nur Zahlen, wie in den alten Blitz.
Vorausgesetzt natürlich das Objekt wurde richtig deklariert (zb bild:TImage)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Suco-X

Betreff: ........

BeitragMi, März 15, 2006 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@Hex: Dir ist doch sicher klar, dass viele Wege nach Rom führen. Wenn du einen gefunden hast, heiß das nicht, dass es
A: Der beste ist.
B: Man die anderen Wege nicht auch mal ausprobieren kann.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Hex²

BeitragMi, März 15, 2006 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es jetzt erstmal so gelöst, nur ich bin mir sicher es gibt eine wesendlich bessere Lösung Wink

Code: [AUSKLAPPEN]

Global List:TList = New TList
Global anzahl

Type Obst
   Field Name:String
End Type

Global apfel:Int=Create("Ein Apfel")
Global birne:Int=Create("Eine Birne")
Global banane:Int=Create("Eine Banane")
Global melone:Int=Create("Eine Melone")

Print Draw(banane)

Function Draw:String(id:Int)
   Local t:Obst = Obst(List.Valueatindex(id))
   Return t.Name
End Function

Function Create:Int(text:String)
   Local T:Obst = New Obst
   T.Name = text
   List.Addlast(T)
   anzahl:+1
   Return anzahl-1
End Function


Wie erwähnt, bin noch nicht so vertraut mit BMax, und habe auch noch die Demoversion, also ganz frisch umgestiegen Very Happy
 

Dreamora

BeitragMi, März 15, 2006 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist eine sehr schlechte Variante es zu lösen, da ValueAtIndex jeweils durch die ganze Liste gehen muss bis es beim Index ankommt. Speicher es besser direkt in einen Array (global obstarray:obst[] = new obst[10] oder was auch immer).

Warum du allerdings umbedingt mit Zahlen arbeiten musst, anstatt mit "sinnvollen" Informationen ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Hex²

BeitragMi, März 15, 2006 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
ahso.. glaub nun steig ich langsam dahinter.. danke...

natürlich arbeite ich nicht lieber mit zahlen wenn ich es zu verhindern weiß Razz

Jolinah

BeitragMi, März 15, 2006 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls du für jede Obstsorte was eigenes zeichnen willst, würde sich Vererbung gut anbieten. Oder geht es dir wirklich nur um direkten Zugriff auf ein bestimmtes Objekt? Dann ignorier das einfach Smile

Code: [AUSKLAPPEN]

Type Obst
  Field Name:String

  Method Draw()
    DrawText Name, 10, 10
  End Method
End Type

Type Apfel Extends Obst
  Method New()
    Name = "Apfel"
  End Method
End Type

Type Birne Extends Obst
  Method New()
    Name = "Birne"
  End Method
End Type

Type Banane Extends Obst
  Method New()
    Name = "Banane"
  End Method
End Type

Type Melone Extends Obst
  Method New()
    Name = "Melone"
  End Method
End Type

Local list:TList = new TList
list.AddLast(new Apfel)
list.AddLast(new Birne)
list.AddLast(new Banane)
list.AddLast(new Melone)

'Alle Typen zeichnen
For Local o:Obst = EachIn list
  o.Draw()
Next

'Nur Äpfel zeichnen
For Local a:Apfel = EachIn list
  a.Draw()
Next

...

Markus2

BeitragMi, März 15, 2006 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Global List:TList = New TList
Global anzahl

Type TObst
   Field Name:String

   Function Neu:TObst(Name:String)
    Local T:TObst=New TObst
    T.Name=Name
    List.addlast T
    anzahl=anzahl+1
    Return T
   End Function

   Method Zeigen()
    Print Name
   End Method

End Type

Global apfel:TObst=TObst.Neu("Ein Apfel")
Global birne:TObst=TObst.Neu("Eine Birne")
Global banane:TObst=TObst.Neu("Eine Banane")
Global melone:TObst=TObst.Neu("Eine Melone")

banane.Zeigen

 

Hex²

BeitragMi, März 15, 2006 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja super =) danke nochmals an alle, Markus2 hat genau das was ich nun schon seit gestern Abend versuche gepostet lol .. und wenn ich nun sehe wie das funktioniert, vermisse ich die Handles doch nicht mehr *g* .. War ja eigendlich ganz simpel ^^

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group