Bei Kollision soll Bild nicht durch anderes Bild gehen

Übersicht BlitzBasic Beginners-Corner

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

davinchos

Betreff: Bei Kollision soll Bild nicht durch anderes Bild gehen

BeitragDi, Mai 30, 2006 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 30, 2006 12:59
Antworten mit Zitat
Benutzer-Profile anzeigen
was soll mit dem smiley passieren? soll es abprallen/stehenbleiben?
Just for Fun!
Jesus loves U!
 

davinchos

BeitragDi, Mai 30, 2006 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 30, 2006 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 30, 2006 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 30, 2006 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 30, 2006 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
okay, werde deinen Tipp mal probieren. Ich melde mich dann, ob es geklappt hat.

Vielen Dank!
 

davinchos

BeitragDi, Mai 30, 2006 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Laughing Laughing

Ich danke dir jedenfalls für deine Hilfe totonak5.

5k41

BeitragDi, Mai 30, 2006 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 30, 2006 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
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

BeitragDi, Mai 30, 2006 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Mai 31, 2006 9:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing Laughing
Just for Fun!
Jesus loves U!
 

davinchos

BeitragMi, Mai 31, 2006 10:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja cool, das hört sich alles schon ziemlich gut an, danke Leute- ich werde das mal ausprobieren!

Gruß,
davinchos
 

AFRO

Betreff: Wie jetz???

BeitragSo, Jun 11, 2006 10:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Laughing

BladeRunner

Moderator

BeitragSo, Jun 11, 2006 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group