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

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? :D

Verfasst: 20.12.2008 21:25
von Mok
Kaeru Gaman hat geschrieben:

Code: Alles auswählen

[...]
TimeCounter - 1           ; runterzählen
[...]
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:

Code: Alles auswählen

[...]
TimeCounter - 1           ; runterzählen
[...]
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.