Seite 1 von 2

Problem mit PB4.11 und Kernel32.dll

Verfasst: 27.04.2006 16:10
von bizzl
Wenn ich foldendes Programm laufenlasse:

Code: Alles auswählen

EnableExplicit

Enumeration 
#schiff=1

EndEnumeration

Define sx.l=640/2,sy.l=400,links.l=#PB_Key_Left,rechts.l=#PB_Key_Right,sspeed=2

If InitSprite()=0:End:EndIf
If InitKeyboard()=0:End:EndIf


OpenWindow(0,100,100,700,500,"Galaxy")
If Not OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0):End:EndIf
;If Not OpenScreen(640,480,32,""):End:EndIf


CreateSprite(#schiff,32,32)
;hier wird normalerweise mittels LoadSprite eun Sprite in 32*32 geladen
StartDrawing(SpriteOutput(#schiff))
Box(0,0,32,32,$808080)
StopDrawing()

Repeat
  FlipBuffers()
  ClearScreen(RGB(0,0,0))
  
  ExamineKeyboard()
  If KeyboardPushed(links)
    If sx>=sspeed
      sx-sspeed
    EndIf
  EndIf
  If KeyboardPushed(rechts)
    If sx<=640-32-sspeed
      sx+sspeed
    EndIf
  EndIf 
  DisplaySprite(#schiff,sx,sy)  
 
  
Until KeyboardPushed(#PB_Key_Escape) 
bekomme ich nach 4-5 mal starten folgende Fehlermeldung:

PUREBASIC0 verursachte einen Fehler durch eine ungültige Seite
in Modul KERNEL32.DLL bei 016f:bff9db61.
Register:
EAX=c00301a8 CS=016f EIP=bff9db61 EFLGS=00010206
EBX=0104fe28 SS=0177 ESP=00f4fdf0 EBP=00f5008c
ECX=00000000 DS=0177 ESI=00000000 FS=5b2f
EDX=bff76855 ES=0177 EDI=bff79198 GS=0000
Bytes bei CS:EIP:
53 8b 15 e4 9c fc bf 56 89 4d e4 57 89 4d dc 89
Stapelwerte:

Der Fehler tritt sowohl im Fullscreen- als auch im Winowedscreen-Modus auf.
Habe mit PB3.94 keinerlei Probleme, tritt nur bei PB4beta11 auf.
Ältere Betas hab ich leider nicht zum testen.
Ich benutze Win98SE auf PIII/667MHz mit 256 MB RAM und DirectX7,
tritt aber auch bei DirectX9 auf.
Könntet ihr das bitte mal testen?
Vielen Dank für eure Mühe.

Verfasst: 27.04.2006 16:16
von ts-soft
Unter XP SP2 keine Probleme, nur das Bemerkungen nicht mit Doppelpunkt
eingeleitet werden und die CPU keine Luft bekommt :mrgreen:

Verfasst: 27.04.2006 16:19
von bizzl
Danke,Doppelpunkt geändert. :D

Wieso bekommt die CPU keine Luft?
Evtl. FlipBuffers(2) ???

Verfasst: 27.04.2006 16:38
von ts-soft
>> Wieso bekommt die CPU keine Luft?
Weil sie zu 100% ausgelastet ist. Da ich mit Spielkram nichts am Hut habe,
kann ich Dir nicht sagen, wie man das ändert, vielleicht mit Delay?

Verfasst: 27.04.2006 17:12
von Kaeru Gaman
ein simples Delay(0) genügt, um der CPU luft zu machen...

ist allerdings für die entwicklungsphase zweitrangig und führt normal nicht zu fehlern...

Verfasst: 27.04.2006 17:14
von SoS
1 mal pro Durchlauf ein Delay(0) reicht aus aber bei Spielen spielt die CPU-Auslastung eh keine so grosse Rolle . ;)

/edit

Da war wohl jemand schneller ...

Verfasst: 27.04.2006 17:18
von ts-soft
>> aber bei Spielen spielt die CPU-Auslastung eh keine so grosse Rolle
Wenn Sie nicht im Fullscreen-Modus laufen schon
Mir reicht ja im allgemeinen Solitär :mrgreen:

Verfasst: 27.04.2006 17:54
von Kaeru Gaman
> Wenn Sie nicht im Fullscreen-Modus laufen schon

deswegen meinte ich ja

> für die entwicklungsphase zweitrangig


zu erwägen, ein spiel so zu schreiben, daß es im windowed-mode mit geringer CPU-auslastung laufen kann, führt bestimmt dazu, die zielgruppe zu vergrößern... ;)

Verfasst: 27.04.2006 21:33
von Toshy
@bizzl
Es wäre hilfreich wenn du sagen würdest welche Zeile den Feheler auslöst. Das zeigt dir doch der Debugger an.

Bisher ist bei mir (Windows98) auch noch kein Fehler aufgetreten.

Verfasst: 28.04.2006 08:22
von bizzl
Der Fehler tritt auf, wenn ich das Programm mit Esc beende,
es gibt keine Fehlermeldung vom Debugger.