|
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
|