Probleme mit der Kollision
Übersicht

![]() |
Schnäggli92Betreff: Probleme mit der Kollision |
![]() Antworten mit Zitat ![]() |
---|---|---|
tach allerseits
ich habe ein kleines multiplayer game gemacht aber habe keine gescheite kollision hingebracht. gibt es da eine andere möglichkeit als mit speed = speedp -1 möglichkeit? vielen dank für eure antworten Code: [AUSKLAPPEN] AppTitle "mexico_shooter"
Graphics 800,600,0,1 SetBuffer BackBuffer() Global boden = LoadImage ("boden.jpg") Global lv1 = LoadImage ("lv1_600mal800.bmp") Global speed = 10 Global speed2 =10 Global laser = LoadImage("shot.bmp") Global shot_counter = 0 Global shot_counter2 = 0 Global x= 0 Global y = 0 Global gegnerx = 400 Global gegnery = 300 Global leben1 = 50 Global leben2 = 50 posx#=400 posy#=300 posx2#=600 posy2#=500 winkel=0 Dim ImPlayer(359) TFormFilter 0 Dim ImPlayer2(359) TFormFilter 0 ;Laden des Spielers AutoMidHandle True ImPlayer(0)=LoadImage("b_pistolek.bmp") MaskImage ImPlayer(n),255,0,255 For n=1 To 359 ImPlayer(n)=CopyImage(ImPlayer(0)) MaskImage lv1,255,0,255 MaskImage ImPlayer(n),255,0,255 RotateImage ImPlayer(n),-n Next Type shot ;erstellt den Type "shot" Field shot_x ;x Koordinate Field shot_y ;y Koordinate Field w End Type ;Laden des Spielers AutoMidHandle True ImPlayer2(0)=LoadImage("b_pistolek.bmp") MaskImage ImPlayer2(t),255,0,255 For t=1 To 359 ImPlayer2(t)=CopyImage(ImPlayer2(0)) MaskImage ImPlayer2(t),255,0,255 RotateImage ImPlayer2(t),-t Next Type shot2 ;erstellt den Type "shot" Field shot2_x ;x Koordina Field shot2_y ;y Koordinate Field w End Type Local s.shot2 Color 0,0,0 ClsColor 255,255,255 ;Hauptschleife/Mainloop Repeat Cls If KeyDown(75) Then winkel=winkel+10 If KeyDown(77) Then winkel=winkel-10 If KeyDown(72) posx#=posx#+Cos(winkel) * speed posy#=posy#-Sin(winkel) * speed EndIf If winkel>359 Then winkel=0 If winkel<0 Then winkel=359 If KeyDown(30) Then winkel2=winkel2+10 If KeyDown(32) Then winkel2=winkel2-10 If KeyDown(17) posx2#=posx2#+Cos(winkel2) * speed2 posy2#=posy2#-Sin(winkel2) * speed2 EndIf If winkel2>359 Then winkel2=0 If winkel2<0 Then winkel2=359 DrawImage boden,0,0 DrawImage lv1,0,0 DrawImage ImPlayer(winkel),posx#,posy# DrawImage ImPlayer2(winkel2),posx2#,posy2# If ImagesCollide(ImPlayer(winkel), posx, posy,frame1, lv1, x, y,frame2 ) Then speed = speed-1 Else speed = 10 EndIf If ImagesCollide(ImPlayer2(winkel2), posx2, posy2,frame1, lv1, x, y,frame2 ) Then speed2 = speed2-1 Else speed2 = 10 EndIf If KeyDown(208) Then shot_counter = shot_counter +1 End If ;sollte der Zähler 5 erreicht haben, erstelle einen neuen schuss If shot_counter = 2 Then info.shot = New shot ;hier wird der schuss erstellt info\shot_x = posx# ;da er ja beim Spieler erstellt werden soll : wird die Schusskoordinate(shot_X) auf hero_x und +5 rüber gelegt info\shot_y = posy# ;beim Y wert ist es nicht anders, da der Hero ja auch rauf und runter fahren kann info\w = winkel shot_counter = 0 ; den Zähler auf 0 damit es wieder von vorne losgehen kann End If ; so nachdem der Schuss/laser erstellt wurde, müssen wir ja sagen das JEDER schuss sich nach oben bewegen soll For info.shot = Each shot ; so wird jeder einzelne Schuss angesprochen info\shot_y = info\shot_y + Cos(info\w+90) * 20 info\shot_x = info\shot_x + Sin(info\w+90) * 20 ; die Schüsse werden um -8 nach oben bewegt DrawImage laser,info\shot_x,info\shot_y ; jetzt noch jeden schuss malen Next For info.shot = Each shot If ImagesCollide(laser,info\shot_x,info\shot_y,frame1, lv1, 0, 0,frame2 ) Then Delete info.shot Next If KeyDown(57) Then shot_counter2 = shot_counter2 +1 End If ;sollte der Zähler 5 erreicht haben, erstelle einen neuen schuss If shot_counter2 = 5 Then s.shot2 = New shot2 ;hier wird der schuss erstellt s\shot2_x = posx2# ;da er ja beim Spieler erstellt werden soll : wird die Schusskoordinate(shot_X) auf hero_x und +5 rüber gelegt s\shot2_y = posy2# ;beim Y wert ist es nicht anders, da der Hero ja auch rauf und runter fahren kann s\w = winkel2 shot_counter2 = 0 ; den Zähler auf 0 damit es wieder von vorne losgehen kann End If ; so nachdem der Schuss/laser erstellt wurde, müssen wir ja sagen das JEDER schuss sich nach oben bewegen soll For s.shot2 = Each shot2 ; so wird jeder einzelne Schuss angesprochen s\shot2_y = s\shot2_y + Cos(s\w+90) * 20 s\shot2_x = s\shot2_x + Sin(s\w+90) * 20 ; die Schüsse werden um -8 nach oben bewegt DrawImage laser,s\shot2_x,s\shot2_y ; jetzt noch jeden schuss malen Next For s.shot2 = Each shot2 If ImagesCollide(laser,s\shot2_x,s\shot2_y,frame1, lv1, 0, 0,frame2 ) Then Delete s.shot2 Next For s.shot2 = Each shot2 If ImagesCollide(laser,s\shot2_x,s\shot2_y,frame1,ImPlayer(winkel),posx#,posy#,frame2 ) Then leben1 = leben1-1 Next For s.shot2 = Each shot2 If ImagesCollide(laser,s\shot2_x,s\shot2_y,frame1,ImPlayer(winkel),posx#,posy#,frame2 ) Then Delete s.shot2 Next If leben1 = 0 Then posx = 450 posy = 60 leben1 = 50 For info.shot = Each shot If ImagesCollide(laser,info\shot_x,info\shot_y,frame1,ImPlayer2(winkel),posx2#,posy2#,frame2 ) Then leben2 = leben2-1 Next For info.shot = Each shot If ImagesCollide(laser,info\shot_x,info\shot_y,frame1,ImPlayer2(winkel),posx2#,posy2#,frame2 ) Then Delete info.shot Next If leben2 = 0 Then posx2 = 350 posy2 = 60 leben2 = 50 Locate 450,30 Print leben1 Locate 550,30 Print leben2 Delay 20 Flip Until KeyHit(1) End |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erst mal ein paar Grundsätzliche Tipps:
TFormFilter ![]() Die Types Shot und Shot2 haben den Selben inhalt. Als Unterscheidungsmöglichkeit benutzt man eher ein zusätzliches Field. Drehungen um 360 benötigen das Maximum an Speicher, wenn man keine 1° Drehung erkennen kann, reichen größere Drehschritte. Locate und Print kannst du dir zu gunsten von Text ![]() Statt Delay und Flip ist ein Timer und Flip 0 zu empfehlen. Den ganze Wust an Schüssen kann man in eine For...Each Schleife packen, momentan gehst du die Typeliste für so ziemlich jede einzelne Aktion durch, dass zieht unglaublich an der Performance. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Schnäggli92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für die antwort ich kümmere mich später um die performance aber kenn niemand eine andere lösung um eine kollision zu realisieren??
vielen dank für die antwort |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group