Ziel verlangsamen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Budikotch

Betreff: Ziel verlangsamen

BeitragDo, Dez 30, 2010 1:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute.

Vielleicht ist die Überschrift nicht ganz so passend,aber momentan wollt ich mal die Mausabfrage testen und dazu wollte ich ein kleines Klick-Spiel coden.Nun hab ich das Problem,dass das "Ziel" viel zu schnell ist um es zu erwischen.
Ich denke das man da MilliSecs() braucht,doch wie sollte ich es einsetzen ?

Der Code
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2

SetBuffer BackBuffer()
timer = CreateTimer(30)
SeedRnd MilliSecs()


;---------------------------------------
Global Ziel = LoadImage("gfx\Ziel.png")
MaskImage Ziel,255,0,255

Global Maus = LoadImage("gfx\Maus.png")
MaskImage Maus,255,0,255

Global Hintergrund = LoadImage("gfx\hintergrund.png")
;----------------------------------------


Global Punkt = 0

Repeat

Cls


DrawImage Hintergrund,0,0
Text 0,0, Punkte + " Punkte"



X = MouseX()
Y = MouseY()

DrawImage Maus,X,Y
DrawImage Ziel, Rand(0, 800) ,Rand(0, 600)



If MouseDown(Ziel + 1) Then Punkt = 1



If Punkt = 1 Then
Punkte = Punkte + 1
Else
Punkte = Punkte - 1
EndIf



WaitTimer(timer)
Flip 0
Until KeyHit(1)
End

Thunder

BeitragDo, Dez 30, 2010 1:14
Antworten mit Zitat
Benutzer-Profile anzeigen
- Gib dem Ziel Positionsvariablen (z.B. ziel_x und ziel_y).
- Mit Millisecs ist es sicherlich möglich. Das ginge dann so: Setze für ziel_x und ziel_y zufällige Werte, speichere dann die aktuelle Zeit in eine Variable (z.B. letztezeit). Ab jetzt ändere ziel_x und ziel_y nur, wenn zwischen Millisecs() und letztezeit ein Unterschied von z.B. 1000 ist. Dann würde das Ziel jede Sekunde wechseln.

BlitzBasic: [AUSKLAPPEN]
If MilliSecs()>letztezeit+1000 Then
ziel_x=Rand(0,800)
ziel_y=Rand(0,600)
letztezeit=MilliSecs()
EndIf


Du musst dann natürlich das Bild auch an den Positionen ziel_x und ziel_y zeichnen.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

Budikotch

BeitragDo, Dez 30, 2010 1:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Ziel ist deutlich langsamer geworden Smile Was die Punkteanzahl angeht ändert sich garnichts.
Die Punkte werden weiterhin rasend schnell abgezogen ohne das ich was machen kann.

Thunder

BeitragDo, Dez 30, 2010 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hab ich ganz übersehen. Du hast da einen falschen Parameter bei MouseDown.
MouseDown prüft nur, ob eine Maustaste gedrückt wurde. Um zu prüfen ob die Maus im Ziel ist, verwende MouseX() und MouseY()

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

M2M

BeitragDo, Dez 30, 2010 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Also,

Code: [AUSKLAPPEN]
If MouseX() > ziel_x And MouseX() < ziel_x + ImageWidth(Ziel) And MouseY() > ziel_y And MouseY() < ziel_y + ImageHeight(Ziel)
   If MouseDown(1)
      ;ziel getroffen
   EndIf
EndIf


Die Abfragen überprüfen ob MouseX() (x-Koordinate der Maus) größer als ziel_x (x-Koordinate des Ziels) Und MouseX() kleiner als ziel_x + die Breite (Width) des Bildes (Image) Ziel ist. Also falls dein Bild aktuell an x-Position 32 gezeichnet wird, dann befindet sich der linke Rand des Bildes eben an Position 32 und der rechte Rand eben x-Pixel weiter rechts, wobei x die Breite (ImageWidth) des Bildes Ziel ist.
Anschließend wird das selbe Spiel für die y-Koordinate der Maus geprüft. .. Und MouseY() (y-Koordinate der Maus) ist größer als ziel_y (y-Koordinate des Ziels) Und MouseY() ist kleiner als ziel_y + die Höhe des Bildes Ziel (ImageHeight)

Falls alle 4 Bedingungen zutreffen (Pflicht, da sie mit Und miteinerander verknüpft wurden!), wird der nachfolgende Code ausgeführt. In diesem Fall:

If MouseDown(1)

MouseDown prüft ob eine Maustaste gedrückt wird (also auch über einen längeren Zeitraum). Dabei sind folgende Tasten prüfbar:
MouseDown(1) - linke Maustaste gedrückt
MouseDown(2) - rechte Maustaste gedrückt
MouseDown(3) - mittlere Maustaste gedrückt

Es wird also geprüft, ob die linke Maustaste gedrückt wird. Falls diese Bedingung eintritt, gilt das Ziel als getroffen.
 

Budikotch

BeitragDo, Dez 30, 2010 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal Mousdown(1) umgetauscht zu MouseHit(1) weil sonst bekommt man zuviele Punkte wenn man mit der Maus auf dem Ziel bleibt.
Aber leider ist das so,dass man wenn man öfter auf das Ziel klickt auch die Punkte dafür bekommt.
Es soll aber nur 1 Klick pro Ziel erlaubt sein und dann auch nur 1 Punkt dafür zu bekommen
 

Lapiz

BeitragDo, Dez 30, 2010 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
machs doch so:
Code: [AUSKLAPPEN]
If MouseX() > ziel_x And MouseX() < ziel_x + ImageWidth(Ziel) And MouseY() > ziel_y And MouseY() < ziel_y + ImageHeight(Ziel)
   If Mousehit(1)
      ;ziel getroffen
      ziel_x=Rand(0,800)
      ziel_y=Rand(0,600)
      letztezeit=MilliSecs()
   EndIf
EndIf
 

Budikotch

BeitragDo, Dez 30, 2010 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh ja.Danke Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group