Bei Kollision soll Bild nicht durch anderes Bild gehen
Übersicht

davinchosBetreff: Bei Kollision soll Bild nicht durch anderes Bild gehen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Leute,
ich hab mich jetzt mal in diesem Forum angemeldet, um meine Fortschritte in BB zu beschleunigen *g* Ich habe früher bereits mit qwbasic und qbasic gearbeitet, da diese URBASIC-dialekte allerdings für (höhere) Grafik und spiel programmierungen hoffungslos überfordert sind, hab ich verständlicherweise auch null Ahnung vom umgang mit "Multimedia". Nun zu meiner Frage: Ich möchte ein simples programm erstellen, bei dem man einen smily mit den coursortasten bewegt. Wenn dieser Smily gegen ein bild auf dem spielfeld stößt, soll eine Meldung kommen, und der Smily NICHT durch das bild hindurchgehen.. Das klappt auch schon ganz gut, allerdings weiss ich nicht, wie ich es anstellen soll, dass der blöde Smiley nicht durch das bild geht... Ich hoffe sehr, dass ihr mir helfen könnt! HIer der Code so far: Code: [AUSKLAPPEN] Graphics 640,480,16,1
SetBuffer BackBuffer() Local smile = LoadImage("smile.bmp") Local mine = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\graphics\disc.bmp") Local x=10 Local y=10 Local xxx=0 schrift = LoadFont("arial") SetFont schrift While Not KeyHit(1) DrawImage smile ,x,y Text 5,1, "Das ist der erste Entwurf einer Bewegungsroutine für ein späteres Spiel. Mai 2006." DrawImage mine ,200,200 If ImagesCollide(smile, x, y, 0,mine, 200, 200,0) Then xxx=1Text 100,100 ,"BOOM!!": For z = 0 To 10000:Next:xxx=0 If KeyDown(200) And y>-0 And xxx=0Then ;pfeil rauf taste y=y-5 EndIf If KeyDown(208) And y<380 And xxx=0 Then ;pfeil runter taste y=y+5 EndIf If KeyDown(203) And x>5And xxx=0Then ;pfeil links taste x=x-5 EndIf If KeyDown(205) And x<540And xxx=0 Then ;pfeil rechts taste x=x+5 EndIf Flip Cls xxx=0 Wend End Vielen Dank im Vorraus! |
||
totonak5 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
was soll mit dem smiley passieren? soll es abprallen/stehenbleiben? | ||
Just for Fun!
Jesus loves U! |
davinchos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey danke für die schnelle Antwort!
Ja, der Smiley soll, an dem Bild stehen bleiben, als wäre es eine Wand und nicht hindurchgehen- abprallen muss er (zunächst) nicht. Gruß, davinchos |
||
totonak5 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Graphics 640,480,16,1
SetBuffer BackBuffer() Local smile = LoadImage("smile.bmp") Local mine = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\graphics\disc.bmp") Local x=10 Local y=10 Local xxx=0 schrift = LoadFont("arial") SetFont schrift While Not KeyHit(1) DrawImage smile ,x,y Text 5,1, "Das ist der erste Entwurf einer Bewegungsroutine für ein späteres Spiel. Mai 2006." DrawImage mine ,200,200 If ImagesCollide(smile, x, y, 0,mine, 200, 200,0) Then xxx=1Text 100,100 ,"BOOM!!": For z = 0 To 10000:Next:xxx=0 if not imagescollide(smile, x,y,0, mine, 200, 200,0) ; wenn sie nicht zusammenstoßen, kann man das smiley bewegen..... If KeyDown(200) And y>-0 And xxx=0Then ;pfeil rauf taste y=y-5 EndIf If KeyDown(208) And y<380 And xxx=0 Then ;pfeil runter taste y=y+5 EndIf If KeyDown(203) And x>5And xxx=0Then ;pfeil links taste x=x-5 EndIf If KeyDown(205) And x<540And xxx=0 Then ;pfeil rechts taste x=x+5 EndIf endif Flip Cls xxx=0 Wend End |
||
Just for Fun!
Jesus loves U! |
davinchos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OKay, erstmal vielen Dank!
Allerdings war ich auch schon soweit (hab ich vergessen zu erwähnen); das Problem bei diesem Code ist allerdings, dass der Smiley an dem Bild "kleben" bleibt, man ihn nicht mehr bewegen kann, wenn er einmal gegengestoßen ist... Wie kann man das ändern? Gruß, davinchos |
||
totonak5 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dann ist es schon mal komplizierter...
du musst dann mit imagerectoverlap() alle seiten deines smileys prüfen (oben, unten, links, rechts), welche seite gerade mit dem block zusammenstößt! wenn zb nur die obere seite den block berührt musst du die if-bedingungen so setzen dass du nicht mehr hinauf drücken kannst.... |
||
Just for Fun!
Jesus loves U! |
davinchos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okay, werde deinen Tipp mal probieren. Ich melde mich dann, ob es geklappt hat.
Vielen Dank! |
||
davinchos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okay, habe es ausprobiert. Das geht natürlich, scheint mir allerdings sehr umständlich; man stelle sich beispielsweise vor, in einem spiel muss man um kugeln herumfahren und bei jeder kugel muss man eine Kollisionsabfrage mit vier Rechtecken machen --> AAAAAH! ![]() ![]() Ich danke dir jedenfalls für deine Hilfe totonak5. |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich mach es dann immer so, das ich am anfang der schleife x und y speicher, und am ende auf kollision prüfe und wenn eine besteht den spieler wieder auf die alte setzte also:
Code: [AUSKLAPPEN] while not keydown(1) oldx=x oldy=y If keydown(205) then x=x+1 ;bla bla bla if ImagesCollide(spieler,x,y,0,ball,x,y,0) then x=oldx:y=oldy drawimage spieler,x,y wend end MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also meine Variante wäre es mit einer Fake 3D Welt, weil dann die Kollision von Blitz übernommen wird. Es ist eine etwas kompliziertere Variante, aber sobald man mal druchgeblickt hat, erscheint alles ganz easy. Du erstellst hinter der Camera eine kameragroße Fläche und für jedes Image ein 3D-Objekt mit vergleichbarer Größe. Durch Tastaturabfragen kannst du dann das Mesh bewegen. Dann ermittelst du die 2D-Koodinaten des Meshs auf dem Bildschirm und setzt das Bild an die jeweiligen Koordinaten. Da Blitz3D schon über gute Kollisionsbefehle verfügt, musst du nur noch von ihnen Gebrauch machen und fertig ist die ganze Sahne ![]() |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde es wie folgt angehen: Bevor du die x und y Position änderst speicher sie erstmal unter z.B. x_alt und y_alt. Wenn nun eine Kollision stattfindet wird in einer Schleife innerhalb der Hauptschleife, die x und y Position solange in richtung x_alt und y_alt bewegt, bis keine Kollision mehr stattfindet. Erst wenn das erledigt ist zeichnest Du das Spielerbild. Ich denke das ist die sexieste Lösung für das Problem. | ||
totonak5 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Ich würde es wie folgt angehen: Bevor du die x und y Position änderst speicher sie erstmal unter z.B. x_alt und y_alt. Wenn nun eine Kollision stattfindet wird in einer Schleife innerhalb der Hauptschleife, die x und y Position solange in richtung x_alt und y_alt bewegt, bis keine Kollision mehr stattfindet. Erst wenn das erledigt ist zeichnest Du das Spielerbild. Ich denke das ist die sexieste Lösung für das Problem.
--> SUPER ![]() ![]() |
||
Just for Fun!
Jesus loves U! |
davinchos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja cool, das hört sich alles schon ziemlich gut an, danke Leute- ich werde das mal ausprobieren!
Gruß, davinchos |
||
AFROBetreff: Wie jetz??? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab das selbe problem, dass mein spieler am gegner kleben bleibt, blick hier aber überhaupt nich durch!!! Kann da wer mal den kompletten code posten? ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Njet. Selbercoden hilft lernen lernen.
EDIT: und wie Du schon angemerkt hast, hast Du das Problem auch, und schon einen Thread dazu eröffnet.- Nutze den weiter. ~GESCHLOSSEN~ |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group