Memory Access Violation
Übersicht

AmenOBetreff: Memory Access Violation |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Moin @ all...
ich versuche mich gerade am BlitzBasic-Community-Tutorial, oder besser gesagt: ich bin gerade dabei das Pong-Game zu programmieren. Soweit so gut... das Spiel ansich läuft, allerdings erhalte ich bei einer Kollisionsabfrage immer "Memory Access violation." Hier erstmal mein Code: Code: [AUSKLAPPEN] Global xmax = 1024
Global ymax = 768 Global sp1st = 1 Global sp2st = 0 Global xsp1 = xmax / 2 Global xsp2 = ymax / 2 Global fehlersp1 = 0 Global fehlersp2 = 0 Global beweglichkeit = 5 Graphics xmax, ymax, 32, 0 Global frametimer = CreateTimer(60) SetBuffer BackBuffer() SeedRnd MilliSecs() ;Grafikdateien Global kugel = LoadImage("gfx\kugel.png") Global xkugel# = xmax/2 Global ykugel# = ymax/2 Global winkel = Rand(45, 315) Global geschwindigkeit = 5 MidHandle kugel ; <- Ursprung auf Mittelpunkt festlegen Global spieler1 = LoadImage("gfx\spieler_unten.png") MidHandle spieler1 ; <- Ursprung auf Mittelpunkt festlegen MaskImage spieler1, 255, 255, 255 ; <- Tranparenzmodus Global spieler2 = LoadImage("gfx\spieler_oben.png") MidHandle spieler2 ; <- Ursprung auf Mittelpunkt festlegen MaskImage spieler2, 255, 255, 255 ; <- Tranparenzmodus Global begrenzung = LoadImage("gfx\stahltraeger.png") MaskImage begrenzung, 255, 255, 255 ClsColor 255, 0, 0 Function resetkugel() xkugel = xmax / 2 ykugel = ymax / 2 If Rand(0, 1) = 1 Then winkel = Rand(105, 45) Else winkel = Rand(315, 225) EndIf End Function Repeat WaitTimer(frametimer) For z2 = 0 To 1 If z2 = 1 Then x = xmax-50 Else x = 0 EndIf For z = 0 To ymax/50 DrawImage begrenzung, x, z*50 Next Next xkugel = xkugel + Cos(winkel) * geschwindigkeit ykugel = ykugel + Sin(winkel) * geschwindigkeit ; Kugel kollidiert mit den Seitenbegrenzungen If xkugel < 60 Then winkel = 180 - winkel EndIf If xkugel > xmax-60 Then winkel = 180 - winkel EndIf ; Kugel kollidiert mit Spieler If ImagesCollide(spieler1, xsp1, ymax - 10, 0, kugel, xkugel, ykugel, 0) Then winkel = 360 - winkel abweichung = 2 * (xsp1 - xkugel) winkel = winkel + abweichung EndIf If ImagesCollide(spieler2, xsp2, 10, 0, kugel, xkugel, ykugel, 0) Then winkel = 360 - winkel abweichung = 2 * (xsp2 - xkugel) winkel = winkel - abweichung EndIf ; Abweichung prüfen - ob über 360° If winkel < 360 Then winkel = winkel - 360 ElseIf winkel < 0 Then winkel = winkel + 360 EndIf ; Tastatursteuerung If KeyDown(203) And sp1st = 1 Then xsp1 = xsp1 - beweglichkeit EndIf If KeyDown(205) And sp1st = 1 Then xsp1 = xsp1 + beweglichkeit EndIf If KeyDown(44) And sp2st = 1 Then xsp2 = xsp2 - beweglichkeit EndIf If KeyDown(45) And sp2st = 1 Then xsp2 = xsp2 + beweglichkeit EndIf ; Maussteuerung If sp1st = 2 Then xsp1 = xsp1 + MouseXSpeed() EndIf If sp2st = 2 Then xsp2 = xsp2 + MouseXSpeed() EndIf ; automatische Spielersteuerung (Computer) If xsp1 > xkugel And sp1st = 0 Then xsp1 = xsp1 - beweglichkeit ElseIf xsp1 < xkugel And sp1st = 0 Then xsp1 = xsp1 - beweglichkeit EndIf If xsp2 > xkugel And sp2st = 0 Then xsp2 = xsp2 - beweglichkeit ElseIf xsp2 < xkugel And sp2st = 0 Then xsp2 = xsp2 + beweglichkeit EndIf ; Prüfen, ob die neuen Koordinaten außerhalb des Bildschirmes sind If xsp1 < 70 Then xsp1 = 70 ElseIf xsp1 > xmax - 70 Then xsp1 = xmax - 70 EndIf If xsp2 < 70 Then xsp2 = 70 ElseIf xsp2 > xmax - 70 Then xsp2 = xmax - 70 EndIf ; Spielersteuerung abfragen If KeyHit(2) Then sp1st = sp1st + 1 EndIf If KeyHit(3) Then sp2st = sp2st + 1 EndIf If sp1st > 2 Then sp1st = 0 EndIf If sp2st > 2 Then sp2st = 0 EndIf ; Prüfen, ob ein Spieler die Kugel durchgelassen hat If ykugel < -10 Then fehlersp2 = fehlersp2 + 1 resetkugel EndIf If ykugel > ymax + 10 Then fehlersp1 = fehlersp1 + 1 resetkugel EndIf DrawImage kugel, xkugel, ykugel DrawImage spieler1, xsp1, ymax-10 DrawImage spieler2, xsp2, 10 Flip Cls Until KeyHit(1) End Ich habe mir den Code auch schon mehrfach angeschaut und versucht den Fehler zu finden, aber irgendwie... naja, finde ich den halt nicht ![]() Der Fehler tritt bei folgender Zeile auf: Code: [AUSKLAPPEN] If ImagesCollide(spieler1, xsp1, ymax - 10, 0, kugel, xkugel, ykugel, 0) Then
Wenn ich spieler1 durch spieler2 ersetze, dann funktioniert alles problemlos (soweit ich das jetzt testen konnte). In diesem Sinne hoffe ich mal auf eure Unterstützung ![]() PS: Ist es eigentlich normal bzw. warum ist das so, dass LoadImage()-Funktionen nach dem Graphics()-Befehl kommen müssen? ... - Wenn ich die davor schreibe, dann kommt beispielweise bei der Kugel schon, dass die Grafik nicht gefunden werden konnte. Edit:\\ Sorry, hab mich leider in der Kategorie vertan... vielleicht könnte jemand das Thema nach BlitzBasic/Blitz3D verschieben ![]() |
||
- Zuletzt bearbeitet von AmenO am Di, Aug 25, 2009 18:56, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist (u.U.) ein bekannter Bug:
FAQ: ImagesCollide & Memory Access Violation ?! |
||
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) |
AmenO |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Frage ist dann nur, warum es mit dem Bild vom zweiten Spieler bisher immer funktioniert hat... wenn ich also
Code: [AUSKLAPPEN] If ImagesCollide(spieler1, xsp1, ymax - 10, 0, kugel, xkugel, ykugel, 0) Then
durch Code: [AUSKLAPPEN] If ImagesCollide(spieler2, xsp1, ymax - 10, 0, kugel, xkugel, ykugel, 0) Then
ersetze, dann funktioniert das ganze... |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist ja, dass diese Fehler sporadisch und nicht vorhersehbar auftreten. BIG BUG hat im verlinkten Thema eine Ersatzfunktion bereit gestellt.
Irgendein Fehler ist mir im Code nicht aufgefallen. |
||
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) |
AmenO |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke... mit der Funktion scheint es tatsächlich zu funktionieren. Ich hab jetzt mal ein bisschen rumprobiert und es kam nie ein MAV ![]() ![]() |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bilder müssen nach Graphics geladen werden wenn man als flag bei loadimage managed(standard) oder vram speicherung verwendet.
Beim Graphics Befehl wird der Grafikspeicher geflusht(wörtlich: runtergespült). Danach sind alle Bilder weg. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Diese Flags gibt es allerdings nur bei Blitz+. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group