Kollision mit Auto

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Quäiny

Betreff: Kollision mit Auto

BeitragSo, Nov 16, 2008 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe eine Figur und mehrere Autos. Sobald das Auto mit meinem Spieler kollidiert, bleibt das Auto stehen. Alles schön und gut...das Problem ist nur, dass ich nicht mit meiner Figur weiter laufen kann, soll er aber , nur nicht auf dem Auto. Vielleicht hat jemand ne Lösung!Hier mein Code:Code: [AUSKLAPPEN]

Graphics  640, 480, 16
SetBuffer  BackBuffer ()

Global spieler_IMG=LoadAnimImage ("spieler4.png",30,30,0,4): MaskImage spieler_IMG,255,255,255:MidHandle spieler_img
Dim spieler(360)
          For i=0 To 360
            spieler(i)=CopyImage(spieler_img)
            RotateImage(spieler(i),i)
         Next
         FreeImage spieler_img
         
Global   autos_img=LoadAnimImage ("autos.png",44,71,0,12)

     Global spieler_X=200,spieler_y=200,spieler_v#=2

Dim autox(5), autoy(5),speed(5),frmautos(5)
  For i = 0 To 5
        speed(i)= Rand (1,5)
        frmautos(i)=Rand (0,11)
        autoy(i) =  400
        autox(i) =  500
Next

Repeat
Cls

altx#=spieler_x
alty#=spieler_y

If KeyDown(200) Then
             spieler_x= spieler_x + Cos(w)*spieler_v      
   spieler_y = spieler_y+Sin(w)*spieler_v
EndIf

For i=0 To 5

   If autoy(i)> 480 Then autoy(i)=0
   autoy(i)=autoy(i)+speed(i)
      DrawImage autos_img,autox(i),autoy(i) ,frmautos(i)
      
       If   ImagesCollide  (spieler(w),spieler_x,spieler_y,0,  autos_img,autox(i),autoy(i)+10 ,frmautos(i)) Then
                Text  0, 0, "Kollision! "
      autoy(i)=autoy(i)-speed(i);Hier bleibt das auto stehen
;spieler kann man nicht mehr bewegen
      spieler_x=altx
      spieler_y=alty
      EndIf

Next

If KeyDown(205) Then W= W + 1
If KeyDown(203) Then W = W - 1

If W < 0 Then W = 360
If W > 360 Then W= 0

DrawImage spieler(w),spieler_x+ Cos(w)*spieler_v   ,spieler_y+Sin(w)*spieler_v,0

 

Flip
Until KeyHit(1)

End
  • Zuletzt bearbeitet von Quäiny am So, Nov 16, 2008 15:01, insgesamt einmal bearbeitet

The_Nici

BeitragSo, Nov 16, 2008 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weigere mich diesen Code durchzulesen, denn er ist schrecklich eingerückt.
 

Schoasch

BeitragSo, Nov 16, 2008 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab mir den code durchgelesen aber ich verstehe deine Frage nicht ganz...
du willst, dass sich der Spieler auch bewegen kann, wenn das Auto mit dem Spieler kollidiert?

mfg
 

Quäiny

BeitragSo, Nov 16, 2008 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
jo genau, wenn der spieler mit dem Auto kollidiert, kann sich der Spieler nicht mehr bewegen und wenn ich da hinschreib
spielerx=spielerx/spieler_v
spielery=spielery/spieler_v

dann kommt der wieder zu seiner ausgangspostion.
 

Schoasch

BeitragSo, Nov 16, 2008 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, der Code ist zwar noch ausbaufähig aber im großen und ganzen sollte das so stimmen:

Code: [AUSKLAPPEN]

Graphics  640, 480, 16
SetBuffer  BackBuffer ()

Global spieler_IMG=LoadAnimImage ("spieler4.png",30,30,0,4): MaskImage spieler_IMG,255,245,255:MidHandle spieler_img
Dim spieler(360)
          For i=0 To 360
            spieler(i)=CopyImage(spieler_img)
            RotateImage(spieler(i),i)
         Next
         FreeImage spieler_img
         
Global   autos_img=LoadAnimImage ("autos.png",44,71,0,12)

     Global spieler_X=200,spieler_y=200,spieler_v#=2

Dim autox(5), autoy(5),speed(5),frmautos(5)
  For i = 0 To 5
   speed(i)= Rand (1,5)
   frmautos(i)=Rand (0,11)
   autoy(i) =  400
    autox(i) =  500
Next

Repeat
Cls

altx#=spieler_x
alty#=spieler_y

 If KeyDown(200) Then
    spieler_x= spieler_x + Cos(w)*spieler_v     
   spieler_y = spieler_y+Sin(w)*spieler_v
EndIf

For i=0 To 5

   If autoy(i)> 480 Then autoy(i)=0
      autoy(i)=autoy(i)+speed(i)
      DrawImage autos_img,autox(i),autoy(i) ,frmautos(i)
     
If   ImagesCollide  (spieler(w),spieler_x,spieler_y,0,  autos_img,autox(i),autoy(i)+20 ,frmautos(i)) Then
   Text  0, 0, "Kollision! "
      autoy(i)=autoy(i)-speed(i);Hier bleibt das auto stehen
;spieler kann man nicht mehr bewegen
      ;spieler_x=altx
      ;spieler_y=alty
   If spieler_y > autoy(i) + 71 Then spieler_y = autoy(i) + 87 ; du musst die Koordinaten noch nach deiner Auto größe umändern.
   ;autoy(i) daher weil du die unterste Position des Autos (71) + die Hälfte des Spieler (wegen Midhandle) rechnen und dann noch +1
EndIf

Next

If KeyDown(205) Then W= W + 1
If KeyDown(203) Then W = W - 1

If W < 0 Then W = 360
If W > 360 Then W= 0

DrawImage spieler(w),spieler_x+ Cos(w)*spieler_v   ,spieler_y+Sin(w)*spieler_v,0

 

Flip
Until KeyHit(1)

End


Manchmal hüpft der Spieler, das kommt daher weil ein zweites Auto mit ihm Kollidiert, aber ich glaube, dass du später auch die Autos nicht mehr zusammen fahren lässt, oder dass sie nebeneinander fahren werden.

mfg

edit: wenn du die zeile weglässt, die ich geschrieben habe, dann kannst du dich auch bewegen, nur halt kannst du dann über die autos rennen, was du auch kannst wenn du von der seite kommst, deswegen musst du da noch das gleiche für die anderen 3 seiten dazuschreiben!
 

Quäiny

Betreff: Autokollisionen

BeitragMo, Nov 17, 2008 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich denn jetzt schreiben: wenn die autos miteinander kollidieren,dass die stoppen?Code: [AUSKLAPPEN]

if imagesoverlap( autos_img,autox(i),autoy(i),autos_img,autox(i),autoy(i))
if autoy(i)<autoy(i)+74 then autoy(i)=autoy(i)-v(i)
endif
 

Schoasch

BeitragMo, Nov 17, 2008 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte versuche auch folgenden Code zu verstehen, denn darum geht es hier ja eigentlich!

Code: [AUSKLAPPEN]

For xx = 0 To 5
   For yy = 0 To 5
      If Autoy(xx) < Autoy(yy) Then
      If Autoy(xx) + 75 > Autoy(yy) Then Autoy(xx) = Autoy(xx) - speed(xx)
      EndIf
   Next
Next


Bei dieser For - Next Schleife wird jedes Auto auf jedes geprüft, ob es nicht auf einem "draufsteht", und falls dies der Fall ist, wird das Auto gestoppt, bis es vor ihm frei ist. Wenn du das "+75" erhöst, kannst du den Abstand zwischen den Autos vergrößern.

Natürlich ist das nur eine von mehreren Möglichkeiten, (es gäbe zum Beispiel noch Images Overlap oder Images Collide), aber ich glaube, dass dies die schnellste Variante ist und auch die einfachste.

mfg

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group