Probleme mit der Kollision
Übersicht
BlitzBasic
Beginners-Corner|
|
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 gilt für alle Bilder, einmal Ein- oder Ausschalten genügt.
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 abgewöhnen.
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
BlitzBasic
Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group

