Von B3D zu BMax

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Propellator

BeitragFr, Jan 20, 2012 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Oha, Fehler meinerseits. Hui.
Wobei Funktiospointer als Objekte sowieso keinen Sinn machen würden, rein vom Benutzen her.
Danke fürs Berichtigen!
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.
 

Seven

BeitragFr, Jan 20, 2012 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Was genau sind Funktionspointer?


Und nebenbei; Muss man verstehen, was ein Objekt ist und was nicht?

Farbfinsternis

BeitragFr, Jan 20, 2012 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Und nebenbei; Muss man verstehen, was ein Objekt ist und was nicht?


Du kennst Types? Diese können Werte halten und man kann mit Funktionen diese Werte manipulieren oder auslesen.
Ein Objekt ist fast dasselbe, nur dass die Funktionen (Methoden) zum manipulieren und auslesen direkt im Type sitzen.
Farbfinsternis.tv
 

Seven

BeitragFr, Jan 20, 2012 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Gilt diese Funktion eigentlich die ganze Zeit, oder kann man sie die ganze
Zeit aktiv halten?

Anderenfalls würde ich keinen besonderen Vorteil daraus sehen.
Im Grunde könnte man in dem Fall ja eine Funktion extra für ein Type zurecht
schneiden. Das wäre etwas umständlicher, aber möglich. (außer,
so hoffe ich, ich unterliege einem Irrtum)

Farbfinsternis

BeitragFr, Jan 20, 2012 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Ahnung ob das für Dich besser ist, aber es ist generell besser weil besser lesbar. Wenn Du nach einem Jahr in Deinen alten Code schaust siehst Du direkt dass diese Funktionen nur dazu da sind die Eigenschaften (Fields) dieses Objekts zu manipulieren während Du bei externen Funktionen erstmal die Funktionen lesen musst um herauszufinden welche Types manipuliert werden.
Farbfinsternis.tv

Midimaster

BeitragSa, Jan 21, 2012 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Einer der Vorteil, die ich sehr an den Typen in BlitzMax schätze, ist die Tatsache, dass die Funktionen einen Geltungsbereich "nur innerhalb" des Types haben. Dadurch ist es möglich in zwei Typen 2x die selbe Funktionsbezeichung für völlig unterschiedliche Funktionen zu verwenden:

BlitzMax: [AUSKLAPPEN]
Type A
Global Field X%

Function GetInfo%(Y%)
X=Y
Return Quadrat()
End Function

Function Quadrat%()
Return X*X
End Function
End Type

Type B
Global Field X%

Function GetInfo$(Y%)
X=Y
Return Quadrat(X)
End Function

Function Quadrat$(X%)
Text$ = X + " * " + X + " = " + A.Quadrat()
Return Text
End Function
End Type


So muss man sich nie sorgen machen, dass eine Bezeichnung eines importierten TYPE-Moduls mit den Bezeichnungen anderer TYPES oder des Hauptprogramms kollidiert. Das wirst Du schätzen lernen!


Der Aufruf solcher Funktion geschieht so:

BlitzMax: [AUSKLAPPEN]
Print A.GetInfo(3)
Print A.Quadrat()
Print B.GetInfo(4)
;Print GetInfo(8) ; <-- sowas get nicht


Deutlich wird dies an dem Aufruf Print B.GetInfo(4). Hier wird diese seltsame Zeile ausgegeben:

Zitat:
4 x 4 = 9


Funktionen innerhalb des Types können andere Funktionen innerhalb dieses Types ohne vorangestellten "NameSpace" aufrufen :BlitzMax: [AUSKLAPPEN]
Return Quadrat(X)


Funktionen des einen Types können Funktionen eines anderen Types mit vorangestellten "NameSpace" aufrufen :BlitzMax: [AUSKLAPPEN]
Return A.Quadrat()


Auch von ganz außerhalb kann man Funktionen innerhalb eines Types mit vorangestellten "NameSpace" aufrufen :BlitzMax: [AUSKLAPPEN]
Return B.GetInfo(X)


Beim Aufrufen einer Funktion, die nur innerhalb eines Types existiert, wird diese aber im Hauptprogramm nicht gefunden:BlitzMax: [AUSKLAPPEN]
Print GetInfo(8)  ; <-- sowas get nicht
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Seven

BeitragSo, Jan 22, 2012 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke ich verstehe es langsam.
Danke für die ausführliche Erklärung.

Ich werde erstmal ein paar Tutorials dazu lesen.
 

Seven

BeitragSo, Jan 29, 2012 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich vermisse die Befehle GfxModeHeight und GfxModeWidth.

Das einzige was ich gefunden habe ist GraphicsHeight und co,
aber bei GraphicsHeight lässt sich kein Modus oder überhaupt irgendetwas einstellen.

Was für eine Alternative gibt es?

Propellator

BeitragSo, Jan 29, 2012 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
CountGraphicsMode GetGraphicsMode

GetGraphicsMode ein paar Variablen für die Parameter übergeben, in welche er schreiben darf, und nach dem Aufruf hast du die einzelnen Eigenschaften in denen.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.
 

Seven

BeitragSo, Jan 29, 2012 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
5 Werte, die ich übergeben muss?

Und wieso müssen 4 davon aus Variablen stammen?

bzw. wieso soll ich Width, Height usw. rein geben,
wenn ich diese Werte doch aus der Funktion erwarte?

Xeres

Moderator

BeitragSo, Jan 29, 2012 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
...weil BlitzMax viel coolere Dinge bietet, als Blitz3D!
BlitzMax: [AUSKLAPPEN]
Local a:Int, b:Int, c:Int

Function Get(_a:Int Var, _b:Int Var, _c:Int Var)
_a = 1
_b = 2
_c = 3
EndFunction

Print(a + ", " + b + ", " + c)
Get(a, b, c)
Print(a + ", " + b + ", " + c)
Mit dem Schlüsselwort Var wird in die Variablen zurückgeschrieben - du erhältst mit einem Funktionsaufruf alle Werte, anstatt alles über einzelne Funktionen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Seven

BeitragSo, Jan 29, 2012 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat was:D
Nicht schlecht^^


Leider kann ich nicht einfach Width, Height usw.
in GetGraphicsMode einspeisen, da ich ja mit Hilfe von CountGraphicsMode
und GetGraphicsMode diese herausfinden möchte.

Xeres

Moderator

BeitragSo, Jan 29, 2012 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe nicht ganz. Du stellst die Variablen bereit, die Funktion füllt die richtigen Werte hinein, abhängig vom Modus-Index.

BlitzMax: [AUSKLAPPEN]
Local w:Int, h:Int, d:Int, f:Int

For Local i:Int = 0 Until CountGraphicsModes()
GetGraphicsMode(i, w, h, d, f)
Print(w + "x" + h + "(" + d + ")@" + f + "hz")
Next
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Seven

BeitragSo, Jan 29, 2012 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ah so
Hatte den falschen Gedanken geknüpft^^

Funktioniert auf die weiße Perfekt. Danke:)
 

Seven

BeitragSo, Jan 29, 2012 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch etwas;

Da ich schon in Blitzbasic nach Lua geguckt habe,
wollte ich es auch mal in Blitzmax ausprobieren.
(genauer: BRL.MaxLua)

Wirkliche Tutorials habe ich nicht gefunden,
also probiere ich momentan rum.

So sieht man Test aus;
BlitzMax: [AUSKLAPPEN]

Local LuaState:Byte Ptr = luaL_newstate()
luaL_openlibs(LuaState)
DebugLog luaL_dofile(LuaState,"file.lua")
lua_close(LuaState)

WaitKey


Die Datei dazu:

Code: [AUSKLAPPEN]

Print "Hallo"


Es heißt luaL_dofile gibt eine 0 aus,
wenn es keine Probleme gibt und eine 1 bei Problemen.

Ich bekomme eine 2 xD

Wenn ich das Print "Hallo" entferne, dann gibt es eine 0,
also wird die Datei zumindest erkannt, aber ausgeführt wird
nichts.

Was ist falsch?

Propellator

BeitragSo, Jan 29, 2012 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Bist du dir sicher, dass du nicht erst noch Print hooken musst damit du es von Lua her benutzen kannst? Da war doch irgendwie sowas.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

blackgecko

BeitragMo, Jan 30, 2012 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@Propellator: Ich denk mal, das Print von Lua ist gemeint.

Das MaxLua-Modul benutzt man so:
Code: [AUSKLAPPEN]
--Lua-Datei--
print "Hallo"

function bye()
   print "Tschau"
end

BlitzMax: [AUSKLAPPEN]
'BlitzMax-Datei
Local class:TLuaClass = TLuaClass.Create(LoadString("test.lua"))
Local obj:TLuaObject = TLuaObject.Create(class,Null)
'Hallo wird ausgegeben

obj.invoke("bye",Null)
'Tschau wird ausgegeben

Befehle, die einfach so in der Datei stehen, werden beim Erstellen des LuaObjects ausgeführt, Funktionen erst wenn sie mit invoke() aufgerufen werden. Über den zweiten Parameter kann man der Lua-Funktion noch Parameter mitgeben.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group