Type System in BMAX

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

TimBo

Betreff: Type System in BMAX

BeitragSo, Nov 21, 2010 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

eine kurze Frage:
gibt es in Bmax die Möglichkeit Types zu erstellen, die sich im Mainloop selbst aufrufen.

Also Types oder Klassen egal, haben ja Methoden, z.B. das Zeichnen. Wenn ich also eine Klasse "Sterne" als Beispiel erstelle, die mir Sterne malt (in ein Canvas), musste ich sie bislang in B3D oder B+ immer selbst aufrufen.
DrawSterne(S.Stern)

kann ich das dank dem OOP jetzt automatisieren ?

ich stell mir das so vor

Sterne = New Sterne
Mainloop
End

Mainloop ist leer

Lg
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Xeres

Moderator

BeitragSo, Nov 21, 2010 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst es auf eine Zeile kürzen indem du eine Funktion schreibst, die das machst, was du möchtest:
TSterne.Update() - in der Hauptschleife.
Man könnte das über einen Funktions-Hook vll. auch automatisch an das Flip binden - aber das hab ich selbst noch nicht gemacht und kann dir nichts genaues dazu sagen.
Ich würde es auch bei einer Update-Funktion belassen...
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)

mpmxyz

BeitragSo, Nov 21, 2010 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einfachen Systemen spart man eher wenig Code.
einfaches Beispiel für Sterne:
BlitzMax: [AUSKLAPPEN]
SuperStrict
Framework brl.GLMax2D
Import brl.Random
Import brl.Timer
Import brl.PolledInput
Import brl.KeyCodes
Import brl.LinkedList

Type TStar
Global list:TList=New TList 'eine ganz normale globale Variable, welche aber von außen nur über "TStar.list" erreichbar ist
Field x:Float,y:Float
Field _link:TLink 'extreme Beschleunigung beim Entfernen des Listeneintrages, da nicht mehr nach dem Eintrag gesucht werden muss
Method New() 'wird direkt beim Erstellen aufgerufen
_link=list.AddLast(Self) 'Self ist das Objekt selbst
x=Rnd(0,800)
y=Rnd(0,600)
EndMethod
Method Destroy()
_link.Remove()
EndMethod
Method Draw()
DrawOval x-1,y-1,3,3
EndMethod
Function DrawAll()
For Local star:TStar=EachIn(list)
star.Draw()
Next
EndFunction
EndType

For Local i:Int=0 Until 1000 'Until 1000: bis vor 1000/bis 999
New TStar
Next

Graphics 800,600
Local timer:TTimer=CreateTimer(60)
Repeat
Cls
TStar.DrawAll()
WaitTimer(timer)
Flip 0
Until KeyHit(KEY_ESCAPE)
End

(ohne die tollen OOP-Möglichkeiten und ungetestet)

OOP zeigt hier erst seine Vorteile, wenn es mehrere Klassen gibt, die Gemeinsamkeiten besitzen.
Diese Gemeinsamkeiten kommen dann in die abstrakte Basisklasse. (Einmal implementieren, mehrfach nutzen!)
Die "konkreten" Objektklassen erweitern die Basisklasse und können somit auf die dort geschriebenen Implementierungen zurückgreifen. (Lese dir am Besten ein paar Tutorials oder OOP-Fragethreads durch.)

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Mo, Nov 22, 2010 18:53, insgesamt einmal bearbeitet

TimBo

BeitragSo, Nov 21, 2010 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
@ mpm, bei dir kommt ein Error
Missing Type Specifier (Method New wird makiert)

das mit dem hook hört sich gut an. ich schau es mir mal an Smile
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Hummelpups

BeitragMo, Nov 22, 2010 3:04
Antworten mit Zitat
Benutzer-Profile anzeigen
dann entferne die Zeile

BTW geile Idee den Link zu löschen anstatt die Liste nach der Instanz zu durchsuchen. Merk ich mir.
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

FireballFlame

BeitragMo, Nov 22, 2010 5:11
Antworten mit Zitat
Benutzer-Profile anzeigen
TimBo hat Folgendes geschrieben:
@ mpm, bei dir kommt ein Error
Missing Type Specifier (Method New wird makiert)
Ja, er hat eine versehentliche "Method New"-Zeile zu viel.

Aber wie schon von mpmxyz gesagt, OOP kommt dann richtig zum Zuge, wenn das ganze größer wird. Wenn Klassen voneinander abgeleitet sind, und die allgemeinsten Dinge in den obersten Klassen behandelt werden (du rufst dann nur noch TGameObject.UpdateAll() o.ä. auf, die leitets dann an die Unterklassen weiter etc.) Smile

Das mit dem Hook würd ich lassen, ich kann mir vorstellen, dass das eher unübersichtlich und fehleranfällig wird.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

TimBo

BeitragMo, Nov 22, 2010 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist ja echt geschickt das System.
kann mir jemand nur sagen, was FIRST LAST und AFTER in BMax funktioniert ?
Und bei "Verlinkungen" habe ich auch so meine Probleme. In B3D konnte man sowas machen:oops:

Type Schiff
field schutz.schild
End Type

und später dann sowas schreiben
Schiff\Schutz\Power = 1
das geht doch bestimmt in BMax auch oder ?

BTW: wie geht es, bmax-Code im Portal zu highlighten?

Lg
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

ToeB

BeitragMo, Nov 22, 2010 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Highlighten für Blitz3D geht ja mit dem Button unter der Zeile mit den Smileys das vorletzte rechts wo "BB" dransteht, Blitzmax eins daneben (ganz Rechts) wo "BM" dransteht Smile

Und natürlich geht das in BlitzMax, du hättest es einfach nur ausprobieren müssen Wink

Mit After und Last etc. Musst du mit den "TList" Einträgen arbeiten, aber da kenn ich mich selber noch nicht so aus Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

klepto2

BeitragMo, Nov 22, 2010 10:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier nochmal eine kleine abgeänderte Variante (der vollständigkeit halber), die ohne einen Funktionsaufruf im Mainloop auskommt (mehr oder wenger). In dem Beispiel wird eine Hookfunktion in den FlipHook eingebaut. Der FlipHook wiederum ruft intern die ihm zugewiesenen Funktionen auf bevor der Flip selbst ausgeführt wird. Für weitere Infos in der Hilfe im Kapitel "Modules/Events/Hook Functions" nachschauen. Hooks selber können nützlich sein, wenn du zb Module schreibst und sichergehen willst, das an einer Stelle auf jedenfall etwas ausgeführt wird. (zb bei Timing berechnungen).

BlitzMax: [AUSKLAPPEN]

SuperStrict
Framework brl.GLMax2D
Import brl.Random
Import brl.Timer
Import brl.PolledInput
Import brl.KeyCodes
Import brl.LinkedList
Import brl.Hook

Type TStar
Global list:TList=New TList 'eine ganz normale globale Variable, welche aber von außen nur über "TStar.list" erreichbar ist
Global Hook:Object( id:Int,data:Object,context:Object )

Field x:Float,y:Float
Field _link:TLink 'extreme Beschleunigung beim Entfernen des Listeneintrages, da nicht mehr nach dem Eintrag gesucht werden muss

Method New() 'wird direkt beim Erstellen aufgerufen
If Hook = Null Then
DebugLog "Update added to FlipHook"
Hook = TStar.DrawAll
AddHook(FlipHook,Hook)
End If

_link=list.AddLast(Self) 'Self ist das Objekt selbst
x=Rnd(0,800)
y=Rnd(0,600)
EndMethod

Method Destroy()
_link.Remove()
EndMethod

Method Draw()
DrawOval x-1,y-1,3,3
EndMethod

Function DrawAll:Object( id:Int,data:Object,context:Object )
For Local star:TStar=EachIn(list)
star.Draw()
Next
EndFunction

EndType

For Local i:Int=0 Until 1000 'Until 1000: bis vor 1000/bis 999
New TStar
Next

Graphics 800,600
Local timer:TTimer=CreateTimer(60)
Repeat
Cls
WaitTimer(timer)
Flip 0
Until KeyHit(KEY_ESCAPE)
End


First und Last sind in BMax Methoden von TList und funktionieren wie in bb. After selbst gibt es in BMax nicht. Das muss man über umwege über den TLink machen. ( link.NextLink().Value() ). Bei deiner anderen Frage versteh ich nicht so ganz was du meinst. Meinst du sowas?

BlitzMax: [AUSKLAPPEN]

For Local i:Int=0 Until 1000 'Until 1000: bis vor 1000/bis 999
Local star:TStar = New TStar
star.x = 12
star.y = 15
Next


BMX Highlighting geht im Forum am besten wenn du in der editbox auf den "BM"-Button klickst und dann deinen Code zwischen die Tags einfügst. Alternativ kannst du die Tags auch von Hand reinschreiben.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

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

FireballFlame

BeitragMo, Nov 22, 2010 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
TimBo hat Folgendes geschrieben:
Und bei "Verlinkungen" habe ich auch so meine Probleme. In B3D konnte man sowas machen:oops:

Type Schiff
field schutz.schild
End Type

und später dann sowas schreiben
Schiff\Schutz\Power = 1
das geht doch bestimmt in BMax auch oder ?


Geht in BMax genauso Wink
BlitzMax: [AUSKLAPPEN]
Type Schiff
Field Schutz:Schild
End Type

Schiff.Schutz.Power = 1
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

TimBo

BeitragMo, Nov 22, 2010 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ah cool , thx !!

was bedeuted aber in dem Code von klepto2 dieses
Object( id:Int,data:Object,context:Object )

das kommt 2 mal im Code vor obwohl ich z.B. nie den Integer ID finde Neutral
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

FireballFlame

BeitragMo, Nov 22, 2010 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist der Datentyp "Funktion, die die Parameter (id:Int,data:Object,context:Object) nimmt und ein Object zurückgibt".
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Macintosh

BeitragMo, Nov 22, 2010 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
kuerz: ein Function-pointer

TimBo

BeitragMo, Nov 22, 2010 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
und das Object( id:Int,data:Object,context:Object )
ist nur dafür gut, dass man eien Funktion erstellen kann, auf die man von außen zugreifen kann?
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Macintosh

BeitragMo, Nov 22, 2010 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
verstehe ich nicht.

Der Funktionszeiger zeigt auf die Funtion TStart.DrawAll
und er wird dem FlipHook "zugeteilt".
Der pointer wird dadurch jedes flip automatisch aufgerufen aufgerufen.

TimBo

BeitragMo, Nov 22, 2010 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
ich frage mich nur, warum das Hook-Objekt ne ID Data und Context hat ?
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Macintosh

BeitragMo, Nov 22, 2010 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
weil eine "Hook-funktion" das so haben muss, bzw. eine Funtionspointer der dem Hook übergeben wird muss eine vor-deffinierte liste an argumenten besitzen. sonst geht es nicht.
 

undefined

BeitragMo, Nov 22, 2010 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Fliphook sind diese zusätzlichen Parameter unbedeutend. Bei anderen Hooks können sie aber durchaus von Bedeutung sein (bei Eventhooks zb.).

Dein Anliegen würde ich im Übrigen nicht mit einem Fliphook lösen, es sei denn, Du möchtest Deine Sterne wirklich _immer_ gezeichnet haben (auch in den Menüs und jedem anderen Substate). Für Fliphooks gibt es nur wenige vernünftige Anwendungsmöglichkeiten. Dann aber ist es wirklich richtig praktisch! Beispiele dafür sind FPS-Counter, das Zeichnen eines Mousecursors oder die Abfrage immer gültiger Hotkeys (Screenshot ect).

TimBo

BeitragMo, Nov 22, 2010 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ok vielen Dank, das hat mir jetzt weitergeholfen. bin mal gespannt ob ich mit bmax zurecht komme oder ob ich mächtig auf die Schnauze fliege. Habe Angst vor OOP Rolling Eyes
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

BladeRunner

Moderator

BeitragMo, Nov 22, 2010 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Trau Dich! Es braucht ein wenig Zeit und Du wirst sicher auch ein oder zwei mal stolpern, aber wenn Du erstmal die Grundprinzipien verstanden und verinnerlicht hast wirst Du es nicht mehr missen wollen.

Viel Erfolg!
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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group