Kollision mit Auto
Übersicht

QuäinyBetreff: Kollision mit Auto |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weigere mich diesen Code durchzulesen, denn er ist schrecklich eingerückt. | ||
Schoasch |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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äinyBetreff: Autokollisionen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group