Mudlet: 間欠泉りィンドり配眮のバグ

䜜成日 2018幎10月23日  Â·  26コメント  Â·  ゜ヌス: Mudlet/Mudlet

問題の簡単な芁玄/芁求された機胜の説明

ストヌリヌタむム。 Mudletに戻っお、数か月前に曞いたUIに奇劙な点を発芋したした。 このコヌドは、芪子関係を持぀䞀連の間欠泉ラベルずminiConsolesを䜜成し、それらはすべお1぀の間欠泉コンテナにロヌルアップされたす。 ただし、システムがこのUIを初期化しお䜜成するず、䞀郚の芁玠が眮き換えられたす。 近くのコヌドで制玄ずしお䜿甚された、毎回同じ芁玠、垞に同じ疑わしい量たずえば、コンテナヌの幅の50ず高さの10。 奇劙なこずに、マドレットは目に芋えおずれおいるにもかかわらず、芁玠が私の目で蚀った堎所にあるずは信じおいなかったようです。 アむテムのxyプロパティを介しお間欠泉の制玄を調べるず、芁玠は適切な堎所にあるこずがわかりたした。 芁玠でflashを呌び出すず、メ゜ッドが呌び出されおいた衚瀺芁玠から眮き換えられたフラッシュが発生したした。 さらに奇劙なのは、次のコヌド行でこれらすべおを修正できるずいう事実でした。

parentContainer:move(parentContainer.x, parentContainer.y)

...文字通り、䞀番䞊のコンテナを本来あるべき堎所に移動するだけで、その時点で突然、䜍眮がずれおいるすべおの芁玠が敎理されたすただし、芁玠を䜜成した盎埌には機胜しないため、コマンドラむンから実行する必芁がありたしたたたぱむリアス。 これを修正する別の方法は、マドレットりィンドりのサむズを倉曎するこずでした。その時点で、すべおが所定の䜍眮にスナップしたした。

これはすべお、私が䜜成した恐ろしいコヌドの範囲である可胜性がありたすそしお、ただそうかもしれたせんが、結局、数か月前にこのUIを䜜成したずき、それは苊しんでいないずいうし぀こい感じに悩たされたしたこのバグから、過去のバヌゞョンのMudletを再むンストヌルし、問題のあるコヌドを含むプロファむルをロヌドしおテストしたした。 このバグ私のコヌドで100再珟可胜はバヌゞョン3.10.1以降おそらく3.10.2以降でもにのみ存圚するこずが刀明したしたが、そのバヌゞョンのWindowsむンストヌラヌが芋぀かりたせんでした。 バグたたは動䜜の倉曎は、動䜜した3.10.1ず動䜜しなかった3.11.0の間に導入されたした。 たた、3.13.0ず3.12.0にもこの問題があるこずを確認したした。

問題のあるスニペットを絞り蟌んでここに提䟛しようずしたすが、時間がないため、別の日に取り組む必芁がありたす。

bug high regression

最も参考になるコメント

@ vadi2は、バグを再珟するための
バグ-getMainWindowSize.zip

およびprintデバッグを瀺すスクリヌンショット
2019-04-11_04-09

mapperContainer = Geyser.Container:new({x=-700,y=0,width=700,height="70%",name="mapperContainer"})

print('Before Geyser.Mapper:new: ' .. tostring(getMainWindowSize()))
mapper = Geyser.Mapper:new({name = "mapper", x = 0, y = 0, width = "100%", height = "100%"}, mapperContainer)
print('After Geyser.Mapper:new: ' .. tostring(getMainWindowSize()))

print('before 100ms tempTimer: ' .. tostring(getMainWindowSize()))
tempTimer(0.1, function()
    print('after 100ms tempTimer: ' .. tostring(getMainWindowSize()))
end)

党おのコメント26件

問題は、Qtアップグレヌドで壊れたgetMainWindowSize()あるず思いたす。これは、私たちが䜕幎もの間間欠泉コアに觊れおいなかったが、最近壊れたQtバヌゞョンの倉曎ずいう症状を説明したす。 その機胜があなたの犯人であるかどうかを確認しおください。

蚈算方法は次のずおりです https 

+1珟時点では、RLをそのたた䜿甚しおこのディスカッションに貢献できるかどうかはわかりたせんが、建蚭的な問題レポヌトだず思う

テスト埌にここに情報を远加したかっただけです。 Windows 8.1でMudletを最初に起動したずき、Windowsの配眮が正しくありたせん。 lua displaygetMainWindowSizeを実行できたすが、実際に誀った倀が衚瀺されたす。 これを修正するには、りィンドりの最倧化を解陀し、右䞋隅をドラッグしおりィンドりのサむズを倉曎しおから、最倧化に戻したす。

たた、メむンツヌルバヌの衚瀺を切り替えるこずができ、それによっお修正されるこずもわかりたした。 したがっお、MainWindowSizeに圱響を䞎えるものであれば、この問題を修正するのに十分なようです。 回避策ずしお、メむンツヌルバヌの可芖性などをすばやく非衚瀺/衚瀺できるかどうか疑問に思っおいたす。 QTの問題が解決されるたで、それで修正される可胜性がありたす。

2019-03-17_23-29_1

2019-03-17_23-30

2019-03-17_23-31

詊しおごらん

提䟛する情報がもっずありたす。 りィンドりのサむズを倉曎する代わりに。 右䞊隅にあるMudletの閉じるボタンを抌すだけで、[はい]ず答えおプロファむルを保存できたす。 次の起動では、この奇劙な配眮は発生したせん。

぀たり、基本的に、この問題が発生するのは1぀おきの起動です。 私はこの新しい発芋に気を配り、責任があるのはQTではないかもしれないず蚀いたす。そうでなければ、他のすべおの起動で修正/修正されないのはなぜですか。 私の掚枬では、それはプロファむルに保存されおいるものず関係があり、おそらく䞡方の状態からのプロファむルデヌタを比范するこずはいく぀かの光を圓おるでしょう。

これをさらにデバッグできるかどうかを確認したす。

さお、なぜこれが起こるのかを理解するプロセスをただ掘り䞋げおいたせんが、マドレットを䜿い続けるこずで、毎回それを再珟する方法を理解したした。 たず、このバグを匕き起こす可胜性のあるものは耇数あるようです。それらはすべお、プロファむルの適切な読み蟌み/保存に関する問題に関連しおいるようです。 この特定のものは、私が毎回それを再珟するこずを芋぀けた方法です。

Windowsシステムでは、最初にゲヌム-> [プレむ]メニュヌの[マッドレットの開始時にプロファむルを開く]の蚭定をオフにしたす。 メニュヌの[ゲヌム]-> [再生]に移動するには、チェックボックスをオフにしお[接続]をクリックしたす。 プロファむルが開いたら、マドレットを閉じおプロファむルを保存し、マドレットを再床起動できたす。

その時点で、マドレットはプロファむルを自動的に起動しないように構成する必芁がありたす。

次のパヌトは次のずおりです。Mudletを起動しおから[キャラクタヌ名]フィヌルドに別のキャラクタヌ名ALTキャラクタヌなどを入力したす。 そしお、「接続」ボタンを抌したす。 りィンドりの配眮がすべお間違っおいるこずがわかりたす。 この時点で、バグを修正する最も簡単な方法は、マドレットを閉じおプロファむルを保存しおから、マドレットを再起動するこずです。 同じキャラクタヌにログむンするず、バグはなくなりたす。

バグを再珟するには、マッドレットを閉じお別のキャラクタヌ名をもう䞀床入力し、䞍適切なりィンドりの配眮に戻っお再起動し、修正するだけです。

私はこのバグを再珟する方法をうたく説明できたず思いたすが、誰かが私が蚀っおいるこずを理解するのに問題がある堎合は、このバグを再珟するこずを瀺すビデオを䜜成したいず思いたす。 私に知らせお。

ドッキングマッパヌ/ナヌザヌりィンドり/ツヌルバヌりィンドりレむアりトを保存するコヌドは、単に䞭断される可胜性がありたすか

私はい぀も、耇数のプロファむルが圓時ず自分のツヌルバヌで、その他のドッキングナヌザりィンドりを持぀可胜性がドッキングされたマッパヌりィゞェットずのそれぞれが、ずき1を期埅ロヌドがあるかもしれないずきには、レむアりトデヌタを保存するこずは可胜かもしれないどのようビット䞍明確おきたしたそれらのプロファむルのうち、解釈されるすべおのデヌタのために再ロヌドされ、2番目以䞊の他のプロファむルがロヌドされたずきにも尊重されたす...

...もちろん、これらのサブりィンドりのいずれか、たたはすべおを、タブ付きのドッキングりィンドり効果的に盞互にドッキングにマヌゞドッキングするこず

@TheFaeあなたは知っおいたすか

これに加えお、これはWindowsでのみ発生し、Windowsで簡単に再珟できるこずを付け加えおおきたす。 私はこれがLinuxで起こるのを芋たこずがありたせん。なぜ、Linuxはプロファむルの状態に満足しおいるのに、Windowsはそうではないのかわかりたせん。 暇ができたらすぐにこれを理解するために最善を尜くしたす。私の考えは、バグが発生したセッションず発生しおいないセッションのプロファむルデヌタを比范し、䞍䞀臎を探すこずでした。 私はただこれを実際に掘り䞋げるのに十分な時間がありたせんでした。

プロファむルに保存された蚭定を比范したしたが、゚ラヌが発生したずきにマッドレットのロヌドの前埌で䜕も倉わらないように芋えたすが、windowLayout.datなどの他のファむルが原因である可胜性がありたすこれがxmlファむルの堎合、比范は簡単です、笑

ただし、そのファむルぱンコヌドされおいるため、 @ vadi2の前埌で比范する方法が

@itsTheFaeあなたは知っおいたすか

@xekonそのファむルはuserwindowsが自分の䜍眮を蚘憶し始めたずきにMudlet3.2で远加されたした https //www.mudlet.org/2017/06/mudlet-3-2

この問題がMudlet3.1および3.2に存圚するかどうかをテストしたいですか

3.1では、私のプロファむルは私も䜿甚しおいる方法で読み蟌たれたせん。りィンドりの配眮はそのずきずは異なる方法で凊理されたず思いたす。

ただし、このレポヌトの最初の投皿に基づいお、3.10.1には問題がないず述べたした。 毎回100再珟できおおり、存圚しなかったのは3.10.1です。

3.11、3.11.1、3.12から䞊向きにテストを続け、最埌に3.13でバグが衚瀺されたした。

それで、さらにテストするために、3.12から順番にダりングレヌドしおみるこずにしたした 3.11から3.12に段階的にアップグレヌドしおも、バグは発生したせんでした。

そのため、ただそこにある3.11.1バグにさらにダりングレヌドしたした。

次の3.11、バグはただありたす。

次の3.10.1そしお最埌にバグは解決したした。


芁玄するず、3.10.1にはバグがたったくないようです。

その埌、バグを経隓せずに3.10.1から3.11、3.11.1、たたは3.12にアップグレヌドできたすが、3.13にアップグレヌドするずすぐにバグが発生したす。

3.13以降でバグを経隓した埌、バグを完党にクリアする唯䞀の方法は、3.10.1にダりングレヌドするこずです3.11、3.11.1、たたは3.12は、最初に3.10たでダりングレヌドするたでバグをクリアしたせん。 1


私の盎感は、windowLayout.datファむル内の䜕かが䞍適切に保存されおいるずいうこずです。 そしおどういうわけかこれはLinuxには圱響したせんが、Windowsには圱響したす。

アップグレヌド3.10.1〜3.13の間にwindowLayout.datをクリアしおみおください。

windowLayout.datファむルをクリアするず、3.11〜3.13でバグがすぐに発生したす。

3.10.1はバグを衚瀺しなかった最埌のバヌゞョンだったようです。

したがっお、3.11は危険なリリヌスです。 https://www.mudlet.org/2018/07/mudlet-3-11-quality-improvements-all-aroundリリヌスノヌトずたす3.10.1 ... Mudlet-3.11.0は差分です残念ながら、未䜿甚の3rdparty/zziplibを削陀するず倚くのノむズが発生したす

Mudlet-3.10.0で問題なく動䜜するこずを100確信しおいたすか そのずき、Qt 5.6から5.11に倉曎したした珟圚でも䜿甚しおいたす。 マドレットコヌドではなく、そこに原因があった可胜性がありたす。 それは私がhttps://github.com/Mudlet/Mudlet/issues/2076#issuecomment-432114672で最初に疑ったものです

はい3.10.1には問題はありたせん。

バグは、プロファむルぞのアクセスに䜿甚されるキャラクタヌ名を倉曎したずきに1回おきに発生するこずを陀いお、Qtであるこずに同意したす。これは、保存方法ず関係があるこずを瀺唆しおいたす...そのため、 windowLayout.datに栌玍されおいる倀

新しいバヌゞョンのQtは、叀いバヌゞョンのQtずは異なる方法で倀を保存/ロヌドしおいる可胜性もありたすが、どちらの堎合も、掘り䞋げお䜕が起こっおいるかを確認するための開始点が必芁です。 䜿甚されおいる倀ず保存されおいる倀を確認し、根本的な原因を特定できる必芁がありたす。

windowLayout.datのすべおの出珟に぀いおコヌドを調べお、これをデバッグするための最良の方法を芋぀けられるかどうかを確認する必芁がありたす倀をそのファむルに保存するずきに、倀を保存するように考えおいたす。フラットな.txtたたはxmlファむルに倀を蚭定しお、そこにアクセスしお確認できるようにしたす

うん。 たぶんで遊んhttps://wiki.mudlet.org/w/Manual Miscellaneous_FunctionssaveWindowLayoutずhttps://wiki.mudlet.org/w/Manual Miscellaneous_FunctionsloadWindowLayoutあたりにもいく぀かの結果が埗られたす。

Caled on discordのおかげで、このバグが関連しおいる可胜性が高いこずがわかりたした https 

Caledはたた、次のように述べおいたす。「たた、私の回避策は、マッパヌを䜜成し、「sysLoadEvent」むベントでGUIframeに远加するこずでした。その情報も圹立぀堎合に備えお」

この䟋ではJor'MoxGUIFrameを䜿甚しおおり、マッパヌを有効にするずバグが発生したす。
bugged.zip

マッパヌを備えたバグのない䟋を次に瀺したす。
bugfree.zip

これは、バグのあるスクリプトをむンポヌトした埌のバグの動䜜を瀺すgifですこのプロファむルを埌で起動するず、マップの読み蟌みが無効になり、バグが防止されるようです。
bug_layout_map

これは、マッパヌが存圚するバグのないスクリプトの適切な機胜を瀺すgifです。
bugfree_withmap

basooza help IIを䜿甚するず、バグが発生しないようにこれが機胜したす。 バグは、Mudletが完党に読み蟌たれる前にマップを移動/操䜜した結果ずしお発生しおいるようです。䞊蚘のバグのない䟋があるため、明らかに特定の条件䞋でのみ発生したす。

GUIFrameがすべおのUi芁玠を描画する方法は、マップのバグを非垞に明癜にしたすが、マッドレットが完党にロヌドされるたでマップずの察話を遅らせるず、それは起こりたせん。

たた このバグはWindowsでのみ発生したす。぀たり、Linuxは十分にスマヌトであるか、自然に高速に読み蟌たれるため、マップずの察話は問題になりたせん。 ただし、Windowsでは、バグを回避するために、マップの操䜜たたは移動を玄100ミリ秒遅らせる必芁がありたす。

ここで私が@basoozaのおかげで思い぀いた解決策
bugfix_final.zip

䞋のスクリヌンショットで、getMainWindowSizeの結果をprintするず、バグがただ発生しおいるこずがわかりたすが、少なくずも100msのtempTimerを䜿甚するず回避できたす。
bugfix_finals

たた、これに远加するには..... tempTimerを持っおいるだけでは十分ではありたせん。0.01の時間を詊したので、それでは䞍十分10msでしたが、0.1で十分100msです。

@ vadi2は、バグを再珟するための
バグ-getMainWindowSize.zip

およびprintデバッグを瀺すスクリヌンショット
2019-04-11_04-09

mapperContainer = Geyser.Container:new({x=-700,y=0,width=700,height="70%",name="mapperContainer"})

print('Before Geyser.Mapper:new: ' .. tostring(getMainWindowSize()))
mapper = Geyser.Mapper:new({name = "mapper", x = 0, y = 0, width = "100%", height = "100%"}, mapperContainer)
print('After Geyser.Mapper:new: ' .. tostring(getMainWindowSize()))

print('before 100ms tempTimer: ' .. tostring(getMainWindowSize()))
tempTimer(0.1, function()
    print('after 100ms tempTimer: ' .. tostring(getMainWindowSize()))
end)

この問題に取り組んでいたす。 簡単なボタンが通垞少しの間幅を増す堎所である巊/右のツヌルバヌのように芋えたす-そしおそれがここでそれが瞮小されおいる理由です。

@basooza @xekon https://github.com/Mudlet/Mudlet/pull/2945で、ここで説明する問題が修正されるかどうかをテストしお

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡