New Type in einer Funktion erstellen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

SonAngelos

Betreff: New Type in einer Funktion erstellen

BeitragMi, Jul 21, 2004 1:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen! Very Happy
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 Smile . Nun habe ich folgenden type definiert (image laden und über funktion aufrufen ohne types hab ich getestet und es funktioniert Surprised ):
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 Wink
greeting SonAngelos

Jolinah

BeitragMi, Jul 21, 2004 1:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jul 21, 2004 1:31
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW!
das ging aber schnell, und das zu dieser Uhrzeit Very Happy
Vielen Danke! Klappt wunderbar

greetings
SonAngelos
 

zocker2150

BeitragMi, Jul 21, 2004 3:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jul 21, 2004 8:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jul 21, 2004 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jul 22, 2004 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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

BeitragDo, Jul 22, 2004 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDo, Jul 22, 2004 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing

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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group