Wie kann ich Sprites automatisch bewegen lassen?

Previous topic - Next topic

Kitty Hello

GP2X Transparenz mit schwarz ist ein Bug - muss ich ändern.

wangsi

Juhu es geht und y steht für rauf runter.
Jetzt kann ich das fadenkreuz in alle richtungen bewegen.

Dann kann ich viele andere befehle geben? z.b.   :

IF KEY (blabla)
PLAYSOUND  "bla.wav" <------ wieder probleme gp2x(rauschen) aber muss doch in der schlaufe sein?
ENDIF

PS Frage Am Rande : Kennt ihr ne website mit freien Game grafiken?

superfish

oh, Sorry, dann hatte ich Dich vorhin etwas Falsch verstanden.

Aber der Free Wave Editor ist trotzdem ganz gut ;)

Die F1 Taste sowieso, geht auch nicht ohne ;)

BumbleBee

Quote from: wangsiKennt ihr ne website mit freien Game grafiken?
Schau mal hier:
   http://reinerstileset.4players.de/index.html
Da ist bestimmt was für dich dabei.:)

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Kitty Hello

Bei IF KEY(xxx) THEN PLAYSOUND()
wird der Sound ja jedesmal gestartet, wenn die Taste gedrückt ist.
Also, erstmal abchecken, ob die Taste wieder losgelassen wurde bevor Du es erlaubst, dass der Tastendruck einen Sound macht.

wangsi

Wie Prüfe ich ob die Taste  losgelassen wird ?
So?
Code (glbasic) Select
IF KEY (30)
IF KEY (30=0)
PLAYSOUND (blabla)
ENDIF
ENDIF
Hier der Code:
Code (glbasic) Select
SETSCREEN 320,240,0
LOADBMP "dschungel.bmp"
LOADSPRITE "feind.bmp", 0
PRINT "SNIPER 2X", 60, 20
LOADSPRITE "fadenkreuz.bmp", 1
LOADSOUND "schrei.wav", 1, 1 //4
WHILE TRUE
SPRITE 1, X, Y
SPRITE 0, 60, 60
IF KEY (30)
IF SPRCOLL (1, X, Y, 0, 60, 60)
PRINT "getroffen", 50, 50
PLAYSOUND (1, 0, 1)
ENDIF
ENDIF  
IF KEY (205)
X = X+1
ENDIF
IF KEY (203)
X = X-1
ENDIF
IF KEY (208)
Y = Y+1
ENDIF
IF KEY (200)
Y = Y-1
ENDIF
PRINT "SNIPER 2X", 60, 20
SHOWSCREEN
WEND
END

wangsi

Hmm Gegner saust jetzt mit 200 kmh durchs spielfeld ich nehme an wieder ein schlaufenproblem?
WHILE TRUE
SPRITE 1, X, Y
SPRITE 0, X0, Y0
X0 = RND(320)
Y0 = RND(240)
IF KEY (30)
IF SPRCOLL (1, X, Y, 0, 60, 60)
PRINT "getroffen", 50, 50
PLAYSOUND (1, 0, 1)
ENDIF
ENDIF

S.O.P.M.

QuoteWie Prüfe ich ob die Taste losgelassen wird?
IF KEY(xx) = 0 ...

Wenn die Abfrage der entsprechenden Taste 0 ergibt, ist sie ja nicht gedrückt, bzw. wurde wieder losgelassen.

Um damit jetzt eine Keyabfrage zu machen, die registriert, ob die Taste einmal gedrückt und wieder losgelassen wird, brauchst du eine Hilfsvariable, in der du den Status speicherst:

IF KEY(xx) THEN
   IF KeyState = 0
      KeyState = 1
      ...
      [hier die Aktion, die passieren soll]
      ...
   ENDIF
ELSE
   KeyState = 0
ENDIF

Hiermit wird sichergestellt, dass auf das Drücken der entsprechenden Taste erst eine Aktion ausgeführt wird, wenn diese vorher nicht gedrückt war. Die Variable KeyState (du kannst sie natürlich anders nennen) muss den Wert 0 haben, damit auf den Tastendruck reagiert wird. Ist dies der Fall, wird ihr der Wert 1 zugewiesen. Erst, wenn die Taste wieder losgelassen wurde, nimmt sie wieder den Wert 0 an. Probier's mal aus, sollte funktionieren!
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

S.O.P.M.

wangsi, schreibst du deinen Code nur hier in den Posts so ungegliedert? Du musst unbedingt die Zeilen einrücken, sonst verlierst du den Überblick im Nu. Selbst wenn du hier Code postest, wäre es hilfreich, wenn du die Zeilen bitte etwas einrücken würdest. Ich habe das mal für deinen Beispielcode gemacht:

SETSCREEN 320, 240, 0
LIMITFPS 40
LOADBMP "dschungel.bmp"
LOADSPRITE "feind.bmp", 0
PRINT "SNIPER 2X", 60, 20
LOADSPRITE "fadenkreuz.bmp", 1
LOADSOUND "schrei.wav", 1, 1 //4
WHILE TRUE
   SPRITE 1, X, Y
   SPRITE 0, 60, 60
   IF KEY (30)
      IF SPRCOLL (1, X, Y, 0, 60, 60)
         PRINT "getroffen", 50, 50
         PLAYSOUND (1, 0, 1)
      ENDIF
   ENDIF  
   IF KEY (205)
      X = X + 1
   ELSEIF KEY (203)
      X = X - 1
   ELSEIF KEY (208)
      Y = Y + 1
   ELSEIF KEY (200)
      Y = Y - 1
   ENDIF
   PRINT "SNIPER 2X", 60, 20
   SHOWSCREEN
WEND
END  //wird nicht benötigt!

Ich habe den Code auch mal leicht verändert und einen zusätzlichen Befehl am Anfang eingebaut: LIMITFPS. Damit begrenzt du, wie oft der Befehl SHOWSCREEN pro Sekunde den Bildschirminhalt aktualisiert. Dann läuft es auch nicht mehr so schnell.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

BumbleBee

Hi wangsi

1.Zu deiner "Tasten wieder loslassen" Frage. Schau mal hier durchs Forum da gab's
  schon jede Menge Beispiele. Aber hier nochmal für dich. So kannst du's auch machen.
Code (glbasic) Select
 //In Push speicherst du ab ob schon gedrückt wurde oder nicht
Push=FALSE

               //Loop
WHILE TRUE

       //Taste gedrückt und Push=False --> dann Push=True
IF KEY (30) AND Push=FALSE
  Push=TRUE
  PLAYSOUND (1, 0, 1)
ENDIF
 
      //Taste nicht gedrückt -> Push wieder auf False
IF KEY(30)=FALSE THEN Push=FALSE

SHOWSCREEN
WEND
Jetzt mußt du die Taste wieder loslassen und wieder drücken um den Sound abzuspielen.
2.Wenn's zu schnell läuft hau die Bremse rein. Fang mal mit LIMITFPS 30 (siehe Hilfe :D) an dann läufts   nicht  so schnell. Für Zeitgesteuerte Bewegung gibt's hier auch einige Beispiele.
3.Bitte code tag benutzen wenn du hier Code reinpostest.:D


Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Kitty Hello

...und bitte [ code ] ... [ / code ] verwenden (die code klammern zusammenschreiben)

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello


Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Antidote

@Mr. GLBASIC
Hat Deine Tochter (Tochter ist richtig....???) gerade English in der Schule???
Kann mich gut daran erinnern, als ich die Heftchen dran hatte :)War Lustig

(sorry für ot .. musste sein :)
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.