Von B3D zu BMax
Übersicht

SevenBetreff: Von B3D zu BMax |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da ich nach Ablauf der BMax Demo vermutlich auch hier hin wechseln werde,
lese ich momentan intensiv Tutorials durch und dabei sind mir einige Fragen gekommen. 1) Es heißt man kann innerhalb von Types Funktionen, bzw. hier bezeichnet als Methoden, verwenden. Bei den Beispielen sah ich keinen direkten Grund für die Verwendung. Was kann z.B. in Methoden stehen, dass auch tatsächlich essenziell ist? 2) Was ist der Unterschied zwischen TList und Type? 3) BlitzMax kann sowohl DX, als auch OpenGL verwenden und ich sah einige Threat's, die speziell die OpenGL Programmierung ansprachen. Wieso muss man sich darum Gedanken machen, wenn BMax doch für Linux und Mac mit compilieren kann? 4) Wozu genau macht man sich die Mühe z.B. Text in DrawText umzubenennen, wenn sie doch scheinbar die selbe Funktion haben? o.O 5) Ich vermisse den Befehl CountGfxModes ![]() oder muss man hier etwas anderes machen? 6) Gibt es in BMax irgendwelche Bugs, die zum Absturz oder zur inkompatibilität führen, wie bei BB der ImagesCollide ![]() 7) Gibt es irgendwelche Funktionen, die für komplett neue Möglichkeiten sorgen, wenn man mal von OOP und Multi Plattform absieht? Das wars auch schon. Ich such dann mal erst einmal weiter nach Tutorials:) |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: 1) Es heißt man kann innerhalb von Types Funktionen, bzw. hier bezeichnet als Methoden, verwenden. Bei den Beispielen sah ich keinen direkten Grund für die Verwendung. Was kann z.B. in Methoden stehen, dass auch tatsächlich essenziell ist? OOP ist immer ein bisschen umstritten. Methoden kann man aber gut mit Vererbung benutzen. Zitat: 2) Was ist der Unterschied zwischen TList und Type?
In BMax kannst du nicht sämtliche Objekte eines Types durchgehen - deshalb verwaltet man normalerweise in einem seperaten Objekt eine Liste aller Objekte. Zitat: 3) BlitzMax kann sowohl DX, als auch OpenGL verwenden und ich sah einige Threat's,
die speziell die OpenGL Programmierung ansprachen. Wieso muss man sich darum Gedanken machen, wenn BMax doch für Linux und Mac mit compilieren kann? BMax hat zwei Methoden der OpenGL-Programmierung: Einmal mit Max2D (also wie DX) und einmal direkt. Zitat: 4) Wozu genau macht man sich die Mühe z.B. Text in DrawText umzubenennen,
wenn sie doch scheinbar die selbe Funktion haben? o.O Ansichtssache. Ich finde es praktisch, meine Variablen "text" nennen zu können, ohne dass diese verwirrend gehighlightet werden. Zitat: 5) Ich vermisse den Befehl CountGfxModes in BMax. Wurde er umbenannt,
oder muss man hier etwas anderes machen? -> CountGraphicsModes Zitat: 6) Gibt es in BMax irgendwelche Bugs, die zum Absturz oder zur inkompatibilität führen,
wie bei BB der ImagesCollide Befehl? Nicht, dass ich wüsste. Zitat: 7) Gibt es irgendwelche Funktionen, die für komplett neue Möglichkeiten sorgen,
wenn man mal von OOP und Multi Plattform absieht? Threading, Exceptions, Funktionspointer etc. Sieh selbst. Willkommen bei BMax! ZEVS |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Du kannst innerhalb von Types sowohl Funktionen als auch Methoden verwenden.
Der Unterschied zwischen den beiden ist dass eine Funktion global gilt, wärend eine Methode an eine Instanz, d.h. ein bestimmtes Type-Objewkt gebunden ist. Ein Beispiel: Code: [AUSKLAPPEN] Type a
field name:string function b print "hallo" endfunction method greet() print "hello "+name end method end type local test:a = new a test.name = "world" a.b() 'a.greet() würde einen fehler machen, da b eine Methode ist und ein objekt braucht, nicht die "schablone" test.b() ' geht, denn auch Instanzen haben zugriff auf die Funktionen. test.greet() 'geet, denn es ist ja eine Instanz. 2. Eine TList ist eine verkettete Liste, die Objekte verwalten kann. Im Gegensatz zu B3D verwaltet BMax die Objekte nicht automatisch, sondern Du musst dafür sorgen. Die TList ist eine der Möglichkeiten dafür. 3. Muss man nicht, wenn man nicht gezielt Teile selbst beeinflussen will. Der Anfänger kommt so klar. 4. Das musst Du Mark Sibly fragen. Vielleicht wollte er die Namensgebung vereinheitlichen. 5. CountGraphicsmodes() - Du kannst dir die Doku zu allen Modulen mal durchstöbern. Da gibt es viel zu entdecken. Ich empfehle HotDocs, das verbessert die Übersicht enorm. Findest Du hier im Forum per Suche als Code. 6. Unter Windows ist BMax sehr stabil, wenn auch nicht perfekt. Linux ist eher lala, Mac OS macht wohl aktuell mit Lion ein paar Probleme. Insgesamt ist BMax aber deutlich zukunftstauglicher, schon allein wegen der offenen Modulstruktur. 7. Wenn Du die Möglichkeiten dieser beiden Neuerungen ausgelotet hast darfst Du gern mal nach mehr fragen ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Blitzcraft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: In BMax kannst du nicht sämtliche Objekte eines Types durchgehen - deshalb verwaltet man normalerweise in einem seperaten Objekt eine Liste aller Objekte.
Zitat: Eine TList ist eine verkettete Liste, die Objekte verwalten kann. Im Gegensatz zu B3D verwaltet BMax die Objekte nicht automatisch, sondern Du musst dafür sorgen. Die TList ist eine der Möglichkeiten dafür.
Dazu möchte ich auch noch erwähnen dass in BMax alle Variablen,Funktionen,... Objekte sind, die auch bestimmte Methoden(Mehtods) haben mit denen man diese verändern kann. Beispiel: Code: [AUSKLAPPEN] Local text:String = "57"
Local zahl:Int = text.toint() Wie man sieht ist .toint() so eine kleine Methode um Text in Zahl zu verwandeln. Wie man auch bei den Variablen sieht ist immer ein :Int oder :String oder was auch immer angehängt, was genau dasselbe ist wie wenn du einen Type erstellst: Code: [AUSKLAPPEN] Type Spieler
Field x,y End Type Local var:Spieler Du kannst also auch jede Variable,... als Type(Objekt) sehen. Und was macht man um viele Variablen in eins zu bekommen? ![]() Wie du siehst sind Variablen also nichts anderes als Types und was es sonst noch so gibt in BMax Info: Eine Liste ist auch ein Objekt (Local liste:TList) ![]() |
||
Screenshot aus meinem ersten Projekt |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu der verwendung von Types in BMax kann ich dir das Tutorial von Jolinah empfehlen, da ist das mit den Methoden, Funktion, Vererbungen etc. gut beschrieben.
Mal ein Beispiel Um alle Instanzen eines Types zu Zeichnen Code: [AUSKLAPPEN] TDeinType.Update()
wird als Funktion aufgerufen und kann zum Beispiel so aussehen Code: [AUSKLAPPEN] Type TDeinType global typeliste:TList = Createlist() field typelink:TLink field x:int 'typelink in typelist automatisch eintragen Method New() typelink = typelist.AddLast(self) EndMethod ... function Create:TDeinType() dein:TDeinType = new TDeinType 'die Methode New() wird automatisch aufgerufen dein.x = 1 end function Function Update:TDeinType() 'oder auch :int, :float, :string etc, wenn du etwas zurückgeben möchtest for local dein:TDeinType = eachin TDeinType.typelist dein.x :+ 1 next End Function Die Methode kann nur von der jeweiligen Instanz aufgerufen werden, wohingegen die Funktion für den Type ansich gilt. Natürlich kannst du auch weiterhin mit normalen Funktionen arbeiten, aber ich persönlich finde es zum einen übersichtlicher und du kannst auch noch weitere schöne dinge damit machen, wenn du zB mit Abstract und Extends arbeitest. Am Anfang war es für mich auch sehr verwirrend, aber mit der Zeit lernt man gut damit um zu gehen und möchte es auch nicht mehr missen. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Seven |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sind schon mal nette Aussichten
Danke:) Wie steht es den mit Antialiasing in BMax? Ich bin kein Freund der Treppchen und würde Antialiasing lieber benutzen, als Unschärfeeffekte. Dann noch was zu MaxGui. Werden hier nur Standart Windows Themes benutzt, oder hat man auch die Möglichkeit eigene zu nutzen? |
||
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Antialiasing hat nichts mit BMax zu tun, wenn Dein Treiber AA erzwingt wird es in Max2D Apps auch verwendet.
MaxGUI basiert auf den GUI Systemen der Targets (OSX, Windows, Linux). Das heißt: Unter Linux sieht es aus wie Dreck weil es auf FLTK basiert, auf Windows sieht es aus wie Windows98 weil es garkeine Themes verwendet solange Du keine App Manifest hinzufügst und unter MacOS sieht es halt aus wie MacOS weil es auf Cocoa basiert. |
||
Farbfinsternis.tv |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na ja, unter Win 7 sieht MaxGUI nicht wie Win98 aus.
https://www.blitzforum.de/showcase/438/ |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
blackgecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber nur wenn man wie gesagt ein Manifest hinzufügt.
Die früheren Versionen von MaxGUI haben das automatisch gemacht, in der aktuellen muss man maxgui.xpmanifest einbinden. |
||
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. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Farbfinsternis und blackgecko
das höre ich zum ersten Mal. Könnt Ihr das näheres drüber erzählen? Manifest einbinden? Leider gibt es keinen einzigen weiteren Beitrag hier im Forum zu dieser Stichwort. Bei mir sehem meine eigenen BMax/MaxGui-Programme unter Win7 wie jedes andere Win-7 Programm aus. Wovon sprecht ihr hier genau? Themes? Bitte mehr Input! Das hört sich interessant an. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
- Zuletzt bearbeitet von Midimaster am Do, Jan 19, 2012 22:19, insgesamt einmal bearbeitet
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau dir doch mal die Source von MaxGUI.xpmanifest an! Dort wird nur eine Datei eingebungen (xpmanifest.o; gleicher Ordner), die, wie es aussieht, ein XML-Dokument ist. Bei der Suche nach "Manifest" solltest du alle Optionen finden...
ZEVS |
||
Seven |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann man es den durch BMax erzwingen lassen?
Immerhin kommt es in vielen Spielen vor. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seven, vielleicht solltest du etwas genauer werden, was du mit "Antialiasing benutzen" meinst.
Ich kenne keinen Befehl, der AA für ein Bild oder den ganzen Bildschirm einschaltet - aber wenn du z.B. direkt mit OpenGL arbeitest oder Shader benutzen willst, kannst du auch das machen. Erfordert u.U. etwas mehr Arbeit. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, mit OpenGL ist das ganze gar nicht so eine Arbeit, dank pub.glew kann man prinzipiell einfach die OpenGL Dokumentation lesen und danach vorgehen.
Das ganze würde in etwa so aussehen: BlitzMax: [AUSKLAPPEN]
Siehe dazu auch diesen Link. Anmerkung: Eventuell muss man es nicht jeden Schleifendurchlauf ausführen. Je nach dem muss man mit den einzelnen Flags spielen. Wenn man aber etwas mit AA behandeln will, und etwas anderes nicht, kommts sowieso aufs selbe hinaus. |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Dazu möchte ich auch noch erwähnen dass in BMax alle Variablen,Funktionen,... Objekte sind, die auch bestimmte Methoden(Mehtods) haben mit denen man diese verändern kann.
Absoluter unsinn! Funktionen sind _keine_ Objekte. Und einfache Datentypen wie int, float, short, double... usw. deffinitiv auch nicht. Strings und Arrays sind es. |
||
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Macintosh hat Folgendes geschrieben: Funktionen sind _keine_ Objekte.
BlitzMax: [AUSKLAPPEN] Function Derp:Object(id,data:Object,context:Object) ...und wer schon mal über "Hello World" hinauskam, wird wissen, dass jeder Datentyp in BMax ausser die Grunddatentypen ein Objekt ist. Nachtrag zu meinem AA Beispiel: Die verwendete Methode wird von fast keiner Grafikkarte nativ unterstützt, wie ich gestern feststellen musste. (Meine tat es, aus Zufall. Oder der Treiber, wie auch immer.) Stattdessen sollte man einfach MSAA benutzen. |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist ein Funktionszeiger und im Endeffekt nichts anderes als eine Speicheradresse (Int bzw. Byte Ptr). Aus Sicht von BMax meiner Meinung nach also kein Objekt.
Ausserdem könnte der Compiler bei SuperStrict ein Fehler ausgeben, du rufst Something mit den Parametern id, data und context auf, hast aber innerhalb der Funktion nirgends eine Variable namens id oder data. Nur context ist vorhanden ![]() |
||
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, das waren Artefakte aus der Tatsache, dass ich es aus .hooks.bmx rauskopierte.
Ein kleiner Hinweis: Obwohl sie Funktionspointer sind, haben sie trotzdem den Datentyp Object(). Das macht sie also zum Objekt. Sorry o/ Fix'd: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achtung: Object() =/= Object!
Object() ist eine Funktion mit Rückgabewert Object - aber immer noch eine Funktion und kein Object (du kannst z.B. kein ToString() auf einem Funktionszeiger aufrufen). Siehe im folgenden Testcode: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Edit: Sorry, hab den Post von Noobody nicht gesehen.
Da du dir so sicher warst, wollte ich einen Test mit Reflection machen, aber der Compiler gab bereits bei: Code: [AUSKLAPPEN] TTypeId.ForObject(funcPtr)
den Fehler aus: Unable to convert from 'Int(Int,Int)' to 'Object' ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group