Problem bei einer Kollision
Übersicht

GeroBetreff: Problem bei einer Kollision |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute.....
Ich möchte zu aller einmal sagen ich bin völliger Anfänger also bitte möglichst einfache Befehel verwenden..... Ich möchte: Das wenn die Taste m gedrückt wird an angegebenen Koordinaten das Bild Laserorbit erscheint und später wieder gelöscht wird..... Wenn die Spielfigur(Smiley) während das Bild da ist (also auch sichtbar ist) in Berührung kommt soll die Variable leben um 1 minus gerechnet werden.....(Das ganze ist in einer Funktion Return????)) Danke schon mal im Vorraus ![]() Gero Code: [AUSKLAPPEN] Function Laserorbit(x,y,leben) If KeyDown(50) Then DrawImage Laserorbit,100,100 EndIf If ImagesCollide (Smiley,x,y,0,Laserorbit,100,100,0) Then leben=leben-1 EndIf End Function |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ist denn nun die Frage?
Hier ein paar Antworten auf mögliche Fragen: 1. Ja du kannst dann das leben einfach mit return leben zurückgeben. 2 Du bindest die Funktion wie folgt ein: BlitzBasic: [AUSKLAPPEN] Spieler_leben = Laseroribt(x,y,Spieler_leben) 3. Das Bild wieder weg zu bekommen, sollte kein Problem sein, da du in deiner Main Schleife ein BlitzBasic: [AUSKLAPPEN] Repeathaben solltest. |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
In Verbindung mit Flip(0) Waittimer![]() Interessant für dich: ![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
GeroBetreff: Weitere Erkärung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mein PRobelm besteht darin das es bis dato nich funktioniert....
Wenn ich m drücke soll das Bild Laserorbit erscheien und wenn ich es berühre soll mir ein leben abgezogen werden....(nur eins(bis dato bin ich dann direkt tot)) Wenn ich allerdings über die Flache von LAserorbit gleite während ich NICHT m drücke also während das Bild nicht da ist soll auch nichts passieren...... ICh poste jetzt mal den gesammten Code vielleicht hilft das ja.... Danke im Voraus Gero Code: [AUSKLAPPEN] .start AppTitle "Smiley in Acton" Graphics (1300,800) ;Fenstergröße Global Hintergrund=LoadImage("Bilder/neu.bmp") Global Gameover=LoadImage("Bilder/Gameover.bmp") ;Bilder werden in das Programm geladen und bearbeitet Global Smiley=LoadImage("Bilder/Smiley.bmp") MaskImage Smiley,255,255,255 ScaleImage Smiley,0.36,0.36 Global Kanone_unten=LoadImage ("Bilder/Kanone_unten.bmp") MaskImage Kanone_unten,255,255,255 Global Kanone_rechts=LoadImage ("Bilder/Kanone_rechts.bmp") MaskImage Kanone_rechts,255,255,255 Global Kanone_links=LoadImage ("Bilder/Kanone_links.bmp") MaskImage Kanone_links,255,255,255 Global Laserschuss = LoadImage("Bilder/Laserschuss.bmp") MaskImage Laserschuss,255,255,255 Global Herz=LoadImage("Bilder/Herz.bmp") MaskImage Herz,255,255,255 ScaleImage Herz,0.25,0.25 Global Schussk1=LoadImage ("Bilder/Schussk1.bmp") MaskImage Schussk1,255,255,255 Global Schussk2=LoadImage ("Bilder/Schussk2.bmp") MaskImage Schussk2,255,255,255 Global Schussk3=LoadImage ("Bilder/Schussk3.bmp") MaskImage Schussk3,255,255,255 Global Laserorbit= LoadImage ("Bilder/Laserorbit.bmp") MaskImage Laserorbit,255,255,255 Global Techno=LoadSound ("Musik/Techno.mp3") ;Sounds werden in das Programm geladaen Global Fail=LoadSound ("Musik/Fail.mp3") Global Schriftart=LoadFont ("Comic Sans MS",115,100) ;Schriftart wird in das Programm geldaden Global x=600 ;Mein Spawnpoint Global y=350 Global leben=3 SeedRnd MilliSecs() Global xk1=Rand(100,1050) ;Spawnpoint Kanone 1 (unten) Global zxk1=Rand(100,1050) Global yk1=650 SeedRnd MilliSecs() Global yk2=Rand(100,550) ;Spawnpoint Kanone 2 (rechts) Global zyk2=Rand(100,550) Global xk2=1150 SeedRnd MilliSecs() Global yk3=Rand(100,550) ;Spawnpoint Kanone 3 (links) Global zyk3=Rand(100,550) Global xk3=0 Global schussrate=1 Type shot1 ;erstellt den Type "shot" Field shot_x1 ;x Koordinate Field shot_y1 ;y Koordinate End Type Type shot2 ;erstellt den Type "shot" Field shot_x2 ;x Koordinate Field shot_y2 ;y Koordinate End Type Type shot3 ;erstellt den Type "shot" Field shot_x3 ;x Koordinate Field shot_y3 ;y Koordinate End Type Delete Each shot1 Delete Each shot2 ;Löscht alle Schüße (für nochmal spielen) Delete Each shot3 anfangszeit = MilliSecs() ;Anfangszeitpunkt für den Timer wird gesetzt SetBuffer BackBuffer() While Not leben=0 Or KeyHit(1) Cls DrawBlock Hintergrund ,0,0 endzeit=MilliSecs() zeit=Timer(anfangszeit,endzeit) Schuss_unten(xk1,yk1,shot_x1,shot_y1,zeit) Schuss_rechts(xk2,yk2,shot_x2,shot_y2,zeit) Schuss_links(xk3,yk3,shot_x3,shot_y3,zeit) Spielerbewegung() Kanone_unten() Kanone_rechts() Kanone_links() Laserorbit(x,y,leben) Leben(leben) Flip Wend Cls Print " Du hast " + zeit + " Sekunden überlebt" Delay (1000) Cls While Not KeyHit Locate 350,100 Print "Drücke Enter" Locate 150,200 Print "um nocheinmal zu spielen" Locate 350,450 Print "Drücke Esc" Locate 150,550 Print "um das Spiel zu beenden" If KeyHit (28) Then Goto start ElseIf KeyHit (1) Then End EndIf Wend Function Timer(endzeit,anfangszeit) zeitneu=anfangszeit-endzeit zeitneu=zeitneu/1000 Locate (550,0) SetFont Schriftart Print zeitneu Return zeitneu Locate (800,0) End Function Function Schuss_unten (xk1,yk1,shot_x1,shot_y1,zeit) If zeit/schussrate=1 Then info.shot1 = New shot1 info\shot_x1 = xk1 +40 info\shot_y1 = yk1 schussrate=schussrate EndIf For info.shot1 = Each shot1 info\shot_y1 = info\shot_y1 - 5 DrawImage Schussk1,info\shot_x1,info\shot_y1 Next For info.shot1 = Each shot1 If ImagesCollide (Smiley,x,y,0,Schussk1,info\shot_x1,info\shot_y1,0) Then leben=leben-1 Delete info.shot1 EndIf Next For info.shot1 = Each shot1 If info\shot_y1 <100 Then Delete info.shot1 EndIf Next End Function Function Schuss_rechts (xk2,yk2,shot_x2,shot_y2,zeit) If zeit/schussrate=1 Then info.shot2 = New shot2 info\shot_x2 = xk2 -20 info\shot_y2 = yk2 schussrate=schussrate EndIf For info.shot2 = Each shot2 info\shot_x2 = info\shot_x2 - 5 DrawImage Schussk2,info\shot_x2,info\shot_y2 Next For info.shot2 = Each shot2 If ImagesCollide (Smiley,x,y,0,Schussk2,info\shot_x2,info\shot_y2,0) Then leben=leben-1 Delete info.shot2 EndIf Next For info.shot2 = Each shot2 If info\shot_x2 <100 Then Delete info.shot2 EndIf Next End Function Function Schuss_links (xk3,yk3,shot_x3,shot_y3,zeit) If zeit/schussrate=1 Then info.shot3 = New shot3 info\shot_x3 = xk3 +120 info\shot_y3 = yk3 schussrate=schussrate+1 EndIf For info.shot3 = Each shot3 info\shot_x3 = info\shot_x3 + 5 DrawImage Schussk3,info\shot_x3,info\shot_y3 Next For info.shot3 = Each shot3 If ImagesCollide (Smiley,x,y,0,Schussk3,info\shot_x3,info\shot_y3,0) Then leben=leben-1 Delete info.shot3 EndIf Next For info.shot3 = Each shot3 If info\shot_x3 >1150 Then Delete info.shot3 EndIf Next End Function Function Spielerbewegung() If KeyDown (205) x=x+7 If KeyDown (203) x=x-7 If KeyDown (208) y=y+7 ;Bewegung If KeyDown (200) y=y-7 If x=>1150 Then x=x-7 If y=>650 Then y=y-7 ;Begrenzungen If x=<100 Then x=x+7 If y=<100 Then y=y+7 DrawImage (Smiley,x,y,0) ;Smiley End Function Function Kanone_unten() If xk1 < zxk1-3 Then xk1=xk1+3 DrawImage Kanone_unten,xk1,yk1 ElseIf xk1 > zxk1+3 Then xk1=xk1-3 DrawImage Kanone_unten,xk1,yk1 ElseIf xk1>zxk1-3 Then SeedRnd MilliSecs() zxk1=Rand (100, 1050) ElseIf xk1< zxk1+3 Then SeedRnd MilliSecs() zxk1=Rand (100, 1050) EndIf End Function Function Kanone_rechts() If yk2 < zyk2-3 Then yk2=yk2+3 DrawImage Kanone_rechts,xk2,yk2 ElseIf yk2 > zyk2+3 Then yk2=yk2-3 DrawImage Kanone_rechts,xk2,yk2 ElseIf yk2>zyk2-3 Then SeedRnd MilliSecs()+100 zyk2=Rand (100, 550) ElseIf yk2< zyk2+3 Then SeedRnd MilliSecs() zyk2=Rand (100, 550) EndIf End Function Function Kanone_links() If yk3 < zyk3-3 Then yk3=yk3+3 DrawImage Kanone_links,xk3,yk3 ElseIf yk3 > zyk3+3 Then yk3=yk3-3 DrawImage Kanone_links,xk3,yk3 ElseIf yk3>zyk3-3 Then SeedRnd MilliSecs() zyk3=Rand (100, 550) ElseIf yk3< zyk3+3 Then SeedRnd MilliSecs() zyk3=Rand (100,550) EndIf End Function Function Laserorbit(x,y,leben) If KeyDown(50) Then DrawImage Laserorbit,100,100 EndIf If ImagesCollide (Smiley,x,y,0,Laserorbit,100,100,0) Then leben=leben-1 EndIf End Function Function Leben(leben) If leben=3 Then DrawImage Herz,900,15 DrawImage Herz,975,15 DrawImage Herz,1050,15 ElseIf leben=2 Then DrawImage Herz,975,15 DrawImage Herz,1050,15 ElseIf leben=1 Then DrawImage Herz,1050,15 EndIf End Function |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Argh... Nichts gegen dich, aber das ist... verbesserungswürdig...
- Benutze kein GoTo. Jemals. Wir können hier kein Programm durchschauen, indem wild herum gesprungen wird - und du auch nicht. - Jede Einzelne Variable Global zu deklarieren macht den ganzen Sinn dahinter zunichte: Abgetrennte Bereiche zu haben, in denen Variablen gelten. Wenn möglich, übergib den Funktionen Variablen als Parameter. - SeedRnd MilliSecs() Mehrfach hintereinander auf zu rufen ist nicht nur unnötig, es produziert in der Tat Fehler. Einmal reicht! - Statt 3 Types könnte man auch einen verwenden, ggf. mit einem Field zur Unterscheidung. - Benutze Text ![]() Jetzt zum Problem: Du schaltest eine Variable auf EIN wenn du die Taste Drückst, und startest einen Timer. Wenn die Zeit abgelaufen ist, wird die Variable wieder AUS. Den Timer bekommst du mittels Millisecs ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group