10/05/29 02:44:47
FreeTrain EX Avという、A列車で行こう4のクローンになりたいゲームを作ってるのですが。
URLリンク(sourceforge.jp)
(最新βが2.1.1.5で、ソースは直下trunk/以下が該当します)
パラメータをリアルタイム表示するウィンドウを追加して行ってたら、データセーブ時に特定の
ウィンドウをあけっぱなしているとエラーが起こるようになってしまいました。
>アセンブリ 'FreeTrain.Core, Version=2.1.1.5, Culture=neutral, PublicKeyToken=null' の型
> 'freetrain.world.rail.StationInformationWindow' はシリアル化可能として設定されていません。
データのセーブロードはBinaryFormatterを使ったシリアライズでしています。
ウィンドウのFormをシリアライズしようとしてるわけではなく、パラメータの変化をイベント起こして
もらって表示をリフレッシュするために使ってるイベントハンドラが参照を呼んでこのウィンドウ
のシリアライズをしたがっているみたいなのです。
core/world/rail/Station.csが駅本体部分で、ここでイベントの宣言を
public delegate void StationCounterListener();
public StationCounterListener onStationChange;
とやってて、駅に乗降があったときにonStationChange();してます。
パラメータを表示してるウィンドウはcore/controllers/rail/StationInformationWindow.csで
public StationInformationWindow( Station st ) {
this.station = st;
InitializeComponent();
onUpdate();
station.onStationChange += new StationCounterListener(onUpdate);
}
ここでstation.onStationChange += の行をコメントアウトするとエラーがなくなります。
しかし他にもイベントハンドラでリアルタイム書き換えしてるウィンドウ多数あるのにエラーに
なってなくて、なぜこのウィンドウだけなるのかが分からないのです。