QBASIC-Club
Home - QBasic - Tutorails - DirectQB


Weitere Teile:
DirectQB Teil 1 - Installation
DirectQB Teil 2 - Primitive Drawroutinen
DirectQB Teil 3 - Mouse und Sound
DirectQB Teil 4 - Sprites
DirectQB Teil 5 - Keyboard

DirectQB Teil 3  - Mouse und Sound
 

Also, wie versprochen, hier ist die Fortsetzung die DirectQB Tuturials.
Dieses Mal geht es um die wirklich wichtigen Dinge, die DirectQB zu bieten hat und die in einem gutem Spiel auf keinen Fall fehlen sollten. Es geht um Mouse und Sound.
Beginnen  wir einfach mit der Mouse.
Die Mouse wird automatisch beim Initialisieren von DirectQB  mit gestartet. Es gibt also keinen Befehl der die Mouse extra startet.
Aber es gibt eine Funktion die erkennt ob der Computer überhaupt eine Mouse besitzt. Es ist DQbMouseDetected. Wenn keine Mouse installiert ist liefert diese Funktion den Wert 0 zurück.
Um nun die Mouse sichtbar zu machen, gibt es den Befehl DQBMouseShow.
Der Mousezeiger erscheint nun und kann mit der mechanischen Mouse über den Bildschirm bewegt werden.
Aber der Mousezeiger alleine bringt es noch nicht, da ebenfalls dessen Position auf dem Bildschirm wichtig ist.
Mit den Funktionen DQBMouseX und DQBMouseY kann man nun diese Position bestimmen. Um die Mouse wieder zu verdecken gibt es diesen Befehl DQBMouseHide.
Wenn es notwendig ist, die Mouse auf eine Bestimmt Position zu setzten benutz man am besten den Befehl DQBSetMousePos X, Y
X und Y sind die jeweiligen X- und Y – Koordinaten.
Wenn man hingegen der Mouse den Bewegungsbereich einschränken will setzt man den Befehl DQBsetMouseRange X1, Y1, X2, Y2
X1 und Y1 sind die Koordinaten der linken oberen Ecke und X2 und Y2 sind die Koordinaten der rechten unteren Ecke.
Um alle Einstellungen rückgängig zu machen gibt es den Befehl DQBresetMouse

Hier ein Beispiel:

'$INCLUDE:'DIRECTQB.BI'

' DirectQB wird initialisiert mit einem ExtraLayer, ohne Sound und EMS
IF DQBinit(1, 0, 0) THEN DQBclose: PRINT DQBerror$: END

' Test ob Mouse da ist
IF NOT DQBmouseDetected THEN
    ' Mouse wurde nicht gefunden
    PRINT "Dieses Programm benötig eine Mouse!"
    DQBclose
    END
END IF

DQBinitVGA

' Setzt alle Werte zurück
DQBresetMouse

' Setzte neue Reichweite für Mouse
DQBsetMouseRange 6, 6, 314, 148

DO
    ' lösche Layer 1
    DQBclearLayer 1

    DQBbox 1, 5, 5, 315, 149, 32

    ' Einige Extra Informationen
    DQBprint 1, "Taste drücken zum Beenden ", 0, 170, 40

    ' Mouseinformationen
    Info$ = "Mouse ist bei " + str$(DQBmouseX) + "," + str$(DQBmouseY)
    Info$ = Info$ + " - Buttons: " + str$(DQBmouseLB) + " " +    str$(DQBmouseRB)

    DQBprint 1, Info$, 0, 180, 40

    ' Verdecke Mouse
    DQBmouseHide

    ' Kopiere Layer 1 auf den Bildschirm
    DQBcopyLayer 1, VIDEO

    ' Zeige Mousezeiger wieder
    DQBmouseShow

LOOP WHILE INKEY$ = ""

' Programm beenden
DQBclose
 

Da der Mousezeiger von DirectQB nicht besonders gut aus sieht hat man auch die Möglichkeit das Aussehen den Zeigers zu verändern. Mit dem im DirectQB mitgelieferten DQBTool kann man selbst Mousezeiger malen.
Und mit diesem kleinen Programm kann man diesen Mousezeiger in sein Spiel einfügen.

DIM SHARED cursor AS STRING * 64

OPEN "mouse.cur" FOR BINARY AS #1
IF LOF(1) <> 64 THEN CLOSE #1
GET #1, , cursor: CLOSE #1

DQBsetmouseshape 0, 0, cursor

DQBsetmouseshape ist der Befehl um den neuen Mousezeiger einzusetzen.

Kommen wir nun zum Sound.
DirectQB bietet eine nicht ganz zu verachtendes Soundlibrarie, es können bis zu 32 Sound parallel neben einander abgespielt werden. Die Soundsampels selber, können in den RAM geladen werden um sie aus diesem dann ab zuspielen. Ein Soundsample darf aber leider immer nur 64KB groß sein.
Um den RAM, beim Initialisieren der DQB Librarie, frei und zum Benutzen bereit zu machen, wird der zweite Wert bei DQBInit eingesetzt. Hier ein Beispiel:
Dummy& =  DQBInit (0, 4, 0)
In diesem Fall wurde von DirectQB kein Layer aber 4 * 64KB Soundablageplatz – so genannter Slot - bereit gestellt.
In diese Slots können nun Soundsample gespeichert werden.
Das erfolgt durch die Funktion:
DQBloadSound (Slot, SoundDatei)
Slot gibt die Nummer des Slots an in der das Sound gespeichert werden soll. Wenn wie im vorher gehenden Beispiel 4 Slots zur Verfügung gestellt wurden, kann die Slotnummer 1 bis 4 betragen.
SoundDatei ist der Name der WAV-Datei die geladen werden soll.
Da DQBloadsound eine Funktion ist, liefert sie natürlich einen Wert zurück..
Wenn der Wert 0 ist, dann ist alles in Ordnung  und die Wav-Datei konnte erfolgreich geladen werden
Wenn der Wert 1 ist, konnte die Wav.Datei nicht gefunden werden.
Ein Lesefehler wird mit dem Wert 2 gemeldet.
Wenn etwas mit der Datei selbst nicht in Ordnung ist wird der Wert 3 zurück geliefert.
Wert 4 gibt an das das Soundformat nicht unterstützt wird und der Wert 5 das die Datei größer ist als 64KB.
Wenn es die Slotnummer nicht gibt kommt der Wert 6.

Das wichtigste ist aber nun das Abspielen des Sound, welches mit dem Befehl DQBplaySound erfolgt.
Vorher muß aber erst der Soundblaster aktiviert werden.
Die Funktion DQBinstallSB ist dafür verantwortlich.
Für diese Information werden viele Informationen benötigt.

DQBinstallSB (Volumentabelle, Stimmen, Frequenz, BaseAddr, IRQ, DMA)

Volummentabelle  stellt man erstmal auf FALSE. Dazu kommen wir später noch.
Stimmen gibt an, wie viele Sounds nebeneinander abgespielt werden können.
Frequenz ist die Standardfrequenz.
BaseAddr gibt den Port des Soundblasters an. Nomalerweise ist das H220.
IRQ und DMA stellt man am besten auf AUTO, dann kann man nichts falsch machen.

Ein Beispiel:

IF DQBinstallSB(FALSE, 2, 22050, &H220, AUTO, AUTO) THEN
    ' FEHLER
    DQBclose
    END
END IF

In diesem Beispiel wurden 2 Stimmen aktiviert und der Soundblaster auf 22050 kHz eigestellt.
22050 kHz ist der höchste Wert mit der besten Klangqualität. Es geht natürlich auch 11025 kHz odedr 8000 kHz.
DQBinstallSB liefert einen wert der ungleich 0 ist wenn estwas nicht stimmt.

Um nun den Sound abzuspielen  benutzt man:
DQBplaysound Slot, Stimme, Frequenze, Wiederholung

Slot ist die Slotnummer, also welcher Sound abgespielt wird.
Stimme ist die Nummer der Stimme, also die Spur auf der der Sound abgespielt werden soll.
Frequenze ist die Frequenze mit der dieser Sound abgespielt werden soll.
Wenn man für Wiederholung 0 einsetzt wird der Sound nur einmal abgespielt.
Wenn man 1 angibt, wird der Sound immer wiederholt.
Stoppen kann man den Sound dann nur mit
DQBstopVoice Stimme
Wobei Stimme die Nummer der Spur ist welche gestoppt werden soll.
Um beim Beenden des Programms den Soundblaster wieder zu deaktivieren
Benutzt man einfach DQBremoveSB

Beispiel:

'$INCLUDE:'DIRECTQB.BI'

IF DQBinit(0, 1, 0) THEN DQBclose: PRINT DQBerror$: END

' Starte Soundblaster auf 220h als Base Adresse
' finde IRQ und DMA selbständig. 2 Stimmen werden initialisiert
' Die Samplingrate ist 22 kHz
IF DQBinstallSB(FALSE, 2, 22050, &H220, AUTO, AUTO) THEN
    ' Fehler
    DQBclose
    END
END IF

' Fragt den Benutzer nach der SoundDatei
INPUT "Welche WAV soll geladen werden: ", File$

' Lädt Sound in den Speicher
IF DQBloadSound(1, File$) THEN DQBclose: PRINT „Fehler beim laden: END

PRINT "Taste drücken zum beenden..."

' Spielt den Sound 1 mit 22kHz auf Spur 2 einmal
DQBplaySound 1, 2, 22050, 0

WHILE INKEY$ = "": WEND

DQBremoveSB

DQBclose
 
 
 
 
 

Webmaster: Soeren Dressler