Seite 2 von 5
Verfasst: 20.12.2008 20:30
von Mok
@Kaeru:
Danke wegen dem Codeschnippsel, aber ich weiß nicht, wie ich das machen soll, dass man den Sound nur 1x hört, und zwar dann, wenn man drückt (auch wenn man länger oben bleibt)
[Edit]
Bei dem Code kann ich genau 1x schießen, ich sollte aber nur 1x pro Mausklick cshießen
[/Edit]
[Edit2]
Ich hab jetzt 'erlaubnis' hinzugefügt, dass das ganze jetzt so aussieht:
Code: Alles auswählen
If MLB = #Clicked And erlaubnis = #True
PlaySound(050)
schuesse + 1;
erlaubnis = #False
EndIf
If MLB = #Released
erlaubnis = #True
EndIf
funzen tuts noch immer nicht
[/Edit2]
@kswb:
versteh ich nicht ganz... Ich hab das mit den Nachladevariablen schon oft durchprobiert, aber es funzt nicht ganz
Ich hab eine Variable "schuesse", in die wird gespeichert, wie viele Schüsse man getätigt hat, ist die Variable 10, so hört man den Sound, aber man kann währenddessen trotzdem schießen

Da die Zielscheiben jedoch weiterfliegen sollen, könnte ich nicht mal Delay() verwenden
Verfasst: 20.12.2008 20:44
von kswb73
Ich hab dir mal ein Beispiel geschrieben wie ich das meine. Die Zeilen wo ;a) hinter steht sind die möglichkeit wo die Variabel jedes mal um 1 gesenkt wird und da wo ;b) hinter steht ist die möglichkeit mit ElapsendMilliseconds()
Code: Alles auswählen
If MouseLeft=1 And Schusse>0 ;bei Kaeru Gaman müsste statt MouseLeft=1 MLB=#Clicked stehen
Schusse-1
Fire()
EndIf
If KeyboardPushed(#Key_Reload) And Schusse=0 And Reload=0
reload=#ReloadTime;a)
;ReloadStart=ElapsedMilliseconds;b)
PlaySound(#Sound_Reload
Schusse=0
EndIf
If Reload>0;a)
;if ReloadStart and ReloadStart-ElapsedMilliseconds>#ReloadTme ;a)
;ReloadStart=0 ;b)
;Schusse=0 ;b)
Reload-1 ;a)
If Reload=0 ;a)
Schusse=10 ;a)
EndIf ;a)
EndIf
Verfasst: 20.12.2008 20:56
von Mok
was für eine Variable und mit welchem Standardwert soll Reload darstellen?
Verfasst: 20.12.2008 20:59
von kswb73
Das ist die Variabel in der gespeichert ist wie lange noch nachgeladen wird. Sie ist standartmäßig 0, was heißt ist nachgeladen.
Ist sie größer als 0 wird sie bei der dritten abfrage um eins gesenkt. Ist sie dannach wieder 0 und nur dann, wird Schusse wieder hochgesetzt. Wenn Reload ganz normal 0 ist passisert nichts.
Der Sinn dahinter ist das man wenn man nachlädt keine Schüsse hat und deshalb nicht feuern kann.
PS: beim Nachladen noch Schusse=0 eingefügt.
Verfasst: 20.12.2008 21:10
von Mok
Es war sehr nett von dir, aber ich habe keinerlei nützliche Ergebnisse bekommen

Verfasst: 20.12.2008 21:21
von Kaeru Gaman
mein vorschlag:
Code: Alles auswählen
; *** init
Magazine = 6 ; anzahl schüsse pro magazin
ShotsLeft = Magazine ; nachladen
; *** in der Schleife
TimeCounter - 1 ; runterzählen
If TimeCounter <= 0 ; nur auf Mausklick reagieren wenn abgelaufen
If MLB = #Clicked
If ShotsLeft > 0
; *** hier schießen: sound etc.
ShotsLeft -1 ; einen schuss abziehen
TimeCounter = 10 ; schießen dauert 10 tics
Else
; *** hier nachladen: sound etc.
ShotsLeft = Magazine ; nachladen
TimeCounter = 20 ; nachladen dauert 20 tics
EndIf
EndIf
EndIf
steigst du dahinter?
... oder soll ichs detailliert erklären?

Verfasst: 20.12.2008 21:25
von Mok
Kaeru Gaman hat geschrieben:
Wofür steht TimeCounter?
Verfasst: 20.12.2008 21:33
von kswb73
Villeicht hilft dir ein funktionierendes Beispiel weiter. MessageBeep_(0) und Beep_(1000,50) sind nur Beispieltöne um das Beispiel anschaulicher zu machen.
Code: Alles auswählen
InitSprite()
InitMouse()
InitKeyboard()
Schusse=10
#ReloadTime=100
ExamineDesktops()
OpenScreen(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),"Schießen")
Repeat
If IsScreenActive()
ClearScreen(0)
ExamineKeyboard()
ExamineMouse()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
If MouseButton(1)
MouseLeft+1
Else
MouseLeft=0
EndIf
If MouseLeft=1 And Schusse>0
Beep_(1000,50)
Schusse-1
EndIf
If KeyboardReleased(#PB_Key_Space) And Reload=0
MessageBeep_(1)
Reload=#ReloadTime
Schusse=0
EndIf
If Reload>0
Reload-1
If Reload=0
Schusse=10
EndIf
EndIf
StartDrawing(ScreenOutput())
DrawText(10,10,Str(MouseLeft))
DrawText(10,30,Str(Schusse))
DrawText(10,50,Str(Reload))
StopDrawing()
EndIf
FlipBuffers()
ForEver
Verfasst: 20.12.2008 21:35
von Mok
Beep_() funzt auf meinem Notebook nicht.
Verfasst: 20.12.2008 21:42
von Kaeru Gaman
Mok hat geschrieben:Kaeru Gaman hat geschrieben:
Wofür steht TimeCounter?
das ist die Anzahl
Tics, also Gameschleifen-Durchläufe.
das richtet sich nach deiner Framerate bzw. nach deinem Timer, wenn du einen einbaust.
in diesem Fall dient das dazu, erst nach einer bestimmten anzahl durchläufe wieder auf die Maus zu reagieren.