第 269 回 PTT のお知らせ


日時: 2001年5月31日 (木) 18:30 から
場所: 早稲田大学理工学部59号館4階 情報学科会議室 山手線高田馬場駅より早稲田通りを東へ7分、 明治通りを南へ8分、右手に理工キャンパス。 キャンパスの南側の道から正門入る 正門のすぐ左手が59号館
 |               |
[T]--------------+----
 |  早稲田通り   |明
 |               |治
 |山             |通
 |手             |り
 |線   ----------+<-諏訪町交差点---
 |            [7]|
 |               |
 |       +------+|
 ||      |早稲田|| 
 |v      +--[S]-+|
 |新     --------+
 |宿             |[L]
[T]=高田馬場駅   [7]=セブンイレブン  [L]=ローソン
[S]=正門
(キャンパス拡大図)
       +----------+
       |    51    |<-高いビル
       +----------+

     +----+         +----+
     | 59 |         | 52 |
     +----+         +----+ 

題目: アニメーション作成に特化したプログラミング言語と開発ツール
話者: 長 慎也(早稲田大学理工学研究科D1)
概要:
ゲーム等、アニメーションを扱うプログラムを開発するにあたり重要な要素と して多数のオブジェクトを並行的に処理する、画面のレイアウトを行う、画像 や音データ(リソース)を管理するといったものがあげられる。これらの作業 を積極的に支援する開発環境Tonyu Systemを作成した。Tonyu Systemは、プロ グラミング言語Tonyuとそれをもちいたアプリケーション開発ツールからなる。

Tonyuの処理系は、各オブジェクトに最低1つのスレッドを割り当てオブジェ クトの振る舞いを個別に定義できる。各スレッドは仮想機械上で実行されOSの スレッドを用いた場合より少ないリソース量で並行処理を再現する。一方、開 発ツールを用いることにより、各オブジェクトを視覚的に配置することが可能 である。Delphi,JBuilder等のRADツールではGUI部品の視覚的な編集が可能で あったが、Tonyu Systemは、これをアニメーションにおけるオブジェクトに対 して行える。

また、このシステムは、多くユーザに積極的に開発をしてもらうための仕組 みを提供する。作成したアプリケーションは実行可能形式で配布可能だが、同 時にソースコードを埋め込み、他の人による改変を許可することが必須となっ ている。


第269回 PTTメモ


出席者: 須澤諭,多田好克,岩崎英哉,宮澤慎一,鈴木信吾(電通大), 渡邉貴宏(早大),伊知地宏(ラムダ数学教育研),石畑清(明大), 和田英一(富士通研),並木美太郎(農工大),佐々木崇郎(), 樋口直志,丸山一貴,寺田実,疋田敏朗,田中哲朗(東大)
質疑応答:
Q. あるオブジェクトが他のオブジェクトと通信する方法は?

A. 次の2つの方法がある
 1. 設計時に配置する各オブジェクトには一意なグローバル変数名がつけられ
るため、それらのグローバル変数を用いて参照する

 2. 全オブジェクトへのポインタを保持する配列オブジェクトが用意されてい
るため、その要素を順番に参照する

Q. オーサリングツールとの違い A. Flashのようなオーサリングツールでも、オブジェクトの動作がスクリプトが 記述( 並行処理の記述はできないが)できるため類似のシステムといえる。 Tonyuの狙いは、プログラミング初心者がプログラミングに親しんでもらうと いうものなので、Flashよりは多くのコーディングが必要となる。
Q. このシステムはコルーチンを行うシステムなのか A. コルーチンは、各処理単位が状態を持ちながら、継続的な動作を行い、次の 処理単位への処理の切り替えをユーザが明示的に行うという特徴があり、これ はTonyuの擬似並行処理にもあてはまるため、コルーチンを行っているといえ る。マルチスレッドプログラムと違い、処理の切り替えが明示的(1フレームご とにupdate()メソッドを呼ぶ)であるため、オブジェクト間の同期をとりやす い。
Q. スタックを関数毎に分割する利点は A. 一般に、1つのスレッドが必要とするスタックサイズを事前に知ることは できない(特に再帰がある場合)。 しかし、1つの関数内で必要なスタックサイズ(その関数内で他の関数を呼 んでいる時のサイズは考慮しない)はコンパイル時に知ることができるため、 関数呼び出し毎にスタックを動的メモリによって確保することが可能である。 このため、必要最低限のメモリでスレッドを用意できる。
Q. 衝突判定をイベントドリブンにした方がわかりやすいのでは A. イベントドリブンでは、どのタイミングでイベントが呼ばれるかがわかり にくいため、各オブジェクトが互いに干渉する(両者が重なりあってはならな い)ような、厳密な当たり判定が必要な処理を記述するのには不向きである。 しかし、オブジェクト同士が衝突したら、両者とも破壊されるといった処理 は、必ずしもそのような厳密な処理が必要でないため、イベントドリブンで行っ たほうが簡単であると考えられる。
Q. 各仮想スレッドに優先度をつけることはできるか A. 現在のところできない。1画面しかない狭い空間では、全オブジェクトが 常に忙しく動いていることが多いが、スクロール可能な広い世界では、画面外 にいるオブジェクトを休止させるといった処理が必要になってくる。これは今 後実装する予定である。
Q. 各スレッドの1フレームあたりの実行時間に制限はあるか A. 1フレームあたりに実行できる命令のステップ数が決められており、それを 過ぎると強制的に次のスレッドに処理が渡される。ただしこれは、ユーザの過 失でできてしまった無限ループによるシステム全体のフリーズを防ぐための安 全装置にすぎないため、基本的にはupdate()の呼び出しは必須である。
Q. その制限ステップ数を少なくすれば、update()を使わなくても自動的に切り替 えを行えるのではないか A. あまり1フレームあたりの実行可能ステップ数少なくすると、update()を きちんと行っている処理でも余分な切り替えが起こったり、同期がとれなくな る可能性がある。
Q. どうしてJavaのようなプラットフォーム非依存の環境で作成しなかったのか A. 擬似並行処理を実行するための仮想機械を実装しているため、Javaでその 仮想機械の実装を行うと、仮想機械上で仮想機械を動かすことになり、処理が 非常に遅くなることを警戒したためである。
Q. なぜGPLを強要するようなライセンスなのか A. プログラミング初心者は、ライセンスに関してはあまり考慮しないことが 多いので、例えば誰かが作成したアプリケーションについて第三者が改造を施 す際に、コピーや改変の定義が明確でないために改造していいのかどうかを迷 うことがある そのため、システムの側で明確なライセンスを定義したほうがよいと考えた からである。(この件については、皆様のアドバイスを考慮した結果、ライセ ンスは特に定めないほうがよいという判断になりました)
Q. ハノイの塔をアニメーションで表示できるか? A. http://hoge1000.kake.info.waseda.ac.jp/tonyu/hanoi.zip(ランタイム版) 再帰呼び出しを用いた一般的なアルゴリズムを用いているが、移動を行う部 分はアニメーション化されている Ctrl.tonytu 円盤移動手順作成アルゴリズムと円盤を動かすためのアームの動きの定義 Disc.tonyu 円盤の動き
Q. Xeviousは作れるか? A. 背景画(マップ)の表示と、画面スクロール機能を追加する予定。これに よってたいていの2次元アクションゲームは作成可能
追伸: Tonyuのサイトを開設しました。工事中です。ダウンロード可能になるまでし ばらくお待ちくださいhttp://go.to/tonyu/