2018/02/24(土) [n年前の日記]
#1 [dxruby] DXOpalのz値指定描画について
DXOpalを触った際に、z値を指定して描画したら前後関係がおかしくなった、ような気がしたのだけど本当にそうなるのか動作確認をしてみたり。
◎ DXRubyで動作確認。 :
◎ DXOpalで動作確認。 :
次に、DXOpal で動作確認。
_DXOpal z order
Google Chrome 上での結果。
Firefox ESR 上での結果。
やはり気のせいではなかったらしい。しかも、Google Chrome と Firefox ESR で試したら、異なる結果画面になった…。
つまり、DXOpal でz値を指定しつつ描画しても、前後関係は不定になる模様。
_DXOpal z order
Google Chrome 上での結果。
Firefox ESR 上での結果。
やはり気のせいではなかったらしい。しかも、Google Chrome と Firefox ESR で試したら、異なる結果画面になった…。
つまり、DXOpal でz値を指定しつつ描画しても、前後関係は不定になる模様。
◎ 少し調べてみた。 :
もしかして z値は無視しているのかなと思ったけれど、
_dxopal/window.rb at master - yhara/dxopal
を眺めた感じでは、キューをソートしてるように見える。変だな…。何故こんな動作に…。
どうやら、描画要求をキューに登録する際、現在のキューの個数、つまり登録した順番も記録しておくことで、後に同じz値の描画要求があった時は登録順とも比較してソートする、という処理をしようとしてるっぽい。
ということは、登録順の数値の範囲と重ならない大きなz値、もしくは小さなz値を指定してやれば問題を回避できるのかな。と思ったけれど、Firefox上では予想通りの結果になったものの、Google Chrome上では相変わらず前後が不定な状態になった。なんでや…。
ん? そもそも、まずはz値同士で比較して、という形になってないような気がしてきた。
どうやら、描画要求をキューに登録する際、現在のキューの個数、つまり登録した順番も記録しておくことで、後に同じz値の描画要求があった時は登録順とも比較してソートする、という処理をしようとしてるっぽい。
ということは、登録順の数値の範囲と重ならない大きなz値、もしくは小さなz値を指定してやれば問題を回避できるのかな。と思ったけれど、Firefox上では予想通りの結果になったものの、Google Chrome上では相変わらず前後が不定な状態になった。なんでや…。
ん? そもそも、まずはz値同士で比較して、という形になってないような気がしてきた。
irb(main):026:0> a = [[5, 0], [4, 1], [3, 2], [2, 3], [1, 4]] => [[5, 0], [4, 1], [3, 2], [2, 3], [1, 4]] irb(main):027:0> a.sort{ |a,b| a[0] == b[0] ? a[1] <=> b[1] : a[0] <=> a[1] } => [[1, 4], [2, 3], [3, 2], [5, 0], [4, 1]] irb(main):028:0> a.sort{ |a,b| a[0] == b[0] ? a[1] <=> b[1] : a[0] <=> b[0] } => [[1, 4], [2, 3], [3, 2], [4, 1], [5, 0]]もしかして、こうじゃないかな…。たぶん…。
[ ツッコむ ]
以上です。