Kollisionsabfrage

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

bruce185

Betreff: Kollisionsabfrage

BeitragSa, Apr 30, 2005 3:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hi
ich habe erst vor kurzem angefangen mit Blitz Basic programmieren zu lernen, und ich scheitere schon bei meinem ersten spiel, ich habe immer ein Problem mit Kollisionsabfrage, ich verstehe es nich so gut,.
Also, ich möchte das wenn 2 bilder aufeinander zu kommen, das ich dan verloren habe.
z.B. wenn ich in meinem spiel laufe und ich werde getroffen, dann will ich das die meldung kommt "Sie haben verloren".
also ich habs mal damit probiert:

Function abstand#(x1#, y1#, x2#, y2#)
x_ab# = x1# - x2#
y_ab# = y1# - y2#

abstand# = Abs(Sqr((x_ab# ^ 2) + (y_ab# ^ 2)))
Return abstand#
End Function

aber ich weiss nicht so recht wie man den abstand zwischen die beiden bilder berechnet.
Könnt ihr mir vieleicht erklären wie man das berechnet, ich wäre euch sehr dankbar.

MFG Christian Sad

Alfadur

BeitragSa, Apr 30, 2005 5:11
Antworten mit Zitat
Benutzer-Profile anzeigen
deine abstandsabfrage ist super und ich finds gut das du gerade erst angefangen hast und trotzdem floats kennst, funktionen benutzt und dir die mathefunktionen schon angeschaut hast. supi. auch wenn das abs abs(olut) (kleiner wortwitz) überflüssig ist, weil der ausdruck in der wurzel niemals negativ sein kann ... (quadrierung gibt immer +), find ich das alles gut. aber zu deinem problem ... schau dir mal die befehle imagescollide, imagerectoverlap usw usf an.
A Cray is the only computer that runs an endless loop in less than four hours.

Ralf

BeitragSa, Apr 30, 2005 5:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, was ist denn das für eine abenteuerliche Berechnung?

Das ist definitiv nicht für eine Kollisionsabfrage brauchbar.
Schau in der Onlinehife nach und suche nach den ImageCollide oder ImageOverlap-Befehlen.
Möglicherweise könnte Dir auch die Suchfunktion hier im Forum jede Menge Antworten geben.

Noch ein Tipp: Poste so ein Zeugs dahin wo es hingehört, nämlich im Anfängerbereich.

bruce185

BeitragSa, Apr 30, 2005 5:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin ja gerade dabei die Onlinehilfe durch zu arbeiten, ich bin schon bei Kollisionsabfragen und genau da komme ich nicht weiter, ich habe das probiert und wenn ich den code schreibe dan kommt die meldung "verloren" ob wohl die 2 bilder noch nicht zusammen gestoßen sind, folgende code habe ich geschrieben:

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()

Repeat

bild1 = LoadImage(\"bild1.bmp\")
DrawImage bild1,30,30

bild2 = LoadImage(\"bild2.bmp\")
DrawImage bild2,70, 50

If ImagesCollide(bild1, 0, 0, 0, bild2, 32, 32, 0) Then Print \"Sie habe verloren\"

Flip
Until KeyHit(1)
End


oder habe ich da was falsch gemacht??

Rob_

BeitragSa, Apr 30, 2005 5:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann wollen wir mal Smile ,

1. LoadImage oder sonst was,was mit load anfängt oder aufhört gehört nicht in eine schleife!

2. Print erstetze durch Text 0,0,"Sie haben Verloren"
|_| |
Position x,y Text

3. Schau dir den befehl "Imagescollided" genau an du must die koordinaten der einzelnen bilder angeben!


So,

BlitzBasic: [AUSKLAPPEN]

Graphics 800,600
SetBuffer BackBuffer()

bild1 = LoadImage(\"bild1.bmp\")
bild2 = LoadImage(\"bild2.bmp\")

Repeat
Cls ; Falls du die sachen bewegen willst

DrawImage bild1,300,30
DrawImage bild2,70, 50

; x-. y-. Hier vom zweiten bild
If ImagesCollide(bild1, 300, 30, 0, bild2, 70, 50, 0) Then Text 0,0, \"Sie haben Verloren\"

; Und wenn die sachen jetzt zusammen kommen gibts den Text dazu


Flip
Until KeyHit(1)
End
AMD Athlon 64 3500+ | Infineon 1 GB DDR RAM | nVidia Geforce 7800 GTX

Ralf

BeitragSa, Apr 30, 2005 6:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Jepp, und dann solltest Du noch die transparente Farbe der Images deklarieren. Dafür gibt es den Befehl MaskImage.
Ansonsten werden nur 2 Rechtecke auf die Kollision überprüft.
Falls das ausreicht nimm den Befehl ImagesOverlap bild1,x1,y1,bild2,x2,y2 für die Prüfung, da der schneller ist.
Hier macht das zwar noch nicht aus, aber bei umfangreichen Programmen kann man dadurch die Programmgeschwindigkeit merklich erhöhen.

bruce185

BeitragSa, Apr 30, 2005 9:03
Antworten mit Zitat
Benutzer-Profile anzeigen
das weis ich das man den Bildschirm löschen muss mit Cls, weil ansonsten man die ganze bilder reihe sieht, und das kann ich auch die transparente farbe zuweisen, das habe ich ja schon durchgemacht, aber vielen dank für den code, ich werde es gleich ausprobieren.

MFG Christian

bruce185

BeitragSo, Mai 01, 2005 6:44
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
ich habe das probiert mit kollisionsabfrage, aber es funzt nicht, ich komme da nicht weiter, ich habe es jetzt so gemacht:

BlitzBasic: [AUSKLAPPEN]
Graphics 405,467,16,2
SetBuffer BackBuffer()

bild1 = LoadImage(\"schläger.bmp\")
bild2 = LoadImage(\"ball.bmp\")

Repeat
Cls

DrawImage bild1,300,30
DrawImage bild2,70, 50

If ImagesCollide(bild1, 300, 30, 0, bild2, 70, 50, 0) Then Text 0,0, \"Pixelgenaue Kollision!!! (!)\"




If KeyDown(203) Then x = x - 5
If KeyDown(205) Then x = x + 5
If KeyDown(200) Then y = y - 5
If KeyDown(208) Then y = y + 5

DrawBlock bild1, x+300, y+30



Flip
Until KeyHit(1)
End


habe ich das falsch gemacht, oder wie sieht das aus!!!! ich danke euch schonmal Sad

MFG Christian

Ralf

BeitragSo, Mai 01, 2005 8:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja da hast Du was falsch gemacht!
Du fragst bei der Kollisionsabfrage immer die gleiche Position der Grafiken ab, doch die ändern sich ja beim Drücken der Pfeiltasten.
So sollte es funktionieren:

Code: [AUSKLAPPEN]
Graphics 405,467,16,2
SetBuffer BackBuffer()

bild1 = LoadImage("schläger.bmp")
bild2 = LoadImage("ball.bmp")
x=300 : y=30
Repeat
Cls
DrawImage bild1,x,y
DrawImage bild2,70, 50

If ImagesCollide(bild1, x, y, 0, bild2, 70, 50, 0) Then Text 0,0, "Pixelgenaue Kollision!!! (!)"

If KeyDown(203) Then x = x - 5
If KeyDown(205) Then x = x + 5
If KeyDown(200) Then y = y - 5
If KeyDown(208) Then y = y + 5

Flip
Until KeyHit(1)
End

bruce185

BeitragSo, Mai 01, 2005 8:47
Antworten mit Zitat
Benutzer-Profile anzeigen
cool danke es hat funktioniert, ich muss ja noch ein bisschen lernen, ich bin ja sozusagen erst seit ein paar tagen dabei programmieren zu lernen mit Blitz Basic, aber wenn man ja rum experimentiert dann lernt man ja schneller.

und danke nochmals.

MFG Christian

bruce185

BeitragSo, Mai 01, 2005 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, noch eine letzte frage habe ich, ich habe ja in mein spiel ein schläger reingefügt mit dem ich nach rechts, links, hoch und runter verschieben kann, und da habe ich ein problem und zwar wie kann ich machen das der schläger nicht zu weit nach recht verschoben werden darf, das es halt nach einer position blockiert, ich bin euch sehr dankbar wenn ihr mir helft, danke schonmal.
MFG Christian
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragSo, Mai 01, 2005 10:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Und ab damit in die Beginner-Ecke !

Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***

DivineDominion

BeitragSo, Mai 01, 2005 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bewegst ihn durch verändern der Koordinaten.
Also kannst du ihn damit auch blocken!

Beispielsweise soll er auf der X-Achse nur im Bereich von 100 bis 300 bewegbar sein. Der Schläger ist da meinetwegen 20 Pixel breit:
BlitzBasic: [AUSKLAPPEN]
If KeyDown( Rechts )
;Darf sich nach Rechts nur bis zu x=300+20 bewegen (+20 wegen der Breite des Schlägers)
If x < 320 Then x = x + 2
ElseIf KeyDown( Links )
;Hier nur bis x=100. Da oben-links angefangen wird zu malen müssen wir hier nix aufrechnen oder abziehen
If x > 100 Then x = x - 2
EndIf



Tada Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group