Seite 1 von 1

KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Verfasst: 16.08.2010 17:16
von STARGÅTE
Tachchen,

nach langer Bugsuche ist bei mir folgendes Problem aufgetreten:

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenWindow(0, 0, 0, 800, 600, "Screen", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
 
DebugWert = 8
    
Repeat

 ClearScreen(0)

 FlipBuffers()
 
 ExamineKeyboard()
 
 Laber$ = Str(DebugWert)
 
 Text$ = KeyboardInkey()
 If Text$ : Debug Text$ : EndIf

Until WindowEvent() = #PB_Event_CloseWindow
Sobald ich irgendwo ein Str() verwende wird die Rückgabe von KeyboardInkey() verändert.
und zwar in der Weise, dass Tasten wie UMSCHALT, ALT, ENTF, usw. auch KeyboardInkey() dazu brinen ein Zeichen zurück zugeben.
Und jetzt kommts ! Es ist genau die erste Stelle der Zahl, die ich bei Str() übergebe.
setze ich DebugWert auf 3, bekomme ich beim drücke von UMSCHALT eine 3
Kommentiere ich das Str() komplett aus, erhalte ich bei den Tasten keine Rückgabestrings

Kann das jemand bestätigen, wenn ja ist das ein BUG, der irgendwie den Buffer von KeyboardInkey und Str vermischt ?

Re: KeyboardInkey() , seltsammes Verhalten zusammen mit Str(

Verfasst: 16.08.2010 17:46
von Jilocasin
Hier genauso, auch mit 4.51 RC 1, XP 32bit.

Edit: Es liegt definitiv am CALL _PB_Str@12
Lässt man den Call auf Str() weg (und repariert natürlich dabei die 12 Byte Stack), klappt auch KeyboardInkey() wie es sollte.
Schätze mal, da wird funktionsintern in PB irgendwas verwurstet.

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Verfasst: 16.08.2010 17:53
von hjbremer
in 4.50 RC2 hab ich das nicht

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Verfasst: 16.08.2010 17:56
von STARGÅTE
hm also n neueres Problem mit 4.51 ...
habs mal ins Bugforum gesteckt

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Verfasst: 16.08.2010 18:39
von Christian+
Also ich kann das Problem bestätigen getestet mit PB 4.50 und 4.51.

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Verfasst: 16.08.2010 19:35
von Jilocasin
Okay, habs mal mit Olly etwas analysiert. PB benutzt in dem Fall für Str() und KeyboardInkey() denselben Buffer. Das ist eigentlich schön und lobenswert. Das Problem ist aber: Str() schreibt etwas rein und KeyboardInkey() kehrt zurück mit einem String aus demselben Buffer, der aber vom KeyboardInkey() selbst nicht modifiziert wurde, wenn keine Taste gedrückt wurde, die es selbst als Zeichen darstellen kann (z.B. Shift, Escape, etc.).

Also doch ein KeyboardInkey()-Bug könnte man sagen :D

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Verfasst: 16.08.2010 20:07
von STARGÅTE
Ech interessant... Jetzt kann ich etwas besser verstehen, warum hier mal irgendeiner gemeint hat "seltsammes Verhalten von PB".

Ich war halt gerade dabei 'n Eingabefeld für 'n Spiel zu schreiben, meine modifizierte Inkey-Variante hat solo wunderbar funktioniert, im spiel jedoch nicht ...
Wieder hat es mich viele Stunden gekostet bis ich nach einander alle Möglichkeiten zusammen hatte ...
und dann "zum Glück" den Fehler durch Str() erklären konnte.
Eine Erklärung (die jetzt sogar noch bestätigt wurde) löst zwar das Problem nicht, aber man weiß wenigstens warum es da ist.

In diesem Fall lässt es sich zwar nur schlecht umgehen, aber ich hoffe mal es wird noch zur nächsten Version behoben.

Danke an der Stelle für genaue analysieren.


EDIT:

Gut mit andere String-Funktionen (Left, Right, Mid) gibs das gleiche Problem, nutzen demnach alle diesen Buffer.