BlitzPlus Tutorial #1

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

Artemis

Betreff: BlitzPlus Tutorial #1

BeitragDo, März 17, 2005 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzPlus - Tutorial #1

Hallo und herzlich Willkommen zum BlitzPlus Tutorial.
Dieses Tutorial setzt Grundkenntnisse im 2D-Bereich voraus.
Wenn du diese nicht besitzt würde ich dir empfehlen, dir diese vorher anzueignen.

#1.1 Windows und Events

Wir wollen damit anfangen, dass wir erst ein einfaches Fenster erstellen.
Dies kann so aussehen:

BlitzBasic: [AUSKLAPPEN]
;Ein Fenster erstellen
Window = CreateWindow("Test-Fenster",100,100,400,300,0,15)


An dieser Stelle möchte ich die Parameter erklären die man der Funktion "CreateWindow" übergeben muss:

BlitzBasic: [AUSKLAPPEN]



Wenn wir unser Beispiel so lassen, dann wird ein Fenster erstellt, das Programm wird aber sofort wieder beendet. (Was natürlich heißt, das unser Fenster wieder gelöscht wird.)
Dafür müssen wir jetzt eine Schleife einbauen, welche solange wiederholt wird, bis eine Abbruchbedingung erfolgt.
Außerdem möchten wir jetzt mehrere Fenster erstellen, von denen eins als "Parent" ein anderes Fenster hat.
Dies können wir so lösen:

BlitzBasic: [AUSKLAPPEN]
;Drei Fenster erstellen
Window1 = CreateWindow("Fenster1 - Parent: Desktop",10,10,500,300,0,15)
Window2 = CreateWindow("Fenster2 - Parent: Desktop",10,400,500,300,0,15)
Window3 = CreateWindow("Fenster3 - Parent: Fenster1",400,200,500,300,Window1,15)
;Schleife ...
Repeat
;Wenn [Esc] gedrückt, dann Ende
If KeyHit(1) Then End
; ...für immer
Forever


Es ist jedoch unschön, da wir das Programm nur beenden können, wenn wir auf [Esc] drücken. Um es so hinzubekommen, das das Programm beendet wird, wenn der Benutzer auf den Schließen-Button ([X]) des Fensters drückt, müssen wir auf die "Events" zugreifen.
Diese Events sind Ereignisse die in einem Fenster stattfinden.
Um diese Events zu erkennen müssen wir in unsere Schleife den Befehl "WaitEvent()" einbauen. Dieser wartet entweder die Zeit die man ihm übergibt, oder bis ein Event eintritt.
Danach müssen wir abfragen, was für ein Event stattgefunden hat. Dafür benutzen wir den Befehl "EventID()".
Die Event-Identität des Schließ-Buttons bei einem Fenster ist Hexadezimal 803. Dies geben wir im Programm als $803 an.

BlitzBasic: [AUSKLAPPEN]
;Ein Fenster erstellen
Window = CreateWindow("Test-Fenster",100,100,400,300,0,15)
;Schleife ...
Repeat
;Event abfragen
WaitEvent(100)
;Identität des Events abfragen
Select EventID()
;Falls auf [X] geklickt wurde, dann wird beendet
Case $803 End
End Select
; ...für immer
Forever


Dies war der erste Teil des Tutorials, weitere sind in Arbeit.
  • Zuletzt bearbeitet von Artemis am Do, Jul 13, 2006 15:56, insgesamt einmal bearbeitet

BtbN

BeitragFr, Jul 22, 2005 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm.....
Hiert tut sich nichts!
Ich mach dann ma etwas weiter:

#1.2 Buttons und wie man sie abfragt

Hierzu greife ich das letze Beispiel aus dem vorherigen Kapitel auf:

BlitzBasic: [AUSKLAPPEN]
;Ein Fenster erstellen
Window = CreateWindow(\"Test-Fenster\",100,100,400,300,0,15)
;Schleife ...
Repeat
;Event abfragen
WaitEvent(100)
;Identität des Events abfragen
Select EventID()
;Falls auf [X] geklickt wurde, dann wird beendet
Case $803 End
End Select
; ...für immer
Forever


So, dem fügen wir zunächst einen Button hinzu:

BlitzBasic: [AUSKLAPPEN]
Button1 = CreateButton(\"Button\",5,5,100,25,Window)


Dieser code muss unter das Window = ....
Dies erstellt einen Button, in dem der Text "Button" steht, an Position X=5,Y=5 relativ zum Fenster 'Window'.
Der Button ist 100Pixel breit, und 25 Pixel hoch.
Der letzte Parameter gibt an, zu welcher Gruppe der Button gehören soll.
Das heißt, worauf er erscheinen soll. Dies ist in der Regel ein Fenster, also hier 'Window'.

Der gesammte code sähe dann so aus:

BlitzBasic: [AUSKLAPPEN]
;Ein Fenster erstellen
Window = CreateWindow(\"Test-Fenster\",100,100,400,300,0,15)
;Unsern Button erstellen
Button1 = CreateButton(\"Button\",5,5,100,25,Window)
;Schleife ...
Repeat
;Event abfragen
WaitEvent(100)
;Identität des Events abfragen
Select EventID()
;Falls auf [X] geklickt wurde, dann wird beendet
Case $803 End
End Select
; ...für immer
Forever


Dann müste man ein Fesnter mit einem Button drinne haben.

So weit so gut, aber wenn wir jetzt wollen, dass etwas passiert, wenn wir den Button drücken, geht das so:

BlitzBasic: [AUSKLAPPEN]
;Ein Fenster erstellen
Window = CreateWindow(\"Test-Fenster\",100,100,400,300,0,15)
;Unsern Button erstellen
Button1 = CreateButton(\"Button\",5,5,100,25,Window)
;Schleife ...
Repeat
;Event abfragen
WaitEvent(100)
;Identität des Events abfragen
Select EventID()
;Falls auf [X] geklickt wurde, dann wird beendet
Case $803 End
;Wenn auf irgend einen Button gedrückt wird, wird dieses Event ausgelöst
Case $401
;da ja ein belibeiger Button gedrück worden seien könnte,
;muss man weiter sieben:
source$ = EventSource()
;hierrin steht nun der NAME der variable des Buttons, der gedrückt wurde
;um zu überprüfen, welcher Button gedrückt wurde, noch ein Select:
Select source$
Case Button1 Print \"Unser button wurde gedrueckt!\" ;Sollte wohl klar sein Wink
End Select
End Select
; ...für immer
Forever


So, nun kommt, wenn ihr auf den Button klickt, eine Dos-Box, in der steht, dass unser Button gedrückt wurde.
Um zu überprüfen, ob das nicht bei jedem Button passiert, könnt ihr ja einfach noch einen Button erstellen(natürlich muss die variable, in der ihr ihn speichert, anders heißen, als die erste, und es wäre auch gut, wenn er an einer anderen Position ist), und auf ihn klicken.
Es wird nichts passieren.



To be continued.


Mfg,
BORNtobeNAMELESS
  • Zuletzt bearbeitet von BtbN am So, Nov 27, 2005 11:02, insgesamt einmal bearbeitet

bruce185

BeitragSo, Nov 27, 2005 1:59
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich finde dein tut gut, ist auch gut erklärt finde ich Very Happy
kannst ja noch welche schreiben wenn du willst, ich werde mich auch freuen auf die nächsten tutorials Very Happy

gruss Andreas

Eingeproggt

BeitragFr, März 16, 2007 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus mehr oder weniger aktuellem Anlass grab ich diesen Thread wieder aus um ihn zu ergänzen

#1.3 Texteingabe und Abfrage

Auch ich möchte mich auf das bisherige Gerüst stützen:
Code: [AUSKLAPPEN]

;Ein Fenster erstellen
Window = CreateWindow("Test-Fenster",100,100,400,300,0,15)
;Unseren Button erstellen
Button1 = CreateButton("Button",5,5,100,25,Window)
;Schleife ...
Repeat
        ;Event abfragen (da ich die Klammern leer lasse, wartet Blitz so lange, bis irgendwas geschieht)
        WaitEvent()
        ;Identität des Events abfragen
        Select EventID()
                ;Falls auf [X] geklickt wurde, dann wird beendet
                Case $803 End
                ;Wenn auf irgend einen Button gedrückt wird, wird dieses Event ausgelöst
                Case $401
                  ;da ja ein belibeiger Button gedrück worden seien könnte,
                  ;muss man weiter sieben:
                  source$ = EventSource()
                  ;hierrin steht nun der NAME der variable des Buttons, der gedrückt wurde
                  ;um zu überprüfen, welcher Button gedrückt wurde, noch ein Select:
                  Select source$
                   Case Button1 Print "Unser button wurde gedrueckt!" ;Sollte wohl klar sein 
                  End Select
        End Select
; ...für immer
Until KeyHit(1)


Und jetzt wirds interessant:
Wir erzeugen ein Textfeld (einzeilig), die Parameter sind dieselben wie bei den Buttons, nur dass keine Beschriftung angegeben werden kann / muss
Code: [AUSKLAPPEN]

txtfield=CreateTextField(5,40,300,20,Window)

;Und manche wollen den Inhalt bestimmen.
;Dazu nehme man den Befehl SetGadgetText, der als Parameter das Gadget (=Ding, Objekt) und den Text verlangt
Code: [AUSKLAPPEN]

SetGadgetText txtfield,"Hallo"

;Soweit so gut. Nun kann der Benutzer in das Textfeld reinhämmern was er will und erzeugt dabei jedesmal einen $401-Event (das nur nebenbei erwähnt).
;Wir haben aber keine Ahnung, was der Benutzer da eingibt. Um das herauszufinden nehme man TextFieldText
Code: [AUSKLAPPEN]

eingabe$=TextFieldText(txtfield)

;Diese Errungenschaften setze ich in den Hauptcode ein:
Code: [AUSKLAPPEN]

;Ein Fenster erstellen
Window = CreateWindow("Test-Fenster",100,100,400,300,0,15)
;Unseren Button erstellen
Button1 = CreateButton("Button",5,5,100,25,Window)
;Textfeld erstellen
txtfield=CreateTextField(5,40,300,20,Window)
;Gleich einen Startwert reinschreiben
SetGadgetText txtfield,"Hallo"
;Schleife ...
Repeat
  ;Event abfragen (da ich die Klammern leer lasse, wartet Blitz so lange, bis irgendwas geschieht)
  WaitEvent()
  ;Identität des Events abfragen
  Select EventID()
    ;Falls auf [X] geklickt wurde, dann wird beendet
    Case $803 End
    ;Wenn auf irgend einen Button gedrückt wird, wird dieses Event ausgelöst
    Case $401
      ;da ja ein belibeiger Button gedrück worden seien könnte,
      ;muss man weiter sieben:
      source$ = EventSource()
      ;hierrin steht nun der NAME der Variable des Buttons, der gedrückt wurde
      ;um zu überprüfen, welcher Button gedrückt wurde, noch ein Select:
      Select source$
        Case Button1
          ;Bei Klick auf den Button den eingegebenen Text anzeigen. (Wieder in der Konsole)
          Print TextFieldText(txtfield)
      End Select
  End Select
; ...für immer
Forever


Und nun gibt es noch "TextArea". Diese bietet mehr Funktionen, wie zB Schriftart einstelen und ist zudem mehrzeilig.
Sie funktioniert ähnlich dem TextField, mit folgenden Änderungen:
-) CreateTextField -> CreateTextArea
-) TextFieldText -> TextAreaText
(Ganz wichtig! wenn man zB TextFieldText auf eine TextArea anwendet, kommt ein Runtime-Error!)

So. Das wäre es von meiner Seite. TextArea hab ich stark abgekürzt, hoffe das stört nicht.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Vidde

BeitragMi, Jul 15, 2009 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
trotz drei autoren ein leicht verständliches tut.

da aber auf dem gebiet BlitzPlus tuturialmangel herscht, wäre es toll, wenn sich wieder jemand erbarmt für uns noobs dieses hier weiterzuführen.

vielen dank bis hierher.
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.

ozzi789

BeitragMi, Jul 15, 2009 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm ja tuturials gibts nicht viele, werde vlt mal weiter machen wenn der Bedarf besteht..

Edit:


#1.4 Der Canvas&Grafisches

Ein Canvas solltet ihr euch wie eine Leinwand vorstellen, ein Rechteck auf dem man alle Blitz2D Befehle anwenden kann!

So wird er erstellt:
Code: [AUSKLAPPEN]
name = CreateCanvas(XPosition,YPosition,Höhe,Breite,Fenster)

Wobei Fenster für das Fenster steht auf dem er erscheinen soll.

Nun setzt man mit
Code: [AUSKLAPPEN]
SetBuffer CanvasBuffer(canvas)

fest das alle Grafikausgaben auf dem ausgewählten Canvas gezeichnet werden sollen.

Um das ganze auch noch für den User sichtbar zu machen Flipen wir (fast) wie gewohnt, nämlich mit
Code: [AUSKLAPPEN]
FlipCanvas can

Man kann natürlich auch mehrere Canvas objekte erstellen, aber achtet dabei stehts auf die Performance! Wink

Auch die Mausevents auf einem Canvas können ausgelesen werden (siehe Code)
Code: [AUSKLAPPEN]
$201 oder MouseX(Name des Canvas)/MouseY(Name des Canvas)




Zu den Panels, ein Panel ist ein Objekt zum Gruppieren weiterer Objekte.
Mit der tollen möglichkeit ein Bild (oder eine Farbe) anzuzeigen.

So wird ein Panel erstellt:
Code: [AUSKLAPPEN]
 Panel=CreatePanel (x, y, breite, höhe, gruppe [,style])

Für den Style gibt man entweder 1 (standart) oder 65536 ein.
Das 65536 zeichnet das Panel ohne Ramen.

Merke:
Ein Panel braucht weniger Leistung als ein Canvas, ist es nun nur ein Bild ist ein Panel (und dem Style 65536) zu bevorzugen.

Nun wollen wir anhand unserem Grundgerüst gleich mal den Canvas und die Panels testen

BlitzBasic: [AUSKLAPPEN]
;Fenster erstellen
Window = CreateWindow("Canvas und Panels",100,100,500,400,0,15)
;Canvas erstellen
can = CreateCanvas(0, 40, 150,150, Window)
;Die Grafikausgabe auf den Canvas einstellen
SetBuffer CanvasBuffer(can)
;Unseren Button erstellen
Button1 = CreateButton("Zeichne!",5,5,100,25,Window)
Button2 = CreateButton("Fahre/Klicke über den Canvas und ich zeige die Koordinaten",0,205,360,25,Window)

;Panel erstellen
panel = CreatePanel(180, 0, 100, 100, Window,1)
button = CreateButton("Hier wäre ein Bild", 0, 0, 100, 50, panel) ;button in unserem Panel erstellen
SetPanelImage panel, "c:\replaceme.bmp" ;Bild in das Panel zeichnen, wird getilet wenn das Bild zu klein ist

panel2 = CreatePanel(300, 0, 100, 100, Window,65536)
button = CreateButton("Hier nur Farbe", 0, 0, 100, 50, panel2)
SetPanelColor panel2, 123,231,123 ;Zeichnet den RGB Wert in das Panel

;Schleife ...
Repeat



;Event abfragen (da ich die Klammern leer lasse, wartet Blitz so lange, bis irgendwas geschieht)
WaitEvent()

SetGadgetText(Button2,MouseX(can)+" "+MouseY(can)); Maus koordinaten von Canvas auslesen
;Identität des Events abfragen
Select EventID()
;Falls auf [X] geklickt wurde, dann wird beendet
Case $803 End
;Wenn auf irgend einen Button gedrückt wird, wird dieses Event ausgelöst
Case $201
If EventSource() = can Then
Notify "Maushit auf: "+EventX()+" x "+EventY()
EndIf
Case $401
;da ja ein belibeiger Button gedrück worden seien könnte,
;muss man weiter sieben:
source$ = EventSource()
;hierrin steht nun der NAME der variable des Buttons, der gedrückt wurde
;um zu überprüfen, welcher Button gedrückt wurde, noch ein Select:
Select source$
Case Button1 ;Wenn unser Zeichne! knopf gedrückt wird
Cls ;Viel zeug zeichnen
Color 255,255,128
Text 0,0,"Nom nom Cookies"
For i = 1 To 10
Color Rand(1,255),Rand(1,255),Rand(1,255)
Rect Rand(1,100),Rand(1,100),Rand(1,50),Rand(1,50)
Next
FlipCanvas can ;Den Canvas flippen (wichtig!)
End Select
End Select
; ...für immer
Until KeyHit(1) ;bis keyhit (ESC)
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
  • Zuletzt bearbeitet von ozzi789 am Mi, Jul 15, 2009 18:10, insgesamt 7-mal bearbeitet
 

aletes

BeitragMi, Jul 15, 2009 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei "Jetzt lerne ich Spiele Programmieren mit BlitzBasic" ist auch ein BlitzPlus-Kapitel dabei(Jaa, ich habe das Buch bekommen, aber leider ohne CD...). Da ist das ganz gut erklärt. Naja, mal schauen. Funktioniert BlitzPlus auch unter Linux Ubuntu? Wollt ich gern wissen, bevor ich mir davon mal dei Demo hole Question

Nicdel

BeitragMi, Jul 15, 2009 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, tut es nicht. Nur BlitzMax funktioniert unter Ubuntu.

Edit: Für BMax gibt es ja auch die MaxGUI.
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
  • Zuletzt bearbeitet von Nicdel am Mi, Jul 15, 2009 17:45, insgesamt einmal bearbeitet

Jo0oker

BeitragMi, Jul 15, 2009 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, tut es so ohne weiteres nicht, da es die WinAPI nutzt...

kA, wie das mit Wine ist.

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group