Kollisionsabfrage
Übersicht

![]() |
bruce185Betreff: Kollisionsabfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 oder habe ich da was falsch gemacht?? |
||
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann wollen wir mal ![]() 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]
|
||
AMD Athlon 64 3500+ | Infineon 1 GB DDR RAM | nVidia Geforce 7800 GTX |
![]() |
Ralf |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 habe ich das falsch gemacht, oder wie sieht das aus!!!! ich danke euch schonmal ![]() MFG Christian |
||
![]() |
Ralf |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hoi.
Und ab damit in die Beginner-Ecke ! Toni |
||
... ..... .i.. ...
*** Sieger des BB-Gameboy-Contest 2004 Sieger des Blitzbaster 2D-Minigolf-Contest 2005 *** |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ) Tada ![]() |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group