2015/12/24(木) [n年前の日記]
#2 [dxruby] キャラグラエディタのバケツツールが動くようになった
バケツツールが動かなかった理由が分かった。ハッシュを2次元配列に入れて、各ハッシュと比較して領域色か非領域色かを判別してたのだけど、ハッシュを浅いコピーで取り出してたから ―― 要するにポインタをコピーしてたから、おかしなことになってた。
指定された座標に対応するハッシュをコピーして、そのハッシュと、他の座標のハッシュと比較していくのだけど。その最初の指定座標を塗りつぶしてしまうと、領域色として扱うべきハッシュ内容が変わってしまうので、その後の比較が全部おかしくなるという。
最初の座標のハッシュは深いコピーで取り出さないといけない。
_Marshalで配列やハッシュをディープコピーする - Ruby Tips!
a = Marshal.load(Marshal.dump(hoge)) みたいな。
ちなみに Ruby 2.0 では、require 'marshal' を書くとエラーが出てしまった。いきなり Marshal.load(Marshal.dump(hoge)) と書いても動いてるので、基本機能(?)として取り込まれたのかなと想像していたり。
指定された座標に対応するハッシュをコピーして、そのハッシュと、他の座標のハッシュと比較していくのだけど。その最初の指定座標を塗りつぶしてしまうと、領域色として扱うべきハッシュ内容が変わってしまうので、その後の比較が全部おかしくなるという。
最初の座標のハッシュは深いコピーで取り出さないといけない。
_Marshalで配列やハッシュをディープコピーする - Ruby Tips!
a = Marshal.load(Marshal.dump(hoge)) みたいな。
ちなみに Ruby 2.0 では、require 'marshal' を書くとエラーが出てしまった。いきなり Marshal.load(Marshal.dump(hoge)) と書いても動いてるので、基本機能(?)として取り込まれたのかなと想像していたり。
[ ツッコむ ]
以上です。