Wieso gibt es immer ein Illegal memory address??
Übersicht BlitzBasic Beginners-Corner
Schnäggli92Betreff: Wieso gibt es immer ein Illegal memory address?? |
Di, Dez 11, 2007 23:13 Antworten mit Zitat |
|
---|---|---|
Hallo ich mache ein multiplayer shooter. Jetzt habe ich schon die steuerung der beiden players. Aber wen ich es spiele kommt nach einer weile immer Illegal memory address und blitz basic hängt sich auf. Ich habe vieles probiert aber es kommt immer wieder.
Code: [AUSKLAPPEN] AppTitle "mexico_shooter"
Graphics 1280,1024,32,1 SetBuffer BackBuffer() Global boden = LoadImage ("boden.jpg") Global lv1 = LoadImage ("Lv1.bmp") Global speed = 5 Global speed2 = 5 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 posx#=400 posy#=300 posx2#=400 posy2#=300 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 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 Koordinate 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+5 If KeyDown(77) Then winkel=winkel-5 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+5 If KeyDown(32) Then winkel2=winkel2-5 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,x,y DrawImage ImPlayer(winkel),posx#,posy# DrawImage ImPlayer2(winkel2),posx2#,posy2# If ImagesCollide(ImPlayer(winkel), posx, posy,frame1, lv1, x, y,frame2 ) Then speed = speed-2 Else speed = 5 EndIf If ImagesCollide(ImPlayer2(winkel2), posx2, posy2,frame1, lv1, x, y,frame2 ) Then speed2 = speed2-2 Else speed2 = 5 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 = 5 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) * 8 info\shot_x = info\shot_x + Sin(info\w+90) * 8 ; 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) * 8 s\shot2_x = s\shot2_x + Sin(s\w+90) * 8 ; die Schüsse werden um -8 nach oben bewegt DrawImage laser,s\shot2_x,s\shot2_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 Delay 20 Flip Until KeyHit(1) End Den Fehler zeigt er bei : Code: [AUSKLAPPEN] If ImagesCollide(ImPlayer2(winkel2), posx2, posy2,frame1, lv1, x, y,frame2 ) Ich kann mir das nicht erklären.
Was bedeutet eigentlich Illegal memory address??? Stimt da irgend etwas mit dem Arbeitsspeicher nicht?? Danke im voraus für eure antworten. |
||
Foppele |
Di, Dez 11, 2007 23:31 Antworten mit Zitat |
|
---|---|---|
Kann an einem doppelten Variablennamen liegen, vielleicht erstellst du irgendwo eine Variable die es schon gibt. Sag ich mal ohne mir deinen Code angeschaut zu haben... | ||
Schnäggli92 |
Di, Dez 11, 2007 23:52 Antworten mit Zitat |
|
---|---|---|
ok ich hab mir den code nochma angesehen aber ich kann nirgens 2 mal den gleichen variablennamen sehen. ich kan mir auch nicht denken dass er erstellt wird. | ||
Eingeproggt |
Mi, Dez 12, 2007 0:03 Antworten mit Zitat |
|
---|---|---|
Ich hab beim schnellen durchschauen auch grad keinen Fehler gefunden, aber wollte dich auf die etwas "chaotische" Ladereihenfolge aufmerksam machen: Du benutzt 2mal "TFormFilter 0" praktisch hintereinander, ebenso benutzt du 2mal "AutoMidHandle True" im Laden und verwendest "n" ohne sie vorher deklariert zu haben. Ist zwar alles nciht falsch, aber etwas unschön.
Wollte ich mal loswerden. Illegal Memory Adress heißt übrigens "Ungültige Speicheradresse". Und das heißt soviel wie: Du zwingst Blitz, auf einen Speicherplatz zuzugreifen, der nicht Blitz gehört, sozusagen. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Foppele |
Mi, Dez 12, 2007 1:30 Antworten mit Zitat |
|
---|---|---|
Stimmt,
ich habs verwechselt mit Memory Acess Violation, also @ schnäggli vergiss das mit der doppelten Variable, sorry. |
||
XeresModerator |
Mi, Dez 12, 2007 17:49 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] If ImagesCollide(ImPlayer2(winkel2), posx2, posy2,frame1, lv1, x, y,frame2 ) Existiert das Bild für den entsprechenden Winkel? Existieren frame1 und frame2? Wenn der Debugger in der Zeile abbricht, schau dir die Werte der Variablen an.
|
||
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) |
panky |
Mi, Dez 12, 2007 20:50 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] 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 In der ersten Zeile wird ImPlayer(n) gemasked, obwohl "n" noch nicht definiert ist. Und: Warum hast du "winkel2" nicht als Global definiert? Eine Hilfe wäre es noch zu wissen, wann genau der Fehler auftritt... Ist der Winkel ein bestimmter, stürzt es generell nach 10 Sekunden ab oder ist kein verantwortliches Handeln erkennbar?! MfG pY |
||
d-bug |
Mi, Dez 12, 2007 20:58 Antworten mit Zitat |
|
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. d-bug |
||
Schnäggli92 |
Do, Dez 13, 2007 17:52 Antworten mit Zitat |
|
---|---|---|
ehm ne. Nicht nach 10 sekunden. Manchmal nach 5 sekunden manchmal erst nach 5min ich weiss nich wieso und auch nicht bei einer bestimmten bewegung oder so. | ||
Dreamora |
Do, Dez 13, 2007 18:05 Antworten mit Zitat |
|
---|---|---|
2 Möglichkeiten:
1. NVIDIA mit problematischen treibern 2. du lädst einfach zu viele daten für den VRAM der Karte wo du es testests. sollte dein player bild zb 128x128 oder so sein wäre das recht gut möglich auf "billigen" und "office systemen" |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Schnäggli92 |
Mi, Jan 09, 2008 21:34 Antworten mit Zitat |
|
---|---|---|
Also zuerst danke mal für die Antworten. Also mein NVIDIA treiber sollt eigentlich der richtige sein. Und mein pc ist auch nich der billigste also ich hab ne : GeForce 7600GT mit 256MB das sollte doch reichen? CPU: Core2Duo E6300 und 1GB RAM an dem kans nicht liegen. Och ich komm nich weiter. | ||
Dreamora |
Do, Jan 10, 2008 1:27 Antworten mit Zitat |
|
---|---|---|
Das hat nix mit "gut" und "nicht gut" zu tun sondern damit das gewisse NVIDIA treiber (hauptsächlich betatreiber und so, also alles was nicht whql zertifiziert ist) ganz einfach keinen oder fehlerhaften DX7 support haben. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
ozzi789 |
Do, Jan 10, 2008 12:48 Antworten mit Zitat |
|
---|---|---|
Vieleicht hilft es wen du uns sagst was für ein Betriebssystem hast...
Ich hat das auch mal.. Must nur nen neun Treiber raufschmeissn (bei mia gings nacher) |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group