プロジェクトの保存
今の実装での動きを確認する
スケッチではなくpaintingで1つプレイヤを描画しただけのプロジェクトの保存を実行し、プロジェクトのIslandに外部からインポートしているものの中身を調べてみました。
インポートしているものは143個ありました。ほとんどは、クラス、シンボル(メソッド名)ですが、いくつか気になるものがありました。
- Point (-1@-1)オブジェクトが一つ混じっていました。昨日のDurationもそうですが、こんなオブジェクトをなんでFarRefで参照しているんだろう?
- CFieldDefinitionオブジェクトがありましたが、CProject2のtopWindow・World、CSpriteのSpriteCostumeという限られたものです。存在するプレイヤが持つもの全てをインポートいているならまだ理解できるのですが。むしろこれら3つはバグか何かで混じっていたと見るほうが自然な気がします(恐れを知らないコメント。。。)。
オブジェクトがどのIsland中に作成されているか神経を使うのはしんどいです。
ファイルへの出力処理を調べる
http://tweak.impara.de/TECHNOLOGY/Whitepapers/Projects/ には、
- イメージへの保存と同じ ImageSegmentテクノロジを使っている
- 保存フォーマットは通常のイメージと同じ
と読めますが、現状では、イメージの保存処理(DataStream>>nextPutあたり)とは、似てはいますが独立した実装になっています。イメージへの出力の場合、一般的なオブジェクトの保存をする場合、DataStream>>writeInstance で、インスタンス変数を分解していって保存するような汎用的な処理となっています。一方、Tweakのプロジェクト保存処理ではこの分解機能がまだ実装されていません。このため、Tweak用の保存メソッド(例えば Boolean>>exportOnIslandWriter)が実装されているオブジェクトのみ、プロジェクトへ正しく保存できます。Durationにはこのメソッドが実装されていないため、昨日のエラーになったと思われます。(Durationを FarRef参照していることの是非は別として)
このあたりは、シカゴのイベントが終わって開発が次のステップに進むまで待ってるしかないような気がします。