[GELÖST:] MAV und Debugger zickt...
Übersicht

![]() |
M0rgensternBetreff: [GELÖST:] MAV und Debugger zickt... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute.
Ich brauch mal ein wenig Hilfe. Also, erstmal der eigentliche Fehler: Ich hab ne Routine geschrieben, um Waffen von der FUnktion her realistisch ins Spiel zu integrieren. Also diese Routine überprüft zuerst, welche Waffe gewählt wurde (momentan sind 6 geplant, eingefügt ist bisher aber nur die Pistole). Je nachdem welche Waffe gewählt wurde wird halt die Schussfrequenz, übertragen, die Geschwindigkeit der Kugeln etc. Jetzt gerade habe ich dann noch eine Abfrage für die Munition und Magazine + Anzeige dafür geschrieben. Funktioniert am Anfang auch sehr gut. Bis zu dem Zeitpunkt, an dem das Magazin, das momentan im Lauf ist, leer ist. Dann sollte es aufgefüllt werden und von der Gesamtzahl der Magazine sollte eines abgezogen werden (wie halt in nem ganz normalen Shooter, ich hoffe ihr wisst wie ichs meine). Aber irgendwie bekomme ich in diesem Moment (also wenn die Momentane Munition 0 ist und man dann klickt (dann sollte er eigentlich nachladen)) einen MAV. Woran das liegt weiß ich wirklich nicht. Läuft mit Types (Die Schüsse/gegner und der SPieler) und Dim Feldern (Waffeneigenschaften (also auch Munition)). Richtig geschrieben müsste alles sein (Ich hab dreimal drüber geguckt). Jetzt wollte ich den Debugger mal anschalten, um zu sehen, was der sagt, jetzt startet das Programm nicht mal mehr. Er zeigt mir folgenden Fehler an: "Startup Error: graphics_create failed" Also, hier wäre der Code wegen der Waffenabfrage: Code: [AUSKLAPPEN] Select Spieler\PGewWaffe Case 1 If Pistole(0) <= 0 Then ;Überprüfen ob überhaupt noch eine Kugel im Lauf ist Pistole(0) = 0 ;Damit auf jeden Fall von 0 an gerechnet wird If Pistole(1) > 0 Then Pistole(0) = Pistole(0) + Pistole(2) ;Waffe nachladen, wenn das Magazin leer war Pistole(1) = Pistole(1) - 1 ;Ein Magazin weniger EndIf ElseIf Pistole(0) > 0 Then Schuss.TPlayerSchuss = New TPlayerSchuss ;Ansonsten schießen Schuss\PSImage = PistSchuss Schuss\PSGeschw = Pistole(5) Pistole(0) = Pistole(0) - 1 If Pistole(0) < 0 Then Pistole(0) = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht EndIf Case 2 nach Case 2 gehts natürlich weiter, aber für die nächste Waffe ist die Abfrage noch nicht drin. Und hier mal der ganze Code: Code: [AUSKLAPPEN] AppTitle "Draw3D V.3.2 - LoadFont3D"
Graphics3D 1024,768,0,1 SetBuffer BackBuffer() SeedRnd MilliSecs() Local Timer=CreateTimer(60) Local Camera=CreateCamera() CameraClsColor Camera,5,5,5 Include "Includes\Draw3D.bb" DrawInit3D(Camera) Origin3D(1024,768) ;_______________________________________________ Global PlayerImage=LoadImage3D("gfx\spaceship3.png", 4, 2) Global MouseImage = loadimage3d("gfx\target.png", 2, 2) Global GegnerTestI = loadimage3d("gfx\block3.bmp", 1, 2) Global PistSchuss = loadimage3d("gfx\PistolenSchuss.png", 2, 2) ;++++++++++++++ Global GegnerTimer = MilliSecs() ;++++++++++++++ Global Schriftart = loadfont3d("Fonts\Cosmic1.png", 2, 2, 0) ;++++++++++++++ Dim Pistole(5) ;0Munition die man hat (schon in der Waffe), 1Magazine die man hat, 2Munition pro Magazin, 3Kadenz, 4Stärke, 5Geschw Dim MP(5) Dim Schrot(5) Dim MG(5) Dim Laser(5) Dim Magnum(5) Pistole(0) = 10 Pistole(1) = 99999 Pistole(2) = 10 Pistole(3) = 400 Pistole(4) = 20 Pistole(5) = 15 MP(0) = 25 MP(1) = 10 MP(2) = 25 MP(3) = 200 MP(4) = 17 MP(5) = 19 Schrot(0) = 8 Schrot(1) = 10 Schrot(2) = 8 Schrot(3) = 700 Schrot(4) = 30 Schrot(5) = 12 MG(0) = 50 MG(1) = 10 MG(2) = 50 MG(3) = 100 MG(4) = 21 MG(5) = 24 Laser(0) = 500 Laser(1) = 0 Laser(2) = 500 Laser(3) = 1 Laser(4) = 26 Laser(5) = 8 Magnum(0) = 7 Magnum(1) = 10 Magnum(2) = 7 Magnum(3) = 590 Magnum(4) = 28 Magnum(5) = 10 ;++++++++++++++ Type TGegnerTest Field GTx#, GTy#, GTWinkel, GTGeschw#, GTImage, GTRotatGe#, Dead, GTRotatRich End Type Type TPlayerSchuss Field PSx#, PSy#, PSWinkel, PSGeschw#, PSImage, PSDead End Type Type TPlayer Field Px#, Py#, PWinkel, PEnergie, PAltx#, PAlty#, PGeschw#, Image, Dead Field PGewWaffe, PSchuTimer, PWafKadenz End Type Global Spieler.TPlayer = New TPlayer Spieler\Px# = (20) Spieler\Py# = (20) Spieler\PWinkel = 0 Spieler\Image = PlayerImage Spieler\PEnergie = 100 Spieler\PGeschw# = 5 Spieler\Dead = 0 Spieler\PGewWaffe = 1 Spieler\PSchuTimer = MilliSecs() ;_________________________________________________ Repeat SpielerSteuerung() SpielerSchuss() SSchussBewegen() GegnerErstellenTest() GegnerBewegenTest() AllesMalen() ;Zeichen() WaitTimer(Timer) RenderWorld Clear3D() Flip 0 Until KeyHit(1) End ;___________________________________________________ Function SpielerSteuerung() Spieler\PAltx# = Spieler\Px# Spieler\PAlty# = Spieler\Py# Spieler\PWinkel#=ATan2(Spieler\Px#-MouseX3D,Spieler\Py#-MouseY3D) ;Blickrichtung ;Geradeaus If KeyDown(17) Then Spieler\Px#=Spieler\Px#-Sin(Spieler\PWinkel)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#-Cos(Spieler\PWinkel)*Spieler\PGeschw# EndIf ;Links If KeyDown(30) Then Spieler\Px#=Spieler\Px#-Sin(Spieler\PWinkel+90)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#-Cos(Spieler\PWinkel+90)*Spieler\PGeschw# EndIf ;Rechts If KeyDown(32) Then Spieler\Px#=Spieler\Px#+Sin(Spieler\PWinkel+90)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#+Cos(Spieler\PWinkel+90)*Spieler\PGeschw# EndIf ;Nach hinten If KeyDown(31) Then Spieler\Px#=Spieler\Px#+Sin(Spieler\PWinkel)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#+Cos(Spieler\PWinkel)*Spieler\PGeschw# EndIf If Spieler\Px# >= 490 Then Spieler\Px# = Spieler\PAltx# If Spieler\Px# <= -490 Then Spieler\Px# = Spieler\PAltx# If SPieler\Py# >= 350 Then Spieler\Py# = Spieler\PAlty# If Spieler\Py# <= -350 Then Spieler\Py# = Spieler\PAlty# End Function ;++++++++++++++ Function GegnerErstellenTest() If (GegnerTimer + Rand(1000,2000)) < MilliSecs() Then For i = 1 To 3 Gegner.TGegnerTest = New TGegnerTest Gegner\GTx# = Rand(-490, 490) Gegner\GTy# = 355 Gegner\GTGeschw# = Rand(1,8) Gegner\GTWinkel = Rand(0,360) Gegner\GtRotatGe = Rand(0,20) Gegner\GTImage = GegnerTestI Gegner\GTRotatRich = Rand(1,2) Gegner\Dead = 0 Next GegnerTimer = MilliSecs() EndIf End Function ;++++++++++++++ Function GegnerBewegenTest() For Gegner.TGegnerTest = Each TGegnerTest Gegner\GTy# = Gegner\GTy# - Gegner\GTGeschw# If Gegner\GTRotatRich = 1 Then ;Im Uhrzeigersinn Gegner\GTWinkel = Gegner\GTWinkel + Gegner\GTRotatGe ElseIf Gegner\GTRotatRich = 2 Then Gegner\GTWinkel = Gegner\GTWinkel - Gegner\GTRotatGe EndIf If Gegner\GTy# > 384 Then Gegner\Dead = 1 If Gegner\Dead = 1 Then Delete Gegner.TGegnerTest Next End Function ;++++++++++++++ Function SpielerSchuss() Select Spieler\PGewWaffe Case 1 Spieler\PWafKadenz = Pistole(3) Case 2 Spieler\PWafKadenz = MP(3) Case 3 Spieler\PWafKadenz = Schrot(3) Case 4 Spieler\PWafKadenz = MG(3) Case 5 Spieler\PWafKadenz = Laser(3) Case 6 Spieler\PWafKadenz = Magnum(3) End Select If ((Spieler\PSchuTimer + Spieler\PWafKadenz) < MilliSecs()) And Spieler\Dead <> 1 Then If MouseDown(1) Then Select Spieler\PGewWaffe Case 1 If Pistole(0) <= 0 Then ;Überprüfen ob überhaupt noch eine Kugel im Lauf ist Pistole(0) = 0 ;Damit auf jeden Fall von 0 an gerechnet wird If Pistole(1) > 0 Then Pistole(0) = Pistole(0) + Pistole(2) ;Waffe nachladen, wenn das Magazin leer war Pistole(1) = Pistole(1) - 1 ;Ein Magazin weniger EndIf ElseIf Pistole(0) > 0 Then Schuss.TPlayerSchuss = New TPlayerSchuss ;Ansonsten schießen Schuss\PSImage = PistSchuss Schuss\PSGeschw = Pistole(5) Pistole(0) = Pistole(0) - 1 If Pistole(0) < 0 Then Pistole(0) = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht EndIf Case 2 Schuss.TPlayerSchuss = New TPlayerSchuss Schuss\PSImage = PistSchuss Schuss\PSGeschw = MP(5) Case 3 Schuss.TPlayerSchuss = New TPlayerSchuss Schuss\PSImage = PistSchuss Schuss\PSGeschw = Schrot(5) Case 4 Schuss.TPlayerSchuss = New TPlayerSchuss Schuss\PSImage = PistSchuss Schuss\PSGeschw = MG(5) Case 5 Schuss.TPlayerSchuss = New TPlayerSchuss Schuss\PSImage = PistSchuss Schuss\PSGeschw = Laser(5) Case 6 Schuss.TPlayerSchuss = New TPlayerSchuss Schuss\PSImage = PistSchuss Schuss\PSGeschw = Magnum(5) End Select Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSWinkel = Spieler\PWinkel Schuss\PSDead = 0 Spieler\PSchuTimer = MilliSecs() EndIf EndIf End Function ;++++++++++++++ Function SSchussBewegen() For Schuss.TPlayerSchuss = Each TPlayerSchuss Schuss\PSx#=Schuss\PSx#-Sin(Schuss\PSWinkel)*Schuss\PSGeschw# Schuss\PSy#=Schuss\PSy#-Cos(Schuss\PSWinkel)*Schuss\PSGeschw# If SChuss\Psx# >= 512 Then Schuss\PSDead = 1 If Schuss\Psx# <= -512 Then Schuss\PSDead = 1 If Schuss\Psy# >= 384 Then Schuss\PSDead = 1 If Schuss\Psy# <= -384 Then Schuss\PSDead = 1 If Schuss\PSDead = 1 Then Delete Schuss.TPlayerSchuss Next End Function ;++++++++++++++ Function AllesMalen() For Gegner.TGegnerTest = Each TGegnerTest Drawimage3D(Gegner\GTImage, Gegner\GTx#, Gegner\Gty#,0, Gegner\GTWinkel, 1) Next For SChuss.TPlayerSchuss = Each TPlayerSchuss Drawimage3D(Schuss\PSImage, Schuss\PSx#, SChuss\PSy#,0, SChuss\PSWinkel, 1.5) Next DrawImage3D(PlayerImage,Spieler\Px#,Spieler\Py#,0,Spieler\PWinkel#,1) Drawimage3d(MouseImage, MouseX3D, MouseY3D, 0, 0, 1) ColorT3D(255, 10, 10, 1) Select Spieler\PGewWaffe Case 1 Text3D(Schriftart, (-400), 300, "Munition: " + Pistole(0) + "/" + Pistole(1), 0, 0, 0) Case 2 Text3D(Schriftart, (-400), 300, "Munition: " + MP(0) + "/" + MP(1), 0, 0, 0) Case 3 Text3D(Schriftart, (-400), 300, "Munition: " + Schrot(0) + "/" + Schrot(1), 0, 0, 0) Case 4 Text3D(Schriftart, (-400), 300, "Munition: " + MG(0) + "/" + MG(1), 0, 0, 0) Case 5 Text3D(Schriftart, (-400), 300, "Munition: " + Laser(0) + "/" + Laser(1), 0, 0, 0) Case 6 Text3D(Schriftart, (-400), 300, "Munition: " + Magnum(0) + "/" + Magnum(1), 0, 0, 0) End Select End Function ;-------------------------------- Wenn ich den irgendwie auseinanderbasteln soll, also, um euch einige Funktionen schneller anzugucken, dann sagt bitte ienfach bescheid, werd ich dann sofort tun. Hoffe ihr könnt mir helfen. Danke schonmal, Lg, M0rgenstern |
||
- Zuletzt bearbeitet von M0rgenstern am Mo, Sep 28, 2009 22:08, insgesamt einmal bearbeitet
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst Du mal die Zeile zeigen (Kommentar), über die sich der Debugger zuletzt beschwert hat? | ||
Starfare: Worklog, Website (download) |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Diese riesigen Abfrageblöcke...
Code: [AUSKLAPPEN] Select Spieler\PGewWaffe
... für jede Waffe sind ziemlich grauenhaft. Jedenfalls könntest du es dir wesentlich einfacher und übersichtlicher machen, wenn du auf Arrays verzichtest, und dafür ebenfalls Types nimmst.
Case 1 Spieler\PWafKadenz = Pistole(3) Case 2 Spieler\PWafKadenz = MP(3) |
||
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) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Öhm, wie wäre das dann umzusetzen?
Ich muss ja im Endeffekt trotzdem überprüfen, welche Waffe gewählt ist und diese dementsrpechend in dem TypBlock ansprechen. Wenn er mir ne Zeile anzeigen würde, hätte ichs schon geschrieben. Da liegt ja eben noch zusätzlich das Problem: Er zeigt keine Zeile an... Er beschwert sich nur. Lg, M0rgenstern |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mir jetzt nicht alles durchgelesen, aber man kann Type-IDs refferenzieren womit dann Querverweise möglich sind.
Type tut! Von dummies für dummies Types Schnellkurs Verwendung von Typen Verwendung von Typen II ( Datenstruktur ) Vielleicht findet sich da was. Ist auf jeden Fall sehr Hilfreich. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Type TPlayer
Field Name$ Field Waffe.TWaffe End Type Type TWaffe Field Name$ Field Magazine%, Magazine_Max% Field Shots_per_Mag% Field Kadenz% Field DMG% End Type Local W_SMG.TWaffe = Create_Waffe("SMG", 12, 2000, 4, 30) Local Player.TPlayer = New TPlayer Player\Name = "Bob" Player\Waffe = W_SMG Print(Player\Name+ " trägt ein "+Player\Waffe\Name) Print("("+Player\Waffe\Magazine+"/"+Player\Waffe\Magazine_Max+", löst "+Player\Waffe\Kadenz+" Probleme die Minute)" ) WaitKey() End Function Create_Waffe.TWaffe(name$, DMG, Kadenz, Magazine, Shots_per_Mag) Local W.TWaffe = New TWaffe W\Name = name$ W\DMG = DMG W\Kadenz = Kadenz W\Magazine_Max = Magazine W\Magazine = Magazine W\Shots_per_Mag = Shots_per_Mag Return W End Function Klar muss man ggf. Abfragen welche Waffe man benutzt, vieles lässt sich aber mit allgemeinem Code erreichen oder als weiterem unter-Type (Waffengattungen) sortieren. Und man sieht, was man rechnet ohne jedes mal nach zu schlagen, welcher Index was bedeutet. |
||
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) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh man.
Danke Xeres. Ich hab mal wieder viel zu kompliziert gedacht, was das angeht. Mein Gedankengang war: "Schön, ich hab Befehle für auf JEDEN TypEintrag oder den ersten bzw letzten zuzugreifen. Wie komm in an die mittleren?" Deine Lösung ist mir gar nicht in den Sinn gekommen. Werd ich gleich noch umsetzen. Dann wird mein Code ein wenig sauberer^^ Dankeschön.... Aber bei meinem Debugg Problem hat das leider noch nichts geholfen... (Das andere Problem löst sich bestimmt damit) Lg, M0rgenstern EDIT: Also, Ich habe jetzt Xeres Lösung eingebaut. Ich muss sagen: Es sieht deutlich besser aus und lässt sich viel einfacher steuern und bearbeiten. SO kann ich wirklich schnell neue Waffen hinzufügen. Werde das wohl auch für die Waffen der Gegner übernehmen. Aber der Fehler (oder besser: BEIDE Fehler) sind immernoch da. So sieht der COde jetzt aus: Code: [AUSKLAPPEN] AppTitle "Draw3D V.3.2 - LoadFont3D"
Graphics3D 1024,768,0,1 SetBuffer BackBuffer() SeedRnd MilliSecs() Local Timer=CreateTimer(60) Local Camera=CreateCamera() CameraClsColor Camera,5,5,5 Include "Includes\Draw3D.bb" DrawInit3D(Camera) Origin3D(1024,768) ;_______________________________________________ Global PlayerImage=LoadImage3D("gfx\spaceship3.png", 4, 2) Global MouseImage = loadimage3d("gfx\target.png", 2, 2) Global GegnerTestI = loadimage3d("gfx\block3.bmp", 1, 2) Global PistSchuss = loadimage3d("gfx\PistolenSchuss.png", 2, 2) ;++++++++++++++ Global GegnerTimer = MilliSecs() ;++++++++++++++ Global Schriftart = loadfont3d("Fonts\Cosmic1.png", 2, 2, 0) ;++++++++++++++ Type TWaffe Field WName$ Field WMunition%, WMagazine% Field WSchussProMagazin%, WKadenz%, WDamage%, WSpeed% End Type Global PW_Pistole.TWaffe = WaffeErstellen("Pistole", 10, 9999, 10, 400, 20, 15) Type TGegnerTest Field GTx#, GTy#, GTWinkel, GTGeschw#, GTImage, GTRotatGe#, Dead, GTRotatRich End Type Type TPlayerSchuss Field PSx#, PSy#, PSWinkel, PSGeschw#, PSImage, PSDead End Type Type TPlayer Field Px#, Py#, PWinkel, PEnergie, PAltx#, PAlty#, PGeschw#, Image, Dead Field PGewWaffe.TWaffe, PSchuTimer, PWafKadenz End Type Global Spieler.TPlayer = New TPlayer Spieler\Px# = (20) Spieler\Py# = (20) Spieler\PWinkel = 0 Spieler\Image = PlayerImage Spieler\PEnergie = 100 Spieler\PGeschw# = 5 Spieler\Dead = 0 Spieler\PGewWaffe = PW_Pistole Spieler\PSchuTimer = MilliSecs() ;_________________________________________________ Repeat SpielerSteuerung() SpielerSchuss() SSchussBewegen() GegnerErstellenTest() GegnerBewegenTest() AllesMalen() ;Zeichen() WaitTimer(Timer) RenderWorld Clear3D() Flip 0 Until KeyHit(1) End ;___________________________________________________ Function SpielerSteuerung() Spieler\PAltx# = Spieler\Px# Spieler\PAlty# = Spieler\Py# Spieler\PWinkel#=ATan2(Spieler\Px#-MouseX3D,Spieler\Py#-MouseY3D) ;Blickrichtung ;Geradeaus If KeyDown(17) Then Spieler\Px#=Spieler\Px#-Sin(Spieler\PWinkel)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#-Cos(Spieler\PWinkel)*Spieler\PGeschw# EndIf ;Links If KeyDown(30) Then Spieler\Px#=Spieler\Px#-Sin(Spieler\PWinkel+90)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#-Cos(Spieler\PWinkel+90)*Spieler\PGeschw# EndIf ;Rechts If KeyDown(32) Then Spieler\Px#=Spieler\Px#+Sin(Spieler\PWinkel+90)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#+Cos(Spieler\PWinkel+90)*Spieler\PGeschw# EndIf ;Nach hinten If KeyDown(31) Then Spieler\Px#=Spieler\Px#+Sin(Spieler\PWinkel)*Spieler\PGeschw# Spieler\Py#=Spieler\Py#+Cos(Spieler\PWinkel)*Spieler\PGeschw# EndIf If Spieler\Px# >= 490 Then Spieler\Px# = Spieler\PAltx# If Spieler\Px# <= -490 Then Spieler\Px# = Spieler\PAltx# If SPieler\Py# >= 350 Then Spieler\Py# = Spieler\PAlty# If Spieler\Py# <= -350 Then Spieler\Py# = Spieler\PAlty# End Function ;++++++++++++++ Function GegnerErstellenTest() If (GegnerTimer + Rand(1000,2000)) < MilliSecs() Then For i = 1 To 3 Gegner.TGegnerTest = New TGegnerTest Gegner\GTx# = Rand(-490, 490) Gegner\GTy# = 355 Gegner\GTGeschw# = Rand(1,8) Gegner\GTWinkel = Rand(0,360) Gegner\GtRotatGe = Rand(0,20) Gegner\GTImage = GegnerTestI Gegner\GTRotatRich = Rand(1,2) Gegner\Dead = 0 Next GegnerTimer = MilliSecs() EndIf End Function ;++++++++++++++ Function GegnerBewegenTest() For Gegner.TGegnerTest = Each TGegnerTest Gegner\GTy# = Gegner\GTy# - Gegner\GTGeschw# If Gegner\GTRotatRich = 1 Then ;Im Uhrzeigersinn Gegner\GTWinkel = Gegner\GTWinkel + Gegner\GTRotatGe ElseIf Gegner\GTRotatRich = 2 Then Gegner\GTWinkel = Gegner\GTWinkel - Gegner\GTRotatGe EndIf If Gegner\GTy# > 384 Then Gegner\Dead = 1 If Gegner\Dead = 1 Then Delete Gegner.TGegnerTest Next End Function ;++++++++++++++ Function SpielerSchuss() If ((Spieler\PSchuTimer + Spieler\PGewWaffe\WKadenz) < MilliSecs()) And Spieler\Dead <> 1 Then If MouseDown(1) Then If Spieler\PGewWaffe\WMunition <= 0 Then ;Überprüfen ob überhaupt noch eine Kugel im Lauf ist Spieler\PGewWaffe\WMunition = 0 ;Damit auf jeden Fall von 0 an gerechnet wird If Spieler\PGewWaffe\WMagazine > 0 Then Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition + Spieler\PGewWaffe\WSchussProMagazin ;Waffe nachladen, wenn das Magazin leer war Spieler\PGewWaffe\WMagazine = Spieler\PGewWaffe\WMagazine - 1 ;Ein Magazin weniger EndIf ElseIf Spieler\PGewWaffe\WMunition > 0 Then Schuss.TPlayerSchuss = New TPlayerSchuss ;Ansonsten schießen Schuss\PSImage = PistSchuss Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1 If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht EndIf Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSWinkel = Spieler\PWinkel Schuss\PSDead = 0 Spieler\PSchuTimer = MilliSecs() EndIf EndIf End Function ;++++++++++++++ Function SSchussBewegen() For Schuss.TPlayerSchuss = Each TPlayerSchuss Schuss\PSx#=Schuss\PSx#-Sin(Schuss\PSWinkel)*Schuss\PSGeschw# Schuss\PSy#=Schuss\PSy#-Cos(Schuss\PSWinkel)*Schuss\PSGeschw# If SChuss\Psx# >= 512 Then Schuss\PSDead = 1 If Schuss\Psx# <= -512 Then Schuss\PSDead = 1 If Schuss\Psy# >= 384 Then Schuss\PSDead = 1 If Schuss\Psy# <= -384 Then Schuss\PSDead = 1 If Schuss\PSDead = 1 Then Delete Schuss.TPlayerSchuss Next End Function ;++++++++++++++ Function AllesMalen() For Gegner.TGegnerTest = Each TGegnerTest Drawimage3D(Gegner\GTImage, Gegner\GTx#, Gegner\Gty#,0, Gegner\GTWinkel, 1) Next For SChuss.TPlayerSchuss = Each TPlayerSchuss Drawimage3D(Schuss\PSImage, Schuss\PSx#, SChuss\PSy#,0, SChuss\PSWinkel, 1.5) Next DrawImage3D(PlayerImage,Spieler\Px#,Spieler\Py#,0,Spieler\PWinkel#,1) Drawimage3d(MouseImage, MouseX3D, MouseY3D, 0, 0, 1) ColorT3D(255, 10, 10, 1) Text3D(Schriftart, (-400), 300, "Munition: " + Spieler\PGewWaffe\WMunition + "/" + Spieler\PGewWaffe\WMagazine, 0, 0, 0) End Function ;-------------------------------- Function WaffeErstellen.TWaffe(name$, Munition, Magazine, SchussProMagazin, Kadenz, Damage, Speed) Local W.TWaffe = New TWaffe W\WName = name$ W\WMunition = Munition W\WMagazine = Magazine W\WSchussProMagazin = SchussProMagazin W\WKadenz = Kadenz W\WDamage = Damage W\WSpeed = Speed Return W End Function UNd hier der Code an der vermeintlichen Fehlerstelle (wegen dem MAV): Code: [AUSKLAPPEN] If Spieler\PGewWaffe\WMunition <= 0 Then ;Überprüfen ob überhaupt noch eine Kugel im Lauf ist
Spieler\PGewWaffe\WMunition = 0 ;Damit auf jeden Fall von 0 an gerechnet wird If Spieler\PGewWaffe\WMagazine > 0 Then Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition + Spieler\PGewWaffe\WSchussProMagazin ;Waffe nachladen, wenn das Magazin leer war Spieler\PGewWaffe\WMagazine = Spieler\PGewWaffe\WMagazine - 1 ;Ein Magazin weniger EndIf ElseIf Spieler\PGewWaffe\WMunition > 0 Then Schuss.TPlayerSchuss = New TPlayerSchuss ;Ansonsten schießen Schuss\PSImage = PistSchuss Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1 If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht EndIf Also, ich denke, dass der Fehler irgendwo in dieser verschachtelten IF Abfrage liegt. Aber richtig geschlossen mit Endif ist es ja und es überschneidet sich ja auch nicht blöd von irgendwelchen Variablen her. (Achso, ich habe Xeres Code übrigens verstanden. Nicht dass ihr glaubt ich würde nur Copy - Paste machen^^) Lg, M0rgenstern EDIT 2: Also, der Debugger spinnt wohl wegen Draw3D. Spinnt bei allen Projekten, in denen ich Draw3D benutze (Auch in den Draw3D Beispielen). Das Problem kann somit als hinfällig angesehen werden. Aber das Problem mit dem MAV besteht immernoch. Aber bei jeder Waffe eben. Da kann ja wohl nur was in der Abfrage: Code: [AUSKLAPPEN] Function SpielerSchuss()
If ((Spieler\PSchuTimer + Spieler\PGewWaffe\WKadenz) < MilliSecs()) And Spieler\Dead <> 1 Then If MouseDown(1) Then If Spieler\PGewWaffe\WMunition <= 0 Then ;Überprüfen ob überhaupt noch eine Kugel im Lauf ist Spieler\PGewWaffe\WMunition = 0 ;Damit auf jeden Fall von 0 an gerechnet wird If Spieler\PGewWaffe\WMagazine > 0 Then Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition + Spieler\PGewWaffe\WSchussProMagazin ;Waffe nachladen, wenn das Magazin leer war Spieler\PGewWaffe\WMagazine = Spieler\PGewWaffe\WMagazine - 1 ;Ein Magazin weniger EndIf ElseIf Spieler\PGewWaffe\WMunition > 0 Then If Spieler\PGewWaffe = PW_Schrot For i = 1 To 5 ;Schrotflinte... Damit es ne schöne Streuung gibt Schuss.TPlayerSchuss = New TPlayerSchuss Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSWinkel = Spieler\PWinkel+Rand(-23,23) Schuss\PSImage = PistSchuss SChuss\PSDead = 0 Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed Next Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1 If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 Else Schuss.TPlayerSchuss = New TPlayerSchuss ;Ansonsten schießen Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSWinkel = Spieler\PWinkel Schuss\PSImage = PistSchuss Schuss\PSDead = 0 Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1 If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht EndIf EndIf Schuss\PSDead = 0 Spieler\PSchuTimer = MilliSecs() EndIf EndIf End Function nicht stimmen. Aber ich finde den Fehler einfach nicht ![]() Wäre wirklich toll, wenn mir jemand helfen könnte. Lg, M0rgenstern EDIT 3: Durch auskommentieren bin ich zu dem Ergebnis gekommen, dass der Fehler in dieser Zeile zu liegen scheint: Code: [AUSKLAPPEN] ElseIf Spieler\PGewWaffe\WMunition > 0 Then
Wie gesagt: Er SCHEINT da zu liegen. Ich hab mal die andere Bedingung komplett ausgeklammert und der MAV tritt immernoch auf. Obs aber wirklich die Zeile ist kann ich nicht mit Sicherheit sagen. Vielleich hilft das nur mal weiter. Lg, M0rgenstern EDIT 4: FEHLER GEFUNDEN!!!!!!! Es tut mir leid. Der Fehler war so dumm. Weiß nicht, warum mir das nicht aufgefallen ist. Man sehe sich die FUnktion an: Code: [AUSKLAPPEN] Function SpielerSchuss() If ((Spieler\PSchuTimer + Spieler\PGewWaffe\WKadenz) < MilliSecs()) And Spieler\Dead <> 1 Then If MouseDown(1) Then If Spieler\PGewWaffe\WMunition <= 0 Then ;Überprüfen ob überhaupt noch eine Kugel im Lauf ist Spieler\PGewWaffe\WMunition = 0 ;Damit auf jeden Fall von 0 an gerechnet wird If Spieler\PGewWaffe\WMagazine > 0 Then Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition + Spieler\PGewWaffe\WSchussProMagazin ;Waffe nachladen, wenn das Magazin leer war Spieler\PGewWaffe\WMagazine = Spieler\PGewWaffe\WMagazine - 1 ;Ein Magazin weniger EndIf ElseIf Spieler\PGewWaffe\WMunition > 0 Then If Spieler\PGewWaffe = PW_Schrot For i = 1 To 5 ;Schrotflinte... Damit es ne schöne Streuung gibt Schuss.TPlayerSchuss = New TPlayerSchuss Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSWinkel = Spieler\PWinkel+Rand(-23,23) Schuss\PSImage = PistSchuss SChuss\PSDead = 0 Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed Next Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1 If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 Else Schuss.TPlayerSchuss = New TPlayerSchuss ;Ansonsten schießen Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw Schuss\PSWinkel = Spieler\PWinkel Schuss\PSImage = PistSchuss Schuss\PSDead = 0 Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1 If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht EndIf EndIf Schuss\PSDead = 0 Spieler\PSchuTimer = MilliSecs() EndIf EndIf End Function Und dann schaue man etwas genauer hin: Code: [AUSKLAPPEN] If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht
EndIf EndIf Schuss\PSDead = 0 Spieler\PSchuTimer = MilliSecs() EndIf EndIf Und dann sieht man, dass die Variable Zitat: Schuss\PSDead auch auf 0 gesetzt wird, wenn gar kein neuer Schuss erstellt wurde, da dieser Befehl außerhalb der IF Anweisungen liegt.
Ist geändert, Fehler gitbs nicht mehr und es funktioniert. Liebe Grüße, M0rgensten ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group