[#23] と連動していますが、:replace-coordsでコピー渡しできるようになったら、
:move-to 内部の:newcoordsを使っている部分を:replace-coordsに置き換えると、
以下の問題がなくなります。:move-to が参照渡しである動作を前提としているコードはほぼ無いように思います。
(send a :move-to b :world)のあとaやbのcoordsを動かすと,bやaのcoordsも同時に動く.:localの時はaやbを動かしても動かない.
:worldを指定すると:newcoordsになるため。-> コピーに変更した方が良くないか??
91.jskrbeusgl$ (setq a (make-coords))
<coordinates #X89243f8="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
92.jskrbeusgl$ (setq b (make-coords :pos (float-vector 300 0 0)))
<coordinates #X8924a58="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
93.jskrbeusgl$ (send a :move-to b :world)
<coordinates #X89243f8="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
94.jskrbeusgl$ a
<coordinates #X89243f8="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
95.jskrbeusgl$ b
<coordinates #X8924a58="" 300.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
96.jskrbeusgl$ (send a :translate #f(100 0 0))
<coordinates #X89243f8="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
97.jskrbeusgl$ a
<coordinates #X89243f8="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
98.jskrbeusgl$ b
<coordinates #X8924a58="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
99.jskrbeusgl$ (send a :move-to b)
<coordinates #X89243f8="" 800.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
100.jskrbeusgl$ a
<coordinates #X89243f8="" 800.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
101.jskrbeusgl$ b
<coordinates #X8924a58="" 400.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
102.jskrbeusgl$ (send a :translate #f(100 0 0))
<coordinates #X89243f8="" 900.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
103.jskrbeusgl$ a
<coordinates #X89243f8="" 900.0="" 0.0="" 0.0="" 0.0="" 0.0="" 0.0="">
104.jskrbeusgl$ b
マニュアルにはなんて書いてあるのかな.
Diff:
Related
Tickets: #23
読み方によっては、参照渡しと読める気がします。ですが、wrtの指定によって挙動が違います。
coordinatesでwrl=:worldの場合と、cas-coordsでwrl=:parentの場合だけ参照渡しで、それ以外は
座標変換が入るので、コピー渡しと同様になっています。
以下、マニュアル抜粋。
:move-to trans &optional (wrt :local)
wrt で表現される trans でこの座標系の rot と pos を置き換える。
なるほど.
なんとなく,当初のメモリを節約して,スピードを早くする,という設計思想で参照渡しになっているのかな.どうしましょうか.