Memory Access Viotlation wegen Rechnung?
Übersicht

![]() |
M0rgensternBetreff: Memory Access Viotlation wegen Rechnung? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute.
Ich habe gerade ein Problem das ich mir nicht erklären kann. Ich versuche meinen Panzer möglichst realistisch fahren zu lassen und will ihn deshalb in den Kurven bremsen. Aber ich bekomme nach einiger Zeit einen MAV Error. Hier der Code wo er drauf zeigt: Code: [AUSKLAPPEN] If KeyDown(200) And KeyDown(203) Then player\Geschw# = player\Geschw#-Reibung#/10.5 player\winkel#=player\winkel#-player\DrehB# EndIf If KeyDown(200) And KeyDown(205) Then player\Geschw# = player\Geschw#-Reibung#/10.5 player\winkel#=player\winkel#+player\DrehB# EndIf If KeyDown(200) Then player\Geschw# = player\Geschw#+player\BeschV# If Not ChannelPlaying (playerMID) Then playerMID = PlaySound (playerM) EndIf Else player\Geschw# = player\Geschw#-Reibung# EndIf Achja. Reibung ist 0.5 groß, die Beschleunigung 0.05 und die Höchstgeschwindigkeit 6. Achso die Drehbarkeit liegt bei 1.5. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Welche Zeile markiert der Debugger? Gibt er keine genauere Auskunft? | ||
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 ![]() |
---|---|---|
Er markiert in diesem Abschnitt :
Code: [AUSKLAPPEN] If KeyDown(200) And KeyDown(205) Then
player\Geschw# = player\Geschw#-Reibung#/10.5 player\winkel#=player\winkel#+player\DrehB# EndIf Diese Zeile: player\Geschw# = player\Geschw#-Reibung#/10.5 Achso, da fällt mir grade was auf, meine Bremse funktiniert gar nicht: Code: [AUSKLAPPEN] If KeyDown(208) And player\Geschw# > 0 Then player\Geschw# = player\Geschw# - player\Brems# EndIf Da kann ich auch keinen Fehler erkennen. Lg, M0rgenstern |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abgesehen Davon, dass ich mir allerhöchstens vorstellen könnte, dass player=null ist, Reibung realisiert man so:
Geschwindigkeit=Geschwindigkeit+s Geschwindigkeit=geschwindigkeit*r;r<1 Die beiden zahlen lassen sich anpassen: G+s=G*r s=(1+r)G Geschwindigkeit=s/(1+r) ist dabei die Endgeschwindigkeit. Bei Größerem a beschleunigst du stärker und bei kleinerem r wird die Reibung größer. |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also. Im Grunde habe ich die Reibung so realisiert.
Ich habe sie wegen der Kurve nur nochmal arg geteilt damit sie den Spieler nicht komplett bremst. Zur Erinnerung: Reibung=0.5 Beschleunigung=0.05. Korrigier mich falls ich dich falsch verstehe. Aber ich sehe nicht wo ich die Reibung falsch angewendet hätte. Sie ist im ersten Code sogar mit drin: Else player\Geschw# = player\Geschw#-Reibung# EndIf Edit: Wenn ichs nicht mit Ideal sondern mit Blitz3D laufen lasse passiert folgendes: Er zeigt auf diese Zeile: Code: [AUSKLAPPEN] DrawImage PlayerD(player\winkel#), player\x# , player\y#
Die in diesem Abschnitt steht: Code: [AUSKLAPPEN] Repeat
WaitTimer (frametimer) Cls BodenM() Steuerung() ;Spieler malen DrawImage PlayerD(player\winkel#), player\x# , player\y# Text 300,500, "Geschwindigkeit: " + player\Geschw#,1,1 Flip(0) Until KeyDown(1) Die Function Steuerung hab ich ja zum Großteil schon gepostet. Er beschwert sich bei Blitz3D dann mti der Meldung "Image does not exist" |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht solltest du
Zitat: For player.player=each player
DrawImage PlayerD(player\winkel#), player\x# , player\y# Next schreiben. Ist doch kein Wunder, warum das nicht klappt |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
...nicht wenn es nur eine Instanz vom Player gibt...
Beim "PlayerD(player\winkel#)" sicher das das gesamte Array auch mit Bildern gefüllt ist? |
||
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 ![]() |
---|---|---|
Dann erklär mir mal bitte warum das so klar ist?
Es ging ja alles bis ich die Sache mit der Kurve drin hatte... Vorher ist der brav Kurven gefahren nur eben ohne langsamer zu werden... Und ich bekomme diese Fehlermeldung erst nach ein paar Kurven. Also ich seh wirklich keinen Grund ein "For .. each" einzubauen, da ich nur EINEN Spieler habe der gezeichnet wird. Wenn irgendwann Gegner dazukommen dann muss ich das benutzen aber jetzt nicht. Ich wüsste wirklich mal gerne warum das bitte so klar ist... Hab ich da etwa übersehen weshalb ich For each benutzen müsste? Lg, M0rgenstern Ah Xeper war schneller. Also das array sieht so aus: Dim PlayerD(360) Und die Funktion mit dem es gefüllt ist ist: For winkela = 0 to 359 Wenn einige Teile des arrays nicht voll sind ist das doch egal, oder? es ist doch schlimmer wenn es zu viele sind, oder seh ich das falsch? Edit2: Fehler gefunden, das muss so aussehen: Code: [AUSKLAPPEN] ;Drehen:
If KeyDown(203) Then player\winkel#=player\winkel#-player\DrehB#;links If KeyDown(205) Then player\winkel#=player\winkel#+player\DrehB#;rechts ;Winkel außerhalb?: If player\winkel#>=360 Then player\winkel#=player\winkel# Mod 360 If player\winkel#<0 Then player\winkel#=360+player\winkel# If KeyDown(200) And KeyDown(203) Then player\Geschw# = player\Geschw#-Reibung#/2 player\winkel#=player\winkel#-player\DrehB# EndIf If player\winkel#>=360 Then player\winkel#=player\winkel# Mod 360 If player\winkel#<0 Then player\winkel#=360+player\winkel# If KeyDown(200) And KeyDown(205) Then player\Geschw# = player\Geschw#-Reibung#/10.2 player\winkel#=player\winkel#+player\DrehB# EndIf If player\winkel#>=360 Then player\winkel#=player\winkel# Mod 360 If player\winkel#<0 Then player\winkel#=360+player\winkel# Der Modulus muss immer gerechnet werden wenn irgendws gedreht wird... . |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
36 Bilder reichen btw völlig aus, also Dim Auto(35), weil niemand die paar Pixel drehung bemerken wird, frisst nur verdammt viel Speicher. | ||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja das ist mir bewusst.
Ich mach das jetzt nur bis es fertig ist damit ich allgemein mehr Freiraum habe. Die Optimierung kommt später. Aber Danke. Lg; M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group