Problem bei einer Kollision

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Gero

Betreff: Problem bei einer Kollision

BeitragSa, Jan 15, 2011 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy

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

BeitragSa, Jan 15, 2011 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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]
Repeat
Schleifeninhalt
Flip 0
Cls
Until KeyHit(1)
haben solltest.
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Xeres

Moderator

BeitragSa, Jan 15, 2011 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
In Verbindung mit Flip(0) Waittimer nicht vergessen. Niemand braucht 2000+ Frames die Sekunde.
Interessant für dich:
Arrow Was gibt es am Anfang zu beachten?
Arrow Installation der BB Online Hilfe
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Gero

Betreff: Weitere Erkärung

BeitragSa, Jan 15, 2011 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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


Xeres

Moderator

BeitragSa, Jan 15, 2011 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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 anstatt Print & Locate.

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 hin, und Bild & Kollision sind dann nur möglich wenn die Variable auf EIN steht.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group