Probleme mit Mexico Shooter
Übersicht

![]() |
Schnäggli92Betreff: Probleme mit Mexico Shooter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach längerer Pause hab ich wieder angefangen an meinem Mexico Shooter zu Proggen. Jetzt hab ich aber zwei Probleme die ich einfach nicht lösen kann.
1. Ich hab mein Player (mänchen) so Programmiert dass wenn er an die Wand kommt er abprallt. Wenn er jetzt aber seitwärz an die wand läuft dan saust er aus dem Spielfeld.Habt ihr Lösungsforschläge? 2. In meinem Spiel soll es mehrere Levels geben. Ich habe mich aber schon überal nach tutorials oder lösungen umgesehen hab aber noch nichts gefunden. Ich könnte Hilfe gebrauchen. ![]() Mein Code: Code: [AUSKLAPPEN] AppTitle "mexico_shooter"
Graphics 1280,1024,32,1 SetBuffer BackBuffer() Global boden = LoadImage ("boden.jpg") Global lv1 = LoadImage ("lv1m.bmp") Global speed = 10 Global speed2 =10 Global laser = LoadImage("shot.bmp") Global teleporter = LoadImage("teleporter.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_pistole.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 MaskImage teleporter,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_pistole.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# DrawImage teleporter,1155,900 If ImagesCollide(ImPlayer(winkel), posx, posy,frame1, lv1, x, y,frame2 ) Then speed = speed-4 Else speed = 10 EndIf If ImagesCollide(ImPlayer2(winkel2), posx2, posy2,frame1, lv1, x, y,frame2 ) Then speed2 = speed2-4 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 If ImagesCollide(ImPlayer(winkel), posx, posy,frame1, teleporter,1155,900,frame2 ) Then posx = 50 posy = 50 EndIf If ImagesCollide(ImPlayer2(winkel), posx2, posy2,frame1, teleporter,1155,900,frame2 ) Then posx2 = 50 posy2 = 50 EndIf Locate 450,30 Print leben1 Locate 550,30 Print leben2 Delay 20 Flip Until KeyHit(1) End Wer dir Bilder braucht: http://rapidshare.de/files/385...r.rar.html Ich danke für eure Hilfe. |
||
![]() |
ShadowJumper |
![]() Antworten mit Zitat ![]() |
---|---|---|
auf deine Frage kann ich dir zwar keine Antwort geben (hab mir den Code noch nicht angesehen), aber dafür gebe ich dir einen Tipp:
durch das zurückschleudern kann es passieren, dass die Figur in einer Wand landet und wenn das passiert kann es auch passieren, dass er aus dem Spielfeld rausfliegt Grund: du überprüfst eine Kollision erst, nachdem du die Figur bewegt hast und schleuderst sie dann zurück mögliche Lösung: du überprüfst erst, ob die Figur nach der Bewegung kollidieren würde und bewegst die Figur, wenn sie dies nicht tut (so musst du sie nicht zurück schleudern) andere mögliche Lösung: du lässt die überprüfung nach der Bewegung, aber du prüfst, wie weit die Figur zurück geschleudert werden kann (am besten mit dem größten Wert beginnen) |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If ImagesCollide(ImPlayer(winkel), posx, posy,frame1, lv1, x, y,frame2 ) Then
speed = -1 Else speed = 10 EndIf If ImagesCollide(ImPlayer2(winkel2), posx2, posy2,frame1, lv1, x, y,frame2 ) Then speed2 = -1 Else speed2 = 10 EndIf So gehts , wen es auch eine nicht sehr elegante version is. Es gäbe da auch eine 2te möglichkeit, nähmlich : Wenn es eine Kollision gibt soll der Speed 0 betragen (so bleibt er stehn steck jedoch in der Wand fest) Darum muss es heisn : Wenn Kolision then Speed = 0 und die Pos soll um 1/-1 versetz werden, jedoch das alleine geht nicht du musst es aus dem winkel ableiten (so dass er die Position des Spieler weg von der Wand "stossen" soll ... Ich code mal rum und zeig dia was daraus gewroden is ![]() Edit : Code: [AUSKLAPPEN] If ImagesCollide (auto(winkel),x,y,0,wall1,1,1,0) And y>y1 y=y+3.5 p1=p1-1 EndIf If ImagesCollide (auto(winkel),x,y,0,wall1,1,1,0) And x>x1 x=x+3.5 p1=p1-1 EndIf If ImagesCollide (auto(winkel),x,y,0,wall1,1,1,0) And y<y1 y=y+3.5 p1=p1-1 EndIf If ImagesCollide (auto(winkel),x,y,0,wall1,1,1,0) And x<x1 x=x+3.5 p1=p1-1 EndIf So hab ich es bei mia gelöst ^^ Das p1 kanste weglassn (das warn die Leben) |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Schnäggli92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok ich danke euch das mit der wand hab ich jetzt gelöst aber das mit den lvs bring ich nich hin. hehe | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group