New Type in einer Funktion erstellen
Übersicht

SonAngelosBetreff: New Type in einer Funktion erstellen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen! ![]() Ich habe heute mit BlitzBasic angefangen und muss sagen ich habe noch nie so kurze zeit gebraucht mich in eine programmiersprache einzufinden. Nur stehe ich jetzt vor folgendem Problem: Ich möchte gerne meinen programmcode ein bisschen strukturieren und versuche möglichst viel über funktionen zu machen(klappt eigentlich auch ganz gut ![]() ![]() Code: [AUSKLAPPEN] Global Spieler Type Spieler Field x Field y End Type Anschliesend erstelle ich meinen Spieler über den Funktionsaufruf Code: [AUSKLAPPEN] SpielerErzeugen() die folgende funkttion aufruft Code: [AUSKLAPPEN] Function SpielerErzeugen() Spieler1.Spieler= New Spieler Spieler1\x = 200 Spieler1\y = 300 End Function in meiner Mainschleife rufe ich nun die Funkttion SpielerZeichnen() auf die folgendes machen soll Code: [AUSKLAPPEN] Function SpielerZeichnen()
DrawImage schiff ,Spieler1\x , Spieler1\y End Function Leider bekomme ich immer die Fehlermeldung "Variable must be a Type" Warum? ich habe den Type doch global definiert oder verstehe ich da was falsch? Danke im voraus für jede Hilfe ![]() greeting SonAngelos |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Den Type selber kann man nicht als Global definieren. In deinem Fall hast du einen Integer namens Spieler als Global definiert.
Damit das Funktioniert musst du eine Type Variable (bzw. Type Zeiger) als Global definieren. Code: [AUSKLAPPEN] Global Spieler1.Spieler
So würde es funktionieren. Da du später aber vielleicht mehr Spieler hast müsstest du für jeden Spieler eine globale Variable machen. Aber zum Glück gibt es ja die For each Schleife in BB. Um alle Spieler abzuarbeiten machst du dann einfach sowas: Code: [AUSKLAPPEN] For s.Spieler = each Spieler DrawImage schiff, s\x, s\y Next |
||
SonAngelos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
WOW!
das ging aber schnell, und das zu dieser Uhrzeit ![]() Vielen Danke! Klappt wunderbar greetings SonAngelos |
||
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Typs sind schon von sich aus Global man muss also garnix machen und kann immer auf ihre Eigenschaften zugreifen.
Wie "Jolinah" schon sagte hast wurde die Variable "Spieler" einmal als Integer und einmal als Typ definiert. |
||
Jake |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du kannst auch einen Typ in einer Funktion erstellen und zurückliefern. Ebenso kannst du Zeiger auf Typen erstellen. Beispiele:
Type Point3D field x#, y#, z# end Type function MyPoint.Point3D (x#,y#,z#) newp=new Point3D new\x=x:new\=y:new\z=z return (newp) end function punkt.Point3D=MyPpoint (1,1,1) ptr%=Handle(andererpunkt) ; speichert Zeiger ... punkt.Point3D=object.Point3D(ptr) ; und holt das Type wieder Das ist z.B. sehr praktisch, wenn du Types in Funktionen übergeben willst. Das geht zwar auch so, aber du kannst keine optionalen Typen übergeben, eine Function dosomething (a.typ=null) geht nicht (Null ist keine Konstante). Dafür bietet sich dann dosomething (ahandle%=0) an. Kurz: Handle und Object sind sehr praktische (komischerweise leider auch sehr undokumentierte) Funktionen. |
||
SonAngelos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
kewl!
Wie kommt man an undokumentierte befehle ran und wieso sind die denn nicht aufgelistet, ich meine zeiger sind (wenn das in BB wirklich echte zeiger sind) ein ultrmächtiges werkzeug, wenn ich daran denke was man in c++ damit alles machen kann..... gibt es die zeiger schon in der 2d version? |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke es sind nur BB Intern Zeiger. In BB ist es einfach eine Objekt ID die das Objekt identifiziert (Integer). Diese kann dann wieder dazu verwendet werden ein Objekt zu erhalten.
Ich fände es auch toll wenn es sowas wie Zeiger in BB geben würde. Dann könnte man für KI oder ähnliches Funktionszeiger benutzen. Zum Beispiel hätte man dann den Zeiger Zustand der auf eine Funktion Zeigt und dann macht man ein paar Funktionen die eben den aktuellen Zustand der KI wiedergeben. Code: [AUSKLAPPEN] KI_Runaway(), KI_Attack(), KI_Die() ;etc..
Dann kann man lediglich den aktuellen zustand setzen: Code: [AUSKLAPPEN] Zustand = KI_Attack
Und dann führt man lediglich Zustand aus: Code: [AUSKLAPPEN] Zustand()
Jetzt würde einfach das ausgeführt werden worauf Zustand gerade gesetzt ist, in diesem Fall würde die KI Angreifen. Hab das jetzt absichtlich in BB Syntax gehalten weil ich niemanden verwirren will ![]() Natürlich kann man das ganze in BB auch lösen, aber es ist viel umständlicher und mit vielen If oder Select abfragen. |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Jake
Mit dem Handle speichern finde ich nicht gut , so gehts auch . punkt1.Point3D=MyPpoint (1,1,1) punkt2.Point3D=punkt1 Als optional kann man auch nen Type übergeben der NULL ist . |
||
Jake |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ob und was man mit Handles macht, ist natürlich Geschmackssache. Ich benutze sie gerne, weil ich nur so Funktionen schreiben kann, die mit mehreren Typen arbeiten können. Damit läßt sich ganz gut Vererbung für Arme simulieren ![]() Und du kannst natürlich NULL übergeben, wenn du keinen Typ übergeben willst. Aber du mußt diesen Parameter dann angeben, er ist dann nicht mehr optional. Optionale Typen im Sinne von "weglassen können" geht nur über Handles. @SonAngelos Eine Liste von undokumentierten Features findest du unter http://www.blitzcoder.com/cgi-...s.pl?id=UD |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group