忍者ブログ

首都圏鉄道案内所

首都圏鉄道案内所のブログです。防災無線の収録記や、鉄道関連の小ネタなどを掲載します。日比谷が適当に書くことも。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

乗り換え案内の表示方法を募集

こんにちは、日比谷です。

現在、トレインビジョンの乗り換え案内の機能を作っているのですが、実物のトレインビジョンで乗り換え路線が5路線の場合の表示例が少なく、どのように表示させるかを悩んでいます。

サンプルとしてパターンAとパターンBを作ってみたのですがどちらが良いですかね?
コメントにて意見を頂けると嬉しいです。
その意見がトレインビジョンに反映される可能性大です。


※クリックで拡大

拍手[1回]

PR

トレインビジョンメーカー(11)

こんにちは、日比谷です。

今回は広域路線図とドア開閉モーションを追加しました。
また、これまで断片的だったトレインビジョンの動作を実物のような一連の流れとして動作するように変更しました。公開版の完成に向けて取り組み始めたわけです。(変更して早速不具合が見つかっているのは大きな声では言えません)

あと、一度トレインビジョンを公開してしまうと既存のXML項目の仕様を変更することはできるだけ避けるべきなので、公開後の拡張性を少しは意識した修正を施しておこうかと考えています。
2~3回後の報告動画からは地味な動画になる、もしくは目に見える変化がない動画になりそうです。


拍手[0回]

トレインビジョンメーカー(10)

こんにちは、日比谷です。

定期報告も早いもので10回めです。トレインビジョンメーカーを作り始めて半年になるわけですね。

今回の更新でXMLで設定する項目は全て実装完了・・・かもしれません。
今後作るものはこれまでの設定項目を流用するものやXMLの設定に関係なく動作するものばかりの予定です。予定と言っておきながら実はそれほど考えていないのも事実です。行き当たりばったりで作っています。

いずれにせよ設定方法を深く考えるプロセスは終了したと思うので気が楽になりました。今後も頑張って作りこんでゆきます。

拍手[2回]

トレインビジョンメーカー(9)

こんにちは、日比谷です。

今回は乗り換え案内等を作成しました。内容は動画を観ていただくとしてここでは誰でもトレインビジョン内部のプログラムのお話を概要だけしてみます。


乗り換え案内の表示で行っている事は乗り換え路線名を設定順に左詰めで表示する事です。これを行っているプログラムは赤字の箇所です。(以下、プログラムコードに関する参照箇所は単に「赤字」等とする)ただし、この方法では路線名が長い場合に表示が画面外まで及ぶ事があります(図①参照)そこで、表示が画面外に及ぶかどうかを判定して(青字)別々の処理を行います。
表示が画面外に及ぶ場合は、画面外となってしまうサイズを計算します。そしてそのサイズ等分して各乗り換え路線の表示を縮小します。(図②参照)(緑字)
しかし、この方法にも問題があります。一つだけ極端に長い路線名と短い路線名が混在する場合に縮小幅が短い路線名のサイズよりも大きくなるのです。(図③、図④参照)
これを防ぐために、路線名の縮小サイズに制限を設けました。具体的には日本語2文字分を最小サイズとしてそれ以下の縮小を行わないようにしました。ただ、これでは制限により縮小サイズに余りが生じます。そこで、余った縮小サイズを等分して残りの路線名の縮小サイズに追加させます。(図⑤参照)(橙字)
これで問題なく乗り換え路線名が表示できます。

ざっくりとでしたがこんな感じでプログラムを作っています。起こりうる全パターンを考えて作らなければならない事が面倒くさいですね。それでも読み込むデータはXMLである程度固定しているのでまだ楽ですが・・・


  public void transfer() {
    int sumWidth = rate(190);
    int count = 0;
    int x = rate(190);
    //乗り換え路線数の取得
    for (int i=0; i<5; i++) {
      if (transferExist(i)) {
        count++;
      }
      else {
        break;
      }
    }
    //乗り換え表示の幅が画面サイズを越える場合は縮小、超えない場合はそのまま並べる
    for (int i=0; i<count; i++) {
      sumWidth += transNameWidth(i);
    }
    if (sumWidth > xmlData.getSize()) {
      int[] sub = new int[5];
      int notOverCount = count;
      int tmpSize = 0;
      boolean over = true; 
      for (int i=0; i<count; i++) {
        sub[i] = transNameWidth(i) - ((sumWidth - xmlData.getSize()) / count ) - rate(81);
      }
      while (over) {
        for (int i=0; i<count; i++) {
          if (sub[i] != rate(88)) {
            sub[i] -= tmpSize / notOverCount;
          }
        }
        over = false;
        for (int i=0; i<count; i++) {
          if (sub[i] < rate(88) && notOverCount > 1) {
            tmpSize = rate(88) - sub[i];
            sub[i] = rate(88);
            notOverCount--;
            over = true;
            break;
          }
        }
      }
      for (int i=0; i<count; i++) {
        transferView(i, x, 590, sub[i], transNameHeight(i));
        x += sub[i] + rate(81);
      }
    }
    else {
      for (int i=0; i<count; i++) {
        transferView(i, x, 590, transNameWidth(i) - rate(81), transNameHeight(i));
        x += transNameWidth(i);
      }
    }
  }






拍手[0回]

トレインビジョンメーカー(8)

こんにちは、日比谷です。

今回はホームの停車位置の案内を作成しました。
デザインはメトロ15000系と東急5050系のものを足して2で割ったものになっています。
次回はホーム上の階段の位置や出口名等の案内を実装したいのですが、どのようにそれらをXMLで表現しようか悩んでいます。ややこしい事になりそうです(´・ω・`)

これまでに描いたコードの行数が7000行に達しました。
設計書があるわけでもないので作った自分自身でも「この部分は何をしているんだろう」と迷う箇所がぽつぽつでてきて困っています。(コメントを書かない自業自得)

ソフトを公開するにあたりwiki的な説明書をweb上にあげる必要があると思うのですがそれを作るだけで一ヶ月くらい時間を取られそうです・・・

拍手[2回]

カレンダー

03 2017/04 05
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

最新CM

[01/16 NONAME]
[09/12 横浜特快]
[09/12 横浜特快]
[08/18 Miz]
[07/18 こな]

ブログ内検索

P R

カウンター