トップページgamedev
819コメント672KB

鉄道経営系ゲーム製作スレッド Ver.7

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2010/03/30(火) 22:05:34ID:62jSr8U0
鉄道および都市経営シミュレーションゲーム制作の
情報交換スレッドです。

[前スレ]
鉄道経営系ゲーム製作スレッド Ver.6
http://pc11.2ch.net/test/read.cgi/gamedev/1239023536/

[このスレッドで主に話題となるゲーム]
FreeTrain EX Another version
http://sourceforge.jp/projects/freetrain-exav/
FreeTrain EX Another version wiki
http://www19.atwiki.jp/freetrain-exav/
Tera Train
http://teratrain.la.coocan.jp/wiki/?FrontPage
FreeTrain
http://www.kohsuke.org/freetrain/
FreeTrainヘルプ
http://www.kohsuke.org/freetrain/wiki/pukiwiki.php  (IDとPASSはダイアログよく読んだら分かる)

[関連サイト]
アートディンク
http://www.artdink.co.jp/
0337名前は開発中のものです。2010/04/20(火) 04:53:26ID:GaCLh8++
でいつまでこの独り言は続くの?
いい加減自分のブログでチラ裏はやって欲しいわ。
しかもレベル低い話ばっかりだし、他の回答しているやつの方がレベル高いから
その人達が開発した方がいいんじゃないのか?
もっとC#の勉強してから質問して欲しいわ。
0338名前は開発中のものです。2010/04/20(火) 06:01:43ID:IH4/h5eA
鉄道経営系ゲームのスレであって、FTの専用スレじゃないのに自分がFTのプロマネだからかしらんけど、横暴になってきてるな。
0339Umezawa2010/04/20(火) 06:04:06ID:rrPJfq+/
>>335
>>336
わざわざ動画まで作っていただきありがとうございます。
あれを見て思ったんですが、昼夜の表現が無いのはヘンですねぇ。

他の列車を表示すれば、確かに少しは変わるでしょうね。
ただの四角い箱であれば表示できるのですが、
何色で表示すべき? という問題があります。
列車の画像から一番使用ドット数が多い色を抜き出せば
いいのかな? 単純な処理だけど面倒そう。


山手線マップはロードできるようにしますね。
0340名前は開発中のものです。2010/04/20(火) 06:07:40ID:72gm2NAQ
>>338
他に何について話すんだよ
0341Umezawa2010/04/20(火) 06:14:28ID:rrPJfq+/
>>337
C#のプログラミング能力が一定以上あって、
かつFreeTrainに対する意欲がある←これ重要

今のところ上記に該当するのは、りおりおさんただ一人かと


>>338
このスレでFreeTrain以外に話題になったのって、
「A列車で逝こう」くらいじゃない?
「TeraTrain」は盛り上がりかけたけど……。
「最強都市計画」は論外www
0342Umezawa2010/04/20(火) 07:28:33ID:rrPJfq+/
>>336
とりあえず、山手線マップがロードできるよう修正した
ものをアップしました。

ただ、以前頂いたマップなので、最新の山手線が配置された
マップを読み込める保障はありませんが。
0343Umezawa2010/04/20(火) 08:11:02ID:rrPJfq+/
>>334
TrainInformationWindow ザッと見てみました。
確かに TrainTrackingWindow とそっくりですね。
似たようなものが2つある理由を把握するまで
少々時間が掛かりそうです。

っていうか、自分でUI作れって話ですね。


それに、前面展望画面に他の列車も表示するとなれば、
どのみち全ての列車情報を取得する必要がありますから、
あまり追跡中列車にこだわることはないのかも。

でも頑張って他列車を表示してもただの箱というオチw
列車のモデリングをどこかから拝借してくる?
0344名前は開発中のものです。2010/04/20(火) 08:28:48ID:uyvV9z+C
目的地の概念は実装して欲しい。難しくないから
0345riorio ◆rio2xMQlrQ 2010/04/20(火) 08:31:52ID:/ag6H5my
>>343
>似たようなものが2つある理由を把握するまで
>少々時間が掛かりそうです。

ゴメン
それ私の仕業なので、私が自白する以外に把握するすべはないですw

流れを言うと自動追跡はYzさんが作りかけてたんだけど、列車選択窓の実装に苦労されてて
(パネルで実装してみたら、パネルがマップごとスクロールしてあっちいっちゃったり)
それを自分もどうにもできなくて。
本体いじってたら(旧名)TrainTrackingWindow==(現名)TrainInformationWindowがある
ことに気づき。
ただ(旧名)TrainTrackingWindowで列車を選ぶと、すべてのマップビューが一度にその
列車を追ってしまって都合が悪かったので、このままではダメだと。
ただし後方互換性のためにこれはTrainInformationWindowと名前を変えて残し。
マップビュー1つと紐付けられたパチモンを真似してコード書いたのが今のTrainTrackingWindow
なのデス

追跡は1つしかしないけど乗客の乗り方は複数監視したいってときに、Tracking1つと
Information3つ開くみたいなやりかたができて便利かなぁと思ってるのは自分ひとりか?(爆

>列車のモデリングをどこかから拝借してくる?

モデリングツールを提供してもらえれば、私がしこしこ作りますよ。
理想を言えば、存在する列車プラグインの車両1両1両につき1つの3Dモデルですね。
コントリビューションIDで一対一。
0346名前は開発中のものです。2010/04/20(火) 08:37:54ID:tReuWWAO
○○は簡単だ、といってる本人が簡単なはずのそれをC#のコードで書いて
出してきたことが今まで一度もないんじゃないかこのスレ
0347riorio ◆rio2xMQlrQ 2010/04/20(火) 08:55:08ID:/ag6H5my
>>342
読めました

報告のみにて失礼
0348名前は開発中のものです。2010/04/20(火) 09:01:41ID:abcxsV7i
ぶっちゃけそう簡単じゃない。
目的地をどうやって決めるのか。
ランダムに選んでも線路が繋がってない可能性がある。
線路が繋がっていても、ある列車はその駅には寄らないかもしれない。
だが、乗車時点でそれを調べるためには、
現状では実際ダイヤに沿ってをシミュレート運行してみるしかない。

まあ、目的地にたどり着かないと永遠に客車の虜囚となって
放浪しつづけてもいいって仕様なら、多少簡単だろうが。
0349Umezawa2010/04/20(火) 09:10:56ID:rrPJfq+/
>>345
TrainTrackingWindow の件、了解しました。
そもそも、追跡画面って複数出せたんでしたね。
結局、その中からどれの前面展望を見るかという
選択肢が出てきてしまうので、UIは必要なんですね。


>モデリングツールを提供してもらえれば、私がしこしこ作りますよ。
>理想を言えば、存在する列車プラグインの車両1両1両につき1つの3Dモデルですね。
りおりおさんに行動力があるのは知ってますけど、
流石に全てのモデルを作るというのはチョットwww

私がモデリングツールを提供する(作成する)のは
ムリですけど、メタセコイアか何かで作成したデータを
バッチで一発変換するようなものなら頑張れば作成できます。
いや、一発変換はキツイか……。

どちらにしても、そういったものを作るとすれば、
1ヵ月後とかになってしまいます。


あとは、列車がボクセル単位で移動するので、前面展望も
カクカク動画になってしまう問題が解決困難ですね。
PS版A4は確か、時間の流れと連動しないようにしてたんでしたっけ?
0350riorio ◆rio2xMQlrQ 2010/04/20(火) 11:07:54ID:/ag6H5my
>>349
私が以前いじってたのは「A列車で行こう7」の車両でして。
これとその前の「A列車で行こう21C」では、車両の3Dグラフィックが
3D設計図データと、2D展開図とに分離して持ってまして。
2D展開図のほうはしごく普通のTGA形式画像データだったんです。
ほんとに、いわゆる図工の展開図と一緒で。
平面に車体を切り開いたものが描かれていて。
それが3D設計図データに従って3D化されていたのですね。

で、ユーザのほうで3D設計図はいじれなかったけど。
2D展開図は好きに書き換えできたので。
カラーバリエーションを増やすとか、形状が同じまったく別の会社の別の車両に
塗り替えちゃうとか。そういうことが簡単にできたのです。
http://www.hiyohiyo.info/~riorio/a7/a7TGAedit.html

なのでー、メタセコイアで3D形状を作った後、色を塗ったりするところがそれらと
同じく2D展開図でTGAとかBMPとかでできるなら非常にやりやすくてイイのですが。
メタセコイアが出力できる形式の中にそういうのってあるのでしょうか。
0351Umezawa2010/04/20(火) 11:49:19ID:rrPJfq+/
>>350
A21Cのテクスチャ張替えをご存知であれば説明は簡単です。

ポリゴンデータを表示するためには、下記の3つの情報が必要です。

1. 3Dモデル
2. テクスチャ画像
3. テクスチャ画像を3Dモデルに対して貼り付ける位置

A21Cでは上記2番のみユーザーがいじれたんですよね。

今回私が作成したものも、当然上記3つが全て必要ですし、それぞれを
いじれるようにするのも簡単なのですが、普通は?「3Dモデルを作成する」
と言った場合、上記3つをセットにしたものを言うと思います(多分)。

がしかし、今回私が作成したものは上記3つがバラバラになっています。
普通の3Dモデリングソフトでしたら上記3つはセットで作成されますので、
バラバラで情報をよこせ! と言われると一般の方は戸惑うと思います。

ですので、その一体になった3Dデータから、3種類の情報をバラバラにする
バッチを作成するのが大変だなぁ〜、ということでした。

A21C等と同等の苦労をいとわないという事でしたら、まあ私としては非常に
助かりますが、今時そんなことをするのは時代遅れ?ですね。

ちなみに、今回の前面展望プラグインですが、ランダムで建物が作成されると
思います。そのテクスチャ画像BMPはbin/resourceフォルダに入っていますので
見てみてください。これをA21Cと同じ要領で変更すれば反映されるはずです。
0352Umezawa2010/04/20(火) 13:06:45ID:rrPJfq+/
ランダム建造物があまりに少なく分かりづらかったので
増やしたものをアップしました。ついでに昼夜の表現も。

http://www.free.netgamers.jp/freetrain/
0353riorio ◆rio2xMQlrQ 2010/04/20(火) 13:18:14ID:/ag6H5my
>>351
>ですので、その一体になった3Dデータから、3種類の情報をバラバラにする
>バッチを作成するのが大変だなぁ〜、ということでした。

なるほどー
でも一度完全なバッチツールさえできてしまえば、あとはプレイヤーおまかせで
どんどん車両は増えていきそうですね。

>A21C等と同等の苦労をいとわないという事でしたら、まあ私としては非常に
>助かりますが、今時そんなことをするのは時代遅れ?ですね。

いや、時代遅れでもないと思いますよ。

たとえば東京の通勤路線でしたら、E231-500の箱モデルとテクスチャ画像例を
一つ用意してあげてれば。
3Dモデルをいじらずともテクスチャ画像をいじるだけで
帯を黄緑→山手線 帯を黄色→総武線 帯を赤→京葉線
とバリエーションを増やせるわけなので。
3Dモデルで作りなさい、って言われるより一般の人には受付よくないかな……

もちろん、完全新作で3Dモデルも作れれば、複雑な先頭形状をしてる特急車両
も作れてうれしいですね。
0354Umezawa2010/04/20(火) 14:09:29ID:rrPJfq+/
りおりおさん、教えて下さい。

先ほど、昼夜の表現を行なおうと World.world.clock.totalMinutes を
取得するようにしたのですが、これって3系からは削除されてしまったのですか?
0355名前は開発中のものです。2010/04/20(火) 14:22:21ID:PPfLxkt8
>>348
せめて次の停車駅がわかれば、乗車する際の判断材料に加えられるんだがな。
次の駅を自動で取得させることが難しいなら、手動で指定しても構わないと思うが。
0356Umezawa2010/04/20(火) 14:28:54ID:rrPJfq+/
>>354
自己解決。
totalMinutes から totalSeconds に代わったんですね。
でもそうなると2系と3系でプラグインを別々にしないといけないのかな。
何か良い解決策は無いでしょうか?
0357riorio ◆rio2xMQlrQ 2010/04/20(火) 16:54:19ID:/ag6H5my
>>356
すいませーん。
そこが3系統の変更点キモなもんで……

で、
DayNight World.world.clock.dayOrNightを呼んで返ってきた値が
DayNight.DayTimeか
DayNight.Nightか
で判定するといいかと思います。

中身についてはcore\wprld\time.csを見てください。
0358riorio ◆rio2xMQlrQ 2010/04/20(火) 19:33:19ID:/ag6H5my
>>356
ごめんなさい、最新版動かさずに答えてた。
すごい!夕焼けしてからゆっくり闇が広がってくのね。
うほーー

これをやろうとしたら、Timeクラスがhourやminutesを返すようになってるので、
時間単位で良ければhour、分まで使いたければhour*60+minutesとかで計算
して現在分を得たら2でも3でも動くものにできると思います。

中身はTIme.cs見てください。
0359名前は開発中のものです。2010/04/20(火) 20:37:34ID:/ag6H5my
>>309
おこたえしてなかったですね

>また独自のpopulationを内部実装しているのでpluginのpopulation記述は無い方がいいのでないかと思います
>建物毎の動的なpopulationの実装をcoreのみで出来ればよかったのですが難しいようでした

駅への集客がうまく実装できたら、その次はplugin.xmlのpopulation - base値を
「スタジアムの観客定員」とみなしてうまくpopulationの変動の計算に組み込みたいと
思ってます。
0360名前は開発中のものです。2010/04/21(水) 07:10:28ID:2oYDrH2B
3D用の簡易的な展開図を得るなら、今のpluginから自動的に正面、側面を抜き出す事は出来ないのかな。
車体形状の判定が難しいですが、簡易的なものと割り切って、テキトーに四角い箱に貼り付けるだけでもいいかもしれない。
それでも白い箱が走るだけと比べればマシかと。
http://ranobe.sakura.ne.jp/src/up53202.png

3D View、線路の高さ方向を半分くらいに圧縮しても良いかもしれません。
動画に出てた感じだと、まるで崖から落ちるみたい。
0361Umezawa2010/04/21(水) 10:41:15ID:FiFgxW6h
>>360
意外といけるかも。
りおりおさんのE231toukaidoa.bmpを借りました。

http://www.free.netgamers.jp/freetrain/texture.png

抜き色の指定が違うのでヘンですが。
0362Umezawa2010/04/21(水) 11:45:35ID:FiFgxW6h
抜き色をちゃんと指定したもの

http://www.free.netgamers.jp/freetrain/texture2.png

窓が抜けるのも捨てがたいですけど、やっぱりこっちの方がイイ
0363名前は開発中のものです。2010/04/21(水) 11:52:49ID:s4ZpTWSC
>>362
スケールは実物準拠に?
0364Umezawa2010/04/21(水) 12:08:38ID:FiFgxW6h
>>363
列車のことは全然詳しくなくて、実物はよく知りませんが、
19200x2800x3400(mm) にしてみました。

A8のようないわゆるプラレールサイズにすれば、元の画像との
縦横比は合うんでしょうが、そっちのほうがいいのかなぁ。
0365名前は開発中のものです。2010/04/21(水) 15:13:25ID:s4ZpTWSC
>>364
ゲーム画面との整合性から、縦横比は元画像に合わせたほうが良いかなと思う。
画像の作者も、ドアの形状とかいろいろデフォルメしてる部分があるだろうし。
0366Umezawa2010/04/21(水) 15:49:55ID:FiFgxW6h
>>365
ポリゴンのサイズはいくつにすべきだと思いますか?
元画像は斜め上から見たのを想定して描かれていて、
テクスチャとして貼り付ける場合は垂直に貼り付けるから、えーっと……
0367名前は開発中のものです。2010/04/21(水) 17:37:54ID:nGWENici
あくまでも1ユーザのたわ言なにですが、、、

3D化した事で後にズームイン・アウト機能等がもし追加された時、
スケールがおかしいと見た目の違和感が凄いんですよ。(某●列車最新版を例示)
もしそういう機能を追加するときは3Dエンジン丸々データごと見直しますと言うなら
多少誇張されたサイズの方が見た目が良いですよね。
0368Umezawa2010/04/21(水) 19:46:49ID:FiFgxW6h
どなたか知っている方がいれば教えて下さい。

Train オブジェクトから、属する全ての TrainCar を
取得する方法はあるのでしょうか?

TrainCar[] cars の属性は private だし、
Train.head で取得できるのは先頭車だけだし、
TrainCar.previous で取得できるのは前の車両だし。

先頭車取得&前の車両取得メソッドの組み合わせって意味無くない?
「先頭車取得&後ろの車両取得」か「最後尾車取得&前の車両取得」
なら全車両取得できるんだけど。

先頭車両取得後、Train.reverseメソッドで反転させて
後で戻そうとしても上手くいかないし……助けて。
0369riorio ◆rio2xMQlrQ 2010/04/21(水) 19:57:10ID:On7ascYe
>>368
foobarさんがやってた反転機能がなんかうまいことやってたな。

えっとね、最新β2以降、pluginsの下のkohsuke〜の.tc.tat内src見てみて。
「A列車で行こう式ダイヤグラム」設定プラグインのソース。
そこのAdvancedStationHandler.cs見たら、
1両ずつ取り出してる部分があるはず。


P.S.
チラ裏はブログに書けって言われたので昨夜から今日にかけてブログにぶつくさ
書いてますがw
StationListener大改造してますw
これが成功したらサッカースタジアムが駅に直結できる!
0370riorio ◆rio2xMQlrQ 2010/04/21(水) 20:10:00ID:On7ascYe
あー

スマートに、TrainCar[] carsをpublicにするのもいいかもねぇ。
それでどっかよそに影響でなければ、だけど。
影響出るか出ないか全然分からないので断言できなくてすみません。

それならそれで、ちゃきちゃき本体いぢっちゃいますけど……
0371Umezawa2010/04/21(水) 20:25:22ID:FiFgxW6h
>>369
AdvancedStationHandler.cs 見てました。
で、これはわざわざダミーの TrainCar 生成して、
ポイントだったら云々と色々やってたので、
私が今回知りたいのは個々の車両の位置だけなので、
こんな面倒なことしなくても済む筈だ!
と思い込んで他を探してても見つからなくてイヤになりましたw

う〜ん、こんな方法しかないのかなぁ。
っていうか、このカプセル化の意図が正直分からない。
何故編成車両一覧さえ取得させないのか。
そんな筈はないと思うんだけど……。
0372Umezawa2010/04/21(水) 20:30:00ID:FiFgxW6h
>>370
おおーっ!
それなら public にするのはどうかと思うので、
headで先頭車が取得できるような感じで、
最後尾の車両を取得できるようにして下さいませ。
最後尾が取得できれば、あとは previous で前を追っていけば
いいだけのはずですので。

よろしくお願い致します。
0373riorio ◆rio2xMQlrQ 2010/04/21(水) 21:22:13ID:On7ascYe
Train.csに
public TrainCar tail { get { return cars[cars.Length-1]; } }
って1行足しといたらいいかなー?

すみません、StationListenerをイジってたら、大ハマリしてしっちゃかめっちゃかでw

うわーーん、どうしよう。
またセーブデータの互換性が失われるかもしれない。
しょっくぅ。

あと10分ぐらいのうちに、SourceForge.jpに2.0.2.5として置きますので。
それ持っていってみてください。
0374Umezawa2010/04/21(水) 22:00:16ID:FiFgxW6h
>>373
ありがとうございます。無事、成功しました!
0375riorio ◆rio2xMQlrQ 2010/04/21(水) 22:09:18ID:On7ascYe
すみません。
ちょっとC#詳しい方、ALPHA2.0.2.6(2系統だけどα版です)のソース確認して
おかしいところなおしてもらえませんか。

ソースと実行バイナリ同梱
http://www.hiyohiyo.info/~riorio/freetrain/FreeTrainEXAvALPHA2026.zip

新規ゲーム開始すると、たぶん問題なく動くと思うんです。
ただ、まだサッカースタジアムの駅への影響がちゃんとできてないっぽい。
でもそれは現時点では重要ではない。後から直せばいいから。

最大の問題は、これに従来の1,2系統セーブデータをロードすると、最初の列車が
最初に駅を出発しようとするときにgetPopulationでエラー起こして止まるんです。
おそらく100%止まる。

StationListnenerを真似て、SpecialStationListenerってのを追加してみたのですけど。
従来セーブデータをロードすると、SpecialStationListenerがねーぞってなるのかそのへんっぽい。
見て頂く必要があるのは、
core\world\rail\Station.csと、同じフォルダに有るSpecialStationListener.cs。
core\wold\structs\SpecialStationListenerImpl.csです。
なんとか互換性を保ってこれを実装できればよいのですが。
互換性がなくなるようだったらもうなかったことにするしか……
0376Umezawa2010/04/21(水) 22:33:51ID:FiFgxW6h
他の列車が表示される前面展望を作成しました。

http://www.free.netgamers.jp/freetrain/

全車両が、りおりおさんのプラグイン、東海道線E231系の先頭車です。
全てが先頭車ですが、まあ雰囲気を掴むには別に問題ないかなと。

また、民家が1/2の確立で列車に化けてます(テスト用に)。


作ってみて気が付いたんですが、斜めに走るときに車両の間隔が
すごく空いちゃうんですよね。以前の simutrans みたいに。


>>375
お役に立てなくてゴメン
0377riorio ◆rio2xMQlrQ 2010/04/21(水) 22:42:23ID:On7ascYe
たぶんそれ、私が改造して使ってた分で、オリジナルは北の汽車屋さんに
なるんじゃないかと思う<E231系

ひょっとしたらさらに親世代どなたかが公開されてたものかもしれないのですが……

あんまり誰の誰のって言われて誤解うんでもあれなのでw
0378名前は開発中のものです。2010/04/22(木) 00:22:58ID:a675FHCq
全然関係ない話だけどジオラマコレクション完全マニュアルだとかは絵書く人には
役に立つのかな?
0379名前は開発中のものです。2010/04/22(木) 08:10:13ID:tRxUkMRL
普段あんまり目にすることのない、建物の背面や上面がわかるなら参考になるかな。
0380Umezawa2010/04/22(木) 14:39:36ID:zeC/usqT
前面展望、対象車両の選択をできるようにしました。

・右クリックで前面展望/クォータービュー切り替え
・クォータービュー画面にて車両クリックで対象変更
・ホイール回転で、拡大縮小

車両選択が少々シビアなので、拡大してから行なって下さい。

http://www.free.netgamers.jp/freetrain/


ところで、やはりというかなんというか、こういうものを作ってしまうと、
車両がボクセル単位で移動するのが残念に感じてしまいますね。

FreeTrain はボクセル単位でガチガチにプログラミングされているので、
これをいじってドット単位で移動するようにするとドツボにはまりそうだし、
ソースも汚くなるだろうからやめたほうがいいとは思うけど、やっぱり残念。

まあ、良いロジックが思い浮かび、かつ C# のスキルも高い人が修正すれば
上手くいくのかもしれないけど……。
今までドット単位での移動要望は無かったのかな?
0381riorio ◆rio2xMQlrQ 2010/04/22(木) 15:45:51ID:fEg4Xsfb
まだ380版は動かしてないのと、3D Viewの中身をしらないので適当言っちゃいますが。

>今までドット単位での移動要望は無かったのかな?

無かったんじゃないかなぁーと思います。
移動を細かくするということは、同時に車両グラフィックのドット絵のバリエーションも
それだけ細かく増やさないといけないということになりますので。
車両プラグイン作者の負担がものすごいものになりそうです。

旧フォーラムの過去ログに何か有用な情報がないか探しに行ったことあるのですが、
「車両プラグイン作者のドット絵作成負担が大きいように思うので、方向を8方向に減らせ
 ませんか」という質問&要望があったりしたぐらいでした。
黙殺されてましたけどw

3D Viewがカクカクになってしまうというのであれば、FT本体側と完全同期動作を
やめればいいように感じるのですが、それは無理なのでしょうか。
FT本体の列車の動きを4tick()分記録して、4tick()遅れて動かして。
その間に動いた列車については、3D View側で適切に中割して動きを補完してしまう
ことで、FT本体が今のままで3D Viewはスムーズなアニメーションできそうに思います。
0382Umezawa2010/04/22(木) 16:21:20ID:zeC/usqT
>>381
simutrans は8方向グラでもドット単位の移動なんですよね。
だからと言って FreeTrain に真似しろと言ってる訳ではないですが。

3D Viewer はホントにただのビューアーなので、今のところ内部では
何もしてません。本体と完全同期してこそ「Viewer」だと思うし、
それを変える気も無いです。でもPS版のA4は非同期だったんでしたっけ。
0383名前は開発中のものです。2010/04/22(木) 16:24:29ID:cakzj61Y
見栄えがよくなるなら別に非同期でもいいんじゃないのかな
0384Umezawa2010/04/22(木) 16:42:05ID:zeC/usqT
まあ同期/非同期は今の段階で決める必要は無いのかな。
3系が主流になれば印象も変わるだろうし。
0385名前は開発中のものです。2010/04/22(木) 20:19:12ID:a675FHCq
つうかドット単位の移動ならできるでしょ。
今どのボクセルにいるかという情報があるはずだから、それと1緒に何ドット目の移動という
のを保存しておけばいいのではないかな。
1ボクセルを何ドットに分割して移動させるかは決めないといけないけど、たとえば6段階に
したとしてどのボクセルにいて、何ドット目の移動ですよ。
一定の単位時間毎にドットを進めて、その位置に表示。
列車も細かく作り直す必要はない。
描画位置だけの問題だと思う。

日本語でおk>俺orz

0386riorio ◆rio2xMQlrQ 2010/04/22(木) 22:23:25ID:fEg4Xsfb
FreeTrain EX Avは今でも処理の高速化を求められているぐらいなのに、
処理が重くなるドット単位移動を受け持つ余裕はどこにもありません。

また、プレイヤー全員がメリットのほうを享受するのなら、それの裏返しの
デメリットがあってもいいかもしれませんが、外部ビュワーである3D Viewを
どれだけのプレイヤーが使うか使わないか分からないし起動してない間は
まったく無用になる処理を本体が受け持つのは業務分掌が違うと思います。

また、本体の改造にしても2系統→3系統どころではない大改造が必要に
なるでしょう。
技術レベル的にも私の手におえるものではないでしょう。
>>385日本語の必要ないからC#でおk

一方、3D View側が4tick()分描画を遅くして中割アニメーションを作成する
のであれば、本体側の負担にはなりません。
非同期と言ってもまったくの非同期なわけじゃなく、4tick()遅いだけです。
4tick()の遅さでぬるぬるになるであれば、そりゃみんな(3D Viewを使う人の
みんな)うれしいと思うけどなぁー



こちら本体いじりはSpecialStationListenerの互換性維持がいまだできず
昨日時点からソースはいじってなくてうんうんうなってます orz
0387名前は開発中のものです。2010/04/22(木) 23:19:28ID:aS/vz3rF
A7とかだと列車がヌルヌル動いてる感じで見た目いいよね。
カーブも45度にカクっと曲がる感じじゃなく滑らかだし。
ただ、1マスに1車両という設計はA4から変わってなくて、
列車のスマートさは表現できずに結局どうしてもプラレール。
まあそれよりか、複線にしたときの線路の隙間の見た目がひどかったけどw

FTはドット単位移動ができたとしても、
それだけじゃあ苦労に見合うほどのインパクトは得られない気がする。

どうせ無理を言うのなら、高解像度化を希望するわw
現在の画像資産が死んでしまうため現実的ではないが
もうちょっとだけアップに耐えうるくらいに描画された列車を眺めてみたい。
WUXGAで遊んでるといろいろ小さすぎるってのもあるし。
0388riorio ◆rio2xMQlrQ 2010/04/23(金) 00:52:41ID:I0iPS/HY
>>387
>WUXGAで遊んでるといろいろ小さすぎるってのもあるし

そうですなー
ウチも開発機で最大にするとUXGAにはできるんじゃが……
(でもCRTダゼw ダセ−ww)

単純に、元1pixelを2x2pixelに打つ、というのなら実現は早いかもしれないが。
そんながっくがっくのズームインを必要とする人いるかな??


さて、話かわるのだけど。
Station.csのStationメソッド、それからStationListenerまわり解説できる人いませんか。
Stationメソッドで
// advertise listeners in the neighborhood that a new station is available
foreach( Entity e in Cube.createInclusive( baseLocation-r, baseLocation+r ).getEntities() ) {
StationListener l = (StationListener)e.queryInterface(typeof(StationListener));
if( l!=null )
l.advertiseStation(this);
}
ってやってるわけなんだけど(これは駅を新設すると周囲の建物を探してあれば持ち人口を
駅に結びつけるということをしてるというのは理解できるんだけど)、baseLocationってのが
宣言も無くいきなりでてきててこれなんぞ?ってのからして分かってないし、Entityも分かってないし、
Cube.createInclusiveってのもブラックボックスだし、e.queryInterfaceもブラックボックスだし。
この2行の解説をお願いしたい。
0389名前は開発中のものです。2010/04/23(金) 01:21:16ID:/YLtdDhS
baseLocation:多分現在の場所("PThreeDimStructure")
Entity:不明("Entity.cs")
createInclusive:ベクトルAからベクトルBまでの3次元立方体を作成する
queryInterface:これを実装しているか問い合わせ、あれば自身をなければnullを返す

多分baseLocation±rの範囲のボクセル全てに対しStationListenerがあるかどうか問い合わせ、
あればそいつに対してadvertiseStationを呼び出している
0390名前は開発中のものです。2010/04/23(金) 01:39:55ID:OXmDWqZA
>>388
baseLocationはベースクラスで宣言されてるんだけど、クラスの継承も解ってない?
だとすると、ここで全部説明するのは厳しすぎる。
まずオブジェクト指向プログラミングの基礎から学んでくれ。

VS Express使ってるんだっけ?
自分はVS2008使ってるから多少違うかもしれんが、
baseLocationにマウスかざして何かでない?
Location PThreeDimStructure ...とか
Location型でPThreeDimStructureクラスで定義されてますってことなんだけど。

あるいは、右クリックメニューで「定義へ移動」ってのない?
それでPThreeDimStructureクラスが開く
createInclusiveもブラックボックスじゃないし。
同じく「定義へ移動」すれば見られる。

ただし、Entityはインターフェースだから、queryInterfaceの実装を探すのは
ちょっと面倒だけど・・・ってか、インターフェースは解ってる?
これも基礎知識として知ってないと説明がしんどい。
queryInterfaceを右クリックして「全ての参照を検索」を実行すれば、
検索結果ウィンドウに一覧が表示される。
検索結果を一つづつ追っていけば、あらましは解るでしょう。
0391名前は開発中のものです。2010/04/23(金) 01:48:41ID:zuR948Fe
これは初心者レベルすぎる...
>>389-390
おまいらが開発やってくれ。
0392riorio ◆rio2xMQlrQ 2010/04/23(金) 02:32:10ID:I0iPS/HY
>>389
さんくす

>>390
継承は@itの第4章に書かれてるぐらいのことは理解してる。

が、VSのKDEをまったく理解してなかったということのほうが重要かも。
マウスポインタ置いたら<summary>が表示されるのも今知ったし、右クリックで
ソース呼べるのも知らなかった。
こんなに便利なのかー
今まで外部テキストエディタでいっこいっこ継承のスーパークラスたどっていって
「まだないーー」って頭かきむしってたのはいったい……

>インターフェースは解ってる?

@itの14章はまだ分かってない。
4章までなら分かる。
とりあえず今日、14章よく読み込んでみます。
ありがとうございました。

>>391
それはいいアイディアかもしれん。
0393riorio ◆rio2xMQlrQ 2010/04/23(金) 03:42:39ID:I0iPS/HY
全然話かわるんだけど(実は裏ではつながってるのだが)

駅のStationListenerが取りまとめてる「population」すなわち人口なのだけど。
その駅の周辺にある建物に住んでる人や利用する人については、建物プラグインのplugin.xml内で
<population>
<class name="人口の種類を表すクラス名"/>
<base>建物の基準人口</base>
</population>
と書いて、そのクラスにあるgetPopulation( 現在時刻 )メソッドが基準人口×その時刻の
外出率とゆーか駅利用率をかけたものを返すようになってる。
http://www19.atwiki.jp/freetrain-exav/pages/136.html
http://www19.atwiki.jp/freetrain-exav/pages/137.html
基準人口と時刻以外のファクターはまったく考慮されていない。
それで、先日から今にかけて、サッカースタジアムの駅への影響で悩んでるのだけど。

でよ。
この"人口の種類を表すクラス名"内のgetPopulation()メソッドのreturn値に、将来的にその建物の
利用率とか営業人気とかそういうものを加味しようとした場合、現在の設計で可能なのかな?
私がながめてた感じ、"人口の種類を表すクラス"が建物本体クラスから独立しちゃってて、
建物本体クラス側で値を上下とかできそうにないように思えるのだけど。
可能なら、getPopulation内にどう書くのか教えて欲しい。
やっぱり不可能なら、可能にするためにはどのような再設計をしたらいいだろうか。
提案求む。
0394riorio ◆rio2xMQlrQ 2010/04/23(金) 03:55:39ID:I0iPS/HY
さらに話が変わって、このplugin.xmlのpopulationで指定できるclassが、
現状5通りしかない。
住宅・農業・オフィス・飲食店・買い物。
プラス、コンビネーションで上記から任意に組み合わすだけ。

これは少ないと思う。
飲酒産業・ホテル旅館・遊園地を追加したいと思う。
既存のプラグインについては、plugin.xml書き換えで対処。
そのほかに追加した方がいいと思うclassあったら、こんな業種がこういう変動するのを
実装して欲しいって具体的に提案ヨロ〜
なるほど、これは欲しい、という提案があったら採用します。

で、もし提案されてきたものに、時刻だけでは人口を決められないようなモノが出てきた
ときには>>393な話にからんでくるというわけ。

あと飲酒産業で思ったんだけど。
「花キン」実装したいよね。金曜夜はお客さんいっぱい。
今って、時間帯で1時間ごと区切っただけで曜日すら見てないんだけど。
既存のオフィス・買い物なども内部的には月〜金の平日/土日の週末、の2通りのかけ率
を持てるようにはなってる。2通り実装してないだけで。
ただ飲み屋だと、平日と週末に区切られると都合が悪いわけで、これは使えない。
独自に24時間×7曜日分のテーブル持ってもいいし、スーパークラスとして
月〜木平日・金だけ・土だけ・日だけの4通りのテーブルを要求するクラスを作ってみても
いいかもしれないが、飲み屋以外にそのクラスを継承して利用しようとするものがなければ
作るだけ手間かかるだけで意味ないんで、それだったら飲み屋の独自実装でいいことになる。
さて。どうなんでしょうなぁー
0395名前は開発中のものです。2010/04/23(金) 04:17:16ID:B7bfRG/Y
riorioの方が向いてるよこのプロジェクト
0396名前は開発中のものです。2010/04/23(金) 04:49:32ID:E//QvmpZ
>>394
それやるんだったらサッカー場は普通に解決するような気がする。
水曜日と土曜日(だっけ?)の試合時間の数値を増やして。
人気で値を上下できるとさらにリアルに。まあオイラは野球派ですが、
となると野球場なんかも((だいたい)月曜休み、土日はデーゲームを仕込む?)

増やすんなら田舎の超ローカル線を支えていると言って過言でない学校か?
朝ワッと乗って(これはまだ無理か)3時に帰宅部が帰り、6時には運動部が、
夏休みは誰も居ないと。昔は土曜昼ってのがあったけどもう無いね。

飲み屋が実装されるとなると幻の横須賀線の花金電車(まだあるの?)が再現
できるわけですが・・・金曜日だからって飲みになんか行けないよウワァァン。
0397名前は開発中のものです。2010/04/23(金) 08:17:43ID:Uki1z4a6
乗客集計時に数だけ引っ張るのでなくpopulation種別も保持できるなら
駅の乗車待ち客のうちオフィス由来は何人〜とか見れて面白そう。
乗ってる間も列車側で保持できれば降りるときにいろいろ利用できてよさそうだが
乗車待ち全員が素直に乗れるわけじゃないから厳しいか。
0398名前は開発中のものです。2010/04/23(金) 09:41:59ID:CMSflQ2q
>>392
言語仕様の学習と同時に、IDEの使い方も覚えると良いよ。
使いこなせば、大幅に生産性向上する。

右クリックメニューや、「編集」、「リファクタ」メニューは、
一通りどんな機能があるか知っておくべき。出来たら実際使ってみる。

以下余談

自分は仕事ではeclipse+javaで開発してるんだけど、
言語仕様的な生産性のポテンシャルはC#>javaなんだが、
IDEの至れり尽くせり度がVS<<eclipseで、
トータルでの生産効率はeclipse+javaの方がまだ上。

eclipseを100点とすると、VS2008は40点くらい。
2005以前は10点未満だったから、多少マシにはなったとはいえ、
まだまだ格段の差がある。次のVerでは80点くらいになってほしいねぇ。
0399Umezawa2010/04/23(金) 09:55:28ID:d3sqGdQq
>>398
スレ違いだけど聞かせて。

C# と Java 両方理解している人から見て、C++/CLI ってどうですか?
個人的には将来はこれ1択だな、って感じているんですけど(分野にもよる)。

また、今回の一連のプラグイン作成は C++ で作成しちゃったけど、
C++/CLI なら C# との親和性も高そうだし、これで作ればよかったなと少々後悔。
.NET 事情をよく理解していなかったのが敗因ですな。


FreeTrain は今のところ .NET 2.0 ですけど、.NET は 4 で大幅に
変わるようですし、その際また EX -> EXAv に変えるときのような
苦労を避けるという観点でも、何か意見があれば聞かせて下さい。
0400名前は開発中のものです。2010/04/23(金) 10:15:49ID:CMSflQ2q
>>399
申し訳ない、C++/CLIの細かい仕様はよく知らない。
ただ、結局 .NETの共有言語基盤を使うのだから、
C#/VB.NETなどと機能面では同じはず。
あとは、個々人が馴染みやすい言語を選べばいい。
・・・というのがM$のスタンスだと思うけど、

個人的には、.NET Frameworkと同時に誕生したC#こそが、
もっともCLIのと親和性が高く、王道と言えるのではないかと・・・
一方、VBやC++など既存言語を拡張したものは、
どうしても無理矢理なところが出る可能性がある・・・と思っている。
なので、既にC#を使ってる自分としては、他を選ぶ理由が見あたらない。
0401riorio ◆rio2xMQlrQ 2010/04/23(金) 10:16:50ID:I0iPS/HY
フォーラムにバグほうこくがありまして。

http://sourceforge.jp/forum/message.php?msg_id=50222

>任意のマップ(例えばゲーム開始時の何も建設されていないマップ)に、任意の数の駅舎やホームを
>建設し、すぐに全て撤去する。
>撤去方法は「駅工事」の撤去でもブルドーザーでも可。
>
>本来であれば、そのようなマップに存在しない駅舎やホームの経費は、撤去した翌日以降はまったく
>かからないように処理されるべきと思われるが、実際には翌日以降も継続して経費として毎日資金から
>支出され続けている。

Station.csの301行目
public void clockHandlerDay() {
// called once a day. charge the operation cost
AccountManager.theInstance.spend( type.operationCost, AccountGenre.RAIL_SERVICE );
import.DailyReset();
export.DailyReset();
trains.DailyReset();
}
や、Platform.csの136行目
public void onClockPerDay() {
// charge the cost
AccountManager.theInstance.spend( 18*length, AccountGenre.RAIL_SERVICE );
}
などが費用を計上してるところで、これらはWorld.world.clock.registerRepeatedで実行されてるのだけど、
0402Umezawa2010/04/23(金) 10:31:51ID:d3sqGdQq
>>400
なるほど、既に C# を習得した人にとっては C# で満足、
特に何も問題は無いといった感じですかね。
私は UNIX 寄りの仕事をしてきたんで、どうしても C# は
異質なものに感じてしまって……。

今こうやって C# でプラグインを色々作成してますけど、
将来 J# のような状態になって、今の資産が引き継げなくなると
悲しいなぁ〜などと思ってたんですが、そうやって C# を
評価している人たちが居れば、とりあえずは安泰なんですかね。
0403riorio ◆rio2xMQlrQ 2010/04/23(金) 10:37:18ID:I0iPS/HY
撤去の時はどちらもちゃんと
public virtual void remove() {
World.world.clock.unregister( new ClockHandler(onClockPerDay) );
if(onEntityRemoved!=null) onEntityRemoved(this,null);
}

public override void remove() {

World.world.clock.unregister(new ClockHandler(clockHandlerHour));
World.world.clock.unregister(new ClockHandler(clockHandlerDay));
でunregisterされるようになってて。
タイマー解除→もう呼ばれないはずなのに。
なぜ実際はこういういつまでも呼ばれる動作になるのか分かりません。

0404名前は開発中のものです。2010/04/23(金) 19:20:31ID:/YLtdDhS
面倒、すごく面倒。原因は分かってはいるんだが今の案では直すのが面倒
さらに言えば直した所で互換性があるかどうか、あったとしても不具合は引き継がれるという
誰か良いアイデアがあったら教えてください

原因はregisterRepeatedで登録されるとunregisterでは解除されない事
内部でRepeatedTimerが使われ、ここからTimerに登録されている
これを解除するにはRepeatedTimerの"登録した"インスタンスが必要
そしてこいつはregisterRepeatedのローカル変数なわけで
でも戻り値にRepeatedTimerの登録したハンドラを返すからこれで解除できる
今の案は
1.全てのregisterRepeatedを使う場所を書きかえる
2..registerRepeated内で登録したものを保持する
3.queueを無理矢理…
0405名前は開発中のものです。2010/04/23(金) 19:38:07ID:/YLtdDhS
4.おそらく使い回されないと仮定するならばある変数(何でも良い)にマジックナンバー(null等)を代入する
 そしてタイマーから呼び出される関数で比較する
 根本的な解決にはならないが…
0406wikiから転載2010/04/23(金) 22:14:01ID:I0iPS/HY
>>404 少し前に出てきたDelegate.Equalsを真似てRepeatedTimerクラスで
Equalsをオーバーライドする。

public override bool Equals(object obj) { return handler.Equals(obj); }
0407名前は開発中のものです。2010/04/23(金) 23:06:16ID:/YLtdDhS
>406
サンクス
でもDelegateのインスタンス比較はobject同士での比較、つまり参照の比較となるため(reflectorで確認したところ[object] == [object]で比較していた)
オーバーロードしても同一とみなすようにできないと思う(operator==はどちらか一方に自己クラスを必要とする)

4改.RepeatedTimerからのみ呼び出せると仮定できるなら、比較して解放済なら例外を投げる
  呼び出し元が例外を揉み消しTimerに再登録されないようにすれば後はGCに
  これは上手く行けば元のデータでも不具合はなくなるかもしれない、ただし応急措置であることに注意する

以下蛇足
Populationは現在の仕様だと建物の「種類」と結び付けられている
PupukationStructureが初期化される際、StructureContributionからPopulationの参照をもらう
ここを動的生成か何かに変更できれば建物個別のPopulationができると思う
0408riorio ◆rio2xMQlrQ 2010/04/24(土) 03:38:39ID:eDeoj9yE
>>404
詳細に調べてくれてありがとう。

今、自分でもClock.csのタイマー関係をひととおり見てみたのだけど。
うーーん、正直言ってこの部分は今の自分の力量からは高度すぎてすぐはいじれない。

どれがいいのかもなんとも言えないんだけど。

>でも戻り値にRepeatedTimerの登録したハンドラを返すからこれで解除できる

というところからすると、

>1.全てのregisterRepeatedを使う場所を書きかえる

かなぁ?
使う場所の方で返ってきたClockhandlerを保持する変数を呼び出し1こにつき1つずつ
持って、unregisterをその変数で行うように書き換えればいいんだよね。


ただ既にあるセーブデータを読み込むとどうにもならないよね、たぶん。
そのぐらいはしょうがないか。
0409riorio ◆rio2xMQlrQ 2010/04/24(土) 09:23:24ID:eDeoj9yE
>>408方針で修正したβ2.0.2.7をリリースしました。
ソースもコミットしてあります。

これでいいかどうかご確認よろしくお願いします。

今回も>>404さんのアドバイスがなかったら解決できませんでした。
ありがとうございました。
0410nanashi2010/04/24(土) 10:36:35ID:G4M7JBZ/
>>140

(コピペプログラミングで)交互ポイントとミステリポイント作成しました。
どうぞよろしくお願いします。

交互・ミステリポイント 1.0用
http://freetrain.ps.land.to/upload/data/ftup0078.zip

交互・ミステリポイント 2.0用
http://freetrain.ps.land.to/upload/data/ftup0080.zip
0411名前は開発中のものです。2010/04/24(土) 21:56:17ID:eDeoj9yE
>>410
おつかれさまです
ありがとうございました

wikiに掲載して、要望のあがってきてたSourceForge.jpフォーラムにも
案内を書き込んでおきました。

お時間ある時に3.0にも移植しておいてください。
totalMinutesをtotalSecondsにして調整してもらったらいいかなと。
3.0ソースはSourceForge.jpにコミットしてありますので。
0412名前は開発中のものです。2010/04/25(日) 08:18:10ID:WBZLGOEU
ふいー
なんとか、サッカースタジアムの駅需要を試合開催と観客数に結びつけることに
成功したぜ
http://u4.getuploader.com/freetrain/download/62/%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC%E3%82%B9%E3%82%A2%E3%82%B8%E3%82%A2%E3%83%A0%E9%81%8B%E8%A1%8C.PNG

このサッカースタジアム結構大きいから、この配置だと基準ボクセルになる左下スミが
最寄り駅から10ボクセル以上離れてしまうせいで、駅に結びつかなくてさー
最初それに気付かずなんでだーなんでだーーって悩んでた。
サッカースタジアムだけ、特別に2倍の広さの駅に結びつけることにした。

ver2/1でも、10ボクセルってちょっと狭くないー?
空港みたいなデカい建物たてたらやっぱり範囲外になってしまいそうな気がする。


さて問題は。
この「SpecialStationListener」を組み込むと、既存セーブデータを読めなくなることで……
既存セーブデータを読み込んだときに適切な処置をするようせねばならん。
それがまた大変そう。
0413riorio ◆rio2xMQlrQ 2010/04/25(日) 09:47:31ID:WBZLGOEU
FreeTrain EX Av β2.0.2.8出しました。

【2.0.2.7 -> 2.0.2.8 変更箇所】
・SpecialStationListener実装
・サッカースタジアムで試合開催後3時間、最寄り駅を観客利用
・2.0.2.7以前に作成したセーブデータをロードすると、最初の何日間か列車が駅を出発するタイミングでガクガクしますが、
 発車が一巡すると収まるはずです。SpecialStationListenerの処理を行っているためです。

ソースはコミットしてあります。
Station.csのあっちこっちにダサいコードがありますが、もっとスマートな互換性維持の
方法があったらおしえてください。
0414riorio ◆rio2xMQlrQ 2010/04/25(日) 10:54:09ID:WBZLGOEU
β2.0.2.8だとスタジアムの観客数がソース決め打ちになってたので、
plugin.xmlに<base>40000</base>って書いて変更できないか試してみたのですが。

StadiumStructure.csでthis._population = new PopulationImpl( 40000 );しちゃう関係上、
結局ここで決め打ちするしかないみたいなのですが。

new PopulationImpl();で呼んで、PopulationImpl側でplugin.xmlの<base>読ませるには
どうしたらいいんでしょうねぇ。

PopulationImpl側に
public PopulationImpl( XmlElement e )
: this( int.Parse( XmlUtil.selectSingleNode(e,"base").InnerText) ) {}
public PopulationImpl( int p ) { _baseP = p; }
ってのは書いてみたんですが。

なんかこう、plugin.xmlからの初期化とStadiumStructureからの初期化がごっちゃに……
0415Umezawa2010/04/25(日) 11:43:23ID:Z6aS12KE
りおりおさんへ

度々申し訳ありません。
TrainCar のコントリビューションID を取得したいのですが、
クラスのメンバ変数「type」を public にして頂けないでしょうか?

public はけしからん! ということでしたら、type.id を取得する
メソッドを追加していただけると有難いです。


もちろん、今度のバージョンアップのついでで構いません。
内部仕様の変更だけでバージョンを上げるのもどうかと思うので。

以上、よろしくお願いします。
0416名前は開発中のものです。2010/04/25(日) 11:43:38ID:b1yOqBv6
plugin.xmlが読まれた時の初期化(※多少の想像が含まれます)
最上位のcontributionで関連付けられたクラスがおそらく一度だけ初期化される
Populationはここで初期化されcontributionメンバとして保持される
0417nanashi2010/04/25(日) 12:13:27ID:jSlFbmyz
>>411
>wikiに掲載して、要望のあがってきてたSourceForge.jpフォーラムにも
>案内を書き込んでおきました。
どうも大変ありがとうございます。



riorioさん、すみませんがALPHA3をビルドしようとすると以下のようなエラーがでました。
どうぞご確認をお願いします。

エラー 1 "src\StationAdvancedDialogNumeric.resx" にマニフェスト リソース名を作成できません。
ファイル 'F:\FTsrc\trunk\plugins\org.kohsuke.freetrain.tc.tat\src\StationAdvancedDialogNumeric.cs' が見つかりませんでした。
FreeTrain.TATTrainController.2008
0418riorio ◆rio2xMQlrQ 2010/04/25(日) 14:30:56ID:WBZLGOEU
>>417
うあー すみませんすみません。
追加したファイルがSVNに「追加」操作し忘れてて歯抜けになってました。
今追加してコミットしたので大丈夫だと思います。

もしほかにも抜けがあったらすぐ言ってください。


>>415
了解です。


>>416
従来のPopulationクラス、それを従来のStationListenerで使う分にはそういう
ことなのかなって分かるのだけど。
それだと今回サッカースタジアムでやってみたみたいな動的にオブジェクト側で
演算してその結果をPopulationに反映させるっていうのはどうしたらいいんだろう
っていうのと。
またplugin.xmlの<population><base>に書いたbase人口値をサッカースタジアムの
StadiumStructureクラスなどで読み出すにはどうしたらいいんだろうというのと。
0419riorio ◆rio2xMQlrQ 2010/04/25(日) 14:41:11ID:WBZLGOEU
はれ?

Train.csで
public readonly TrainContribution type;
だけど……

書き込みたいわけじゃないですよねぇ?
読めませんかね。
0420Umezawa2010/04/25(日) 15:07:20ID:Z6aS12KE
>>419
確かに Train クラスの type は public なんですけど、
何故か TrainCar クラスの type は internal なんですよ。
説明が不十分で申し訳ありませんでした。


Train.cs に定義されている TrainCar クラス
714行目: internal readonly TrainCarContribution type;
を public にしていただければ助かります。
0421名前は開発中のものです。2010/04/25(日) 15:32:04ID:WBZLGOEU
>>420
あーー、すいません、TrainCarのほうでしたのね。
今直しましたので次回ビルドに含まれます。

今、ここ何日かでβ2のほうにやった変更をα3にも反映させてます。
手作業です(汗
0422nanashi2010/04/25(日) 15:43:38ID:jSlFbmyz
>>418
ビルドできました。ありがとうございます。
0423名前は開発中のものです。2010/04/25(日) 16:20:41ID:b1yOqBv6
>418
無理ではないですけどちょっと面倒かもしれません
XMLによるPopurationの派生クラスの初期化時にbaseを保存
->ContributionのメンバであるPopulationを取得
->Populationを型変換し保存したbase値を取得
ただ確認はしていません

もしくはContribution作成時に直接base値を得る
これだとbaseという名前でなくても良く、またContribution直下に置くと読み込みやすい
structure作成時にこの値を渡す
こっちの方がいいかもしれません
0424riorio ◆rio2xMQlrQ 2010/04/25(日) 17:20:25ID:WBZLGOEU
FreeTrain EX AvのPrototype(α版)3.0.1.8をリリースしました。

○3.0.1.7からの変更点
・列車名の表示を可能にした
・サッカースタジアムのエラー修正
・repeatタイマー解除方法修正。駅&ホーム撤去時に経費徴収が止まるように。
・SpecialStationListener実装
・サッカースタジアムで試合開催後3時間、最寄り駅を観客利用
・3.0.1.6以前に作成したセーブデータをロードすると、最初の何日間か列車が駅を出発する
 タイミングでガクガクしますが、発車が一巡すると収まるはずです。
 SpecialStationListenerの処理を行っているためです。

よろしくお願いします。
0425riorio ◆rio2xMQlrQ 2010/04/25(日) 18:10:38ID:WBZLGOEU
>>423
ごめんー
例によって、よくわからないままイジっちゃってるんだけど……

plugin.xmlには今
<population>
<class name="freetrain.world.soccerstadium.PopulationImpl"
codebase="bin/FreeTrain.SoccerStadium.dll"/>
<base>40000</base>
</population>
って書いてあるわけね。
ここのclass name=とcodebase=で、PopulationImpl.csの
public PopulationImpl( XmlElement e )
が初期化されそうっていうのはばくぜんと分かるのだけど。
このままだと、このPopulationImplを、サッカースタジアム本体である
StadiumStructure.csのpublic StadiumStructure( StructureContributionImpl _type, WorldLocator wloc )
側で使えなくない??って思うわけで。なので、あえてStadiumStructureの先頭で
this._population = new PopulationImpl( 40000 ); ってnewしてるわけで……
とりあえず今、このnewした_populationはうまく使って駅の利用客を試合に連動させて
増減できてるのね。ただしスタジアム収容人数はこれだと40000人固定。
その40000をソースに書き込まずplugin.xmlの<base>から取ってくるには、がしたくて。
0426名前は開発中のものです。2010/04/25(日) 19:51:59ID:b1yOqBv6
>StadiumStructure側で使えなくない??
できないわけではないですが、コピーしてダウンキャストが必要ですね

423の上では
PopulationImpl( XmlElement e )でeからbaseを取得し、どこかに(ここでは仮にbase)保存
そしてStadiumStructureで((PopulationImpl)_type.population).baseとして取得
下では
xmlを書き変えpopulationを利用せず<contribution>直下に<base>として置き、
StructureContributionImpl( XmlElement e )でbaseを取得し保存
この後はnew StadiumStructure(this,wLoc,base)とするか、_type.baseとするか

[以下余分なもの]
古いソースの上独自仕様を入れ互換性のないsoccerstudium英語が変なのはご勘弁
ttp://u4.getuploader.com/freetrain/download/63/stadium.zip src
0427Umezawa2010/04/25(日) 20:07:03ID:Z6aS12KE
>>424
TrainCar の変更、ありがとうございました。

前面展望のようなもの、新バージョンをリリースしました。

http://www.free.netgamers.jp/freetrain/

やはり3系のほうが動きがイイですね。
ゲーム速度が「普通」以上であれば、ボクセル単位での移動もあまり
気になりません。今後はとりあえずは3系をターゲットにしたいと思います。

ところでモデルのサイズですが、リアルにするか、いわゆるプラレールに
するかという問題があったのですが、画像作者様を尊重するのであれば、
アスペクト比を変えてしまうという行為が良くないことだというのは
重々承知なのですが、個人的に車両に対しての思い入れというものが
全く無いためか、アスペクト比が変わっても特に違和感を感じません。

http://www.free.netgamers.jp/freetrain/E231_qv.png
http://www.free.netgamers.jp/freetrain/E231_3D.png

プロの方(笑)から見て、上記画像はやはり違和感があるのでしょうか?
そういった意見が多ければ考え直します。
0428riorio ◆rio2xMQlrQ 2010/04/25(日) 20:16:44ID:WBZLGOEU
>>426

「423の上では…」以降をやってみようとしてはたと気づいたんだけど、
それってStadiumStructureクラスはPopulatedStructureクラスを継承した
うえでの話になってるよね。
PopulatedStructure内で自動的にStationListenerに登録される。

自分、それだとどーもうまくないってことで、StationListenerに登録されず自前で
SpecialStationListenerに登録しに行くという前提で、継承するスーパークラスを
PThreeDimStructureに変更しちゃってるんだわー

この継承状態で((PopulationImpl)_type.population)って取れるかな。
かなっていうか、今ダメモトでやってみてビルド通るかどうかやってみようなかんじ
なんだけどね。


>[以下余分なもの]

おおっ
ソース中身のぞいてなくてファイル名見ただけだけど、なんかwkwkするファイル名
がついてるじゃないですかっ
0429riorio ◆rio2xMQlrQ 2010/04/25(日) 20:32:33ID:WBZLGOEU
やってみたらダメでしたー
ビルドはだまして通せても、スタジアム建てると

| 型 'freetrain.contributions.population.PersistentPopulation' のオブジェクトを
| 型 'freetrain.world.soccerstadium.PopulationImpl' にキャストできません。

になっちゃいましたわ。
this._population = ((PopulationImpl)_type.population);
のところで。

PersistentPopulationっつったら、core\contributions\populations\PersistenePopulations.cs
で定義されてるもので、
Population implementation that wraps another Population and
provides persistence support.
ってコメントがある………

むー
これってやっぱり、サッカースタジアム独自のPopulationImpl.csのPopulationImplクラス
を初期化して_type.populationに結びつけられてないってことになるよねぇ。
0430名前は開発中のものです。2010/04/25(日) 21:50:58ID:b1yOqBv6
>429
ごめんなさい、ソースを確認したらPersistentPopulationでラップされていました
この中からpopulationの実体をとり出すのは難しそうです
0431名前は開発中のものです。2010/04/25(日) 22:31:57ID:W3NL37wK
サッカーやら3Dやらで取り込んでるところ申し訳ないが

AB        CD          E
━━────━━──────━
このように駅を2つ並べた状態で
ホームはそれぞれ2両分ずつ同一線路に並べて設置
(ダイヤ設定用にABとCDそれぞれ別の駅・ホーム関連付けに)
これで見た目は4両ホームに
そこに車両を2両ずつ別個に購入配置して(高速車両で試した)
後方2両がA、Cに停車(Cで折り返し待機(Bは通過)
先頭2両がB、D、Eに停車(B折り返し、C通過)というダイヤにして
擬似連結分離できないかとやってみたが

1.ABをそれぞれ同時刻発車にすると後方がつっかえて
  緊急停止扱いになるせいか結局離れて走ってしまう
2.後方のA発車を先頭より1分早めに発車とすると
  行き止まりと勘違いするっぽい?のか立ち往生してしまう(うまく説明できんw)

1.の方でCで時間待機中のところに、戻ってきた車両がDに入って止まったときに
折り返すはずのC待機の車両がしばらく動かなくなった

まあこんな風に2駅のホームを同じ線路上にくっつけて並べて置くこと自体が
イレギュラーっぽい操作だからうまくいかなくても仕方ないとは思うけど
もしどっか調整してうまくいくようなら連結分離ができて気持ちよさそうなんでw
余裕あれば見てもらえれば
0432riorio ◆rio2xMQlrQ 2010/04/25(日) 22:53:21ID:WBZLGOEU
<population>内ではなく、<contribution>直下に<capacity>を書いてStructureContributionImpl
で取得・保存する方法でうまくできたーー!

これで1万人収容も5万人収容も作れるぜーー!!
じゃあ野球場もやっちゃいますか!!!
誰か絵かいて!!!!(ぉぃ


>>431
それ、β2までの時間軸だと、高速では「前方後方同時」、中速では「後方が30分早く」
出発するとうまくならんでごとごとと走っていってくれてた。
駅ホームだと緊急停止した時点で停車扱いになっちゃうので、10分or30分早くに出発した
あとはその時間ずっと、たとえば「10時*分*秒 通過」に設定して駅通過させとかないと
ダメ。
また進行方向を変えて折り返してきつつのときは、高速では20分・中速では50分早く
にズレが生じた気がする。

で、α3系統の時間軸になったときにこの0分・30分のうまく離れずくっついてってくれる
差がいくらになってるのかはまだ研究してないので。みつけてくれるとありがたいのだがw
同時はたぶん同時で変りないと思うので。
中速のときの30分は30秒かなぁ〜〜?

コロネ島動画で貨物列車が機回ししたり機関車つけかえたりしてるのは、これ使ってる。
0433riorio ◆rio2xMQlrQ 2010/04/26(月) 00:33:15ID:FQfe6F9n
β2.0.2.9とα3.0.1.9をあわせてリリースしましたよ、っと。
サッカースタジアムの試合終了時刻を調整しました。
なんかー、狙った時刻と1時間のズレが生じるんだよなー

あと、駅のプロパティを開いたとき、待ち客数を実数/需要値の2段階表示にしました。
需要値のほうが、従来「待ち客」表示されていた数字になります。
実数は、これから既に乗って行った分を差し引いてます。
実際に到着した列車に乗り込むのは、実数のさらに0.3倍です。


>>427
前面展望見ましたー
ふぁみりーまーとがw

駅位置の取得再現がまだ広すぎるマップに対応しきれてないのか、山手線を走行したら
目黒〜品川〜神田のあたりでホームがなかったです。

私はリアル縦横比=現状、が好きかな。
ただ、すべて強制的に2Dチップから吸い出したものしか表示できないのであればつまん
ないきがします。3Dの展開図をユーザ側で自作したものについては吸出しせず自作優先
になれば、3D展開図をしこしこ描くことでよりリアルな3D Viewが楽しめていいかなーと。
0434名前は開発中のものです。2010/04/26(月) 02:44:54ID:9ifvD3b6
>>427
全然OKだと思う。
すれ違い時の視点から見れば、むしろアスペクト比がちょうど良いのでは。
それにしても、たった数ピクセルの高さしかない車体でも
PS版の電車でGOみたいな感じが出せるんだな。
0435名前は開発中のものです。2010/04/26(月) 02:58:00ID:9ifvD3b6
>ただ、すべて強制的に2Dチップから吸い出したものしか表示できないのであればつまん
>ないきがします。3Dの展開図をユーザ側で自作したものについては吸出しせず自作優先
>になれば、3D展開図をしこしこ描くことでよりリアルな3D Viewが楽しめていいかなーと。

新たなコントリビューションを定義しないと無理では。
0436名前は開発中のものです。2010/04/26(月) 05:50:38ID:KGb5GA8v
いまは擬似的にやってるだけだけど、連結機能が出来たら某京急も真っ青なダイヤを作る奴
出てくるだろうな。
■ このスレッドは過去ログ倉庫に格納されています