■[197] 例外の捕獲 Casper 2001年10月01日 (月) 16時27分 |
あのクラス参照問題に解決の糸口が見つかりました。
あの『try…except文』で例外を捕獲して、処理できることを理解できました。
try…exceptではtry部で例外が発生した場合、except部で例外を処理することが出来ます。あのクラス参照問題では「EAccessViolation」という例外が発生しているのでこれを捕獲して、クラスの参照を消すことが出来ました。
その部分のソース
try
if TEST2<>nil then
Edit1.Text:=TEST2.Str;
except
on EAccessViolation do TEST2:=nil;
end;
この場合TESTというクラスがあって、そこに文字が入っているわけですが、そのクラスをTEST2として参照していて、TESTがFreeされた後、TEST2で文字を参照しようとするとEAccessViolation例外が作成されます。この例外をexcept部で捕獲してTEST2をnilにすることで参照をなくすようにします。
この問題がなかなか解決されなかったのは、Delphiが律儀に例外を捕獲していたからで、対処法を記述していても例外が発生した瞬間にデバッガがこれを感知してダイアログが表示されていました。
でもあくまで例外が分かるだけで、根本の問題の解答じゃないみたいな…。でもでもクラスが使えるかどうかの判断をするだけなら、とりあえず使ってみて例外を調べて…でもでもでも例外が起きたからといってクラスの参照を消してしまうのも極端すぎないだろうか…でもでもでもでもそんな使えないクラスならnilにしちゃえです。
■[196] 教官の誕生日パーティーからのリポートです Casper 2001年09月30日 (日) 15時46分 |
誕生日なのでケーキでパーティーです。
ケーキは簡単に8等分にしました。それを1人づつさらに取りました。そこでアクシデントが発生しました。ケーキを皿に載せようとすると倒れてしまいます。3人目でようやく成功。6回中2回成功しました。
7人いるのにケーキは8つ。気まずい雰囲気と思っていましたが、ケーキを欲しがったのはCasperとぷにちゃだけ。他の人は遠慮ですか?
仕方ないので生き残りバトル…ではなくじゃんけんで決めました。「ネコバトル」…ネコを追いかけ、捕まえた者を勝者とする、で決めようかとも提案しましたが、結局じゃんけんでした。
負けた私は視線で攻撃しましたが背中でガードされ、けっぷをくらいました。
昼用に白飯を炊いていました。しかし昼は教官の作ってくれた焼き飯(300円)で済ませたので、五合まるまる余っていました。なし崩し的にケーキから白飯を食べるようになりました。それにしても3時のおやつ代わりのケーキでパーティーのはずなのに1、2回おかわりしました。どこかおかしいです。まぁ結局余りましたが。
■[195] 一年生の神業 Casper 2001年09月30日 (日) 09時11分 |
馬のモーションをつけるために「MotionMaker」は存在しています。一年生にばかり期待していても駄目なので、モデルの終わったG部長直々にモーションを付けてもらうことになりました。
しかしそのツールのボタンの多さに戸惑い気味の部長さんです。MotionMakerはとりあえずというか、急ピッチで開発していったので、結晶が成長するみたいに後から後から付け加えていったので、機能が隠れていたり、前のバージョンの操作と最新の使い方がすこしずれていたりで使いにくそうです。モーション定義を直接いじるのも使いにくさの1つかもしれません。
そんなわけでこれを使って「常足」を作った一年生に「敬礼」です。よくもまぁ難しい課題をこなしたものだ。ちょっと常足じゃないみたいだが、それなりに歩いてみせるモデルを見せられて、教官もみんなも驚いた。
開発した自分もそこまで使いこなせません。
このツールで歩かせるのがどれほど大変か、一度やったらすぐに分かります。
(使い方の説明で、すでにいっぱいいっぱいになるかもしれませんが…)
■[194] 学校に木霊すネコの声 Casper 2001年09月30日 (日) 08時59分 |
よく、朝起きたばかりには日記のネタが思いつくのですが、これまたよく忘れやすいので手早く書かないといけません。
って言ってるそばから忘れそうです。
学校で合宿というか泊り込みをしていると、体の調子が気になります。バランスの良い料理を食べることは期待できないので、せめてサプリメント飲料で誤魔化そうと思います。
でも一番欲しかった「ウォーター・サラダ」は売り切れでした。あとは「オロナミンC」、「ダカラ」、「ポカリスエット」、「ミネラルバランス」などです。結局「ミネ・バラ」にしました。今日の朝食はハンバーグ弁当です。ハンバーグと白飯です。
研究室に戻るとき、校舎でネコが鳴いていました。その声は人のいない校舎にこだまし、ネコが取り付いたかのようでした。まぁネコが学校に住み着いていると知っているので別になんとも思いませんが、ちょっと今どこにいるか計算していました。
■[193] OSの再インストール Casper 2001年09月29日 (土) 09時50分 |
昨日、新しいソフトをインストールしてみたところ、相性が悪いのか、例外が発生するようになりました。起動時にそれが発生します。何か共通のファイル(DLLかな?)を上書きして、それを使っているアプリすべてが例外処理を出しているような状態です。(これはあくまで仮説です)なんだか「もぐら叩き」みたいにダイアログが出てきます。
すぐにアンインストールしたけど、相変わらずで、さらにビープ音がときどき鳴る始末です。
そこですべてを初期化してしまうことにしました。
データの大半は40GBの2個目のHDDに入れてあるので、解凍だけのアプリや、ブックマーク、LANの設定等を移すだけです。そしてICQをバックアップしてOSを入れなおしました。
インストールは順調で、LANカードのドライバをいれるのに少し手間取っただけで、1時間くらいで最初の状態に戻りました。まぁ様々なアプリを大量に突っ込むのでこれからが大変なんですけどね。とりあえずWindowsUpdateをやって、Netscapeを入れてIEとはおさらばです。あとはWinMXやRarUtyと各種アーカイブDLLを入れてショートカットを作ってとりあえず作業は終わり。まだ仕事場や写真屋が入るけど時間がかかるので後回しです。すぐに必要なわけでもないし。UOもいれるけどCDが見つかりません。ぷにちゃが使っていたけど、今寝ているので聞けません。
それにしてもヴァージンのPCは素直でいいね。起動も速いし。常駐アプリの起動にかかっていた時間で起動が終わっちゃうよ。終了も「終了しています」が表示さてすぐに電源が切れるし。DMAC氏が何度もやっていたほど楽しいし新鮮な気分です。でもこれがこれからどれだけ荒らされるか…。でも本格的にカスタマイズするのはぷにちゃとさやです。僕はもう使わなくなりますから。
■[192] Createの意味 Casper 2001年09月27日 (木) 18時34分 |
Createはクラスの実体を作るところです。すべてのクラスはTObjectを継承してあるので、メモリを確保するとか基本的なことはTObjectのCreateがやってくれているのだと思います。
で、新たにクラスを作ったとき、親のクラスの関数をオーバーライドして作っていくのですが、別に記述する必要がなければ、そのままでもいいみたいです。
MyClass1:=TMyClass.Create;
■[191] 教官の行き先 Casper 2001年09月27日 (木) 15時33分 |
研究室にいると、教官がいないときは電話をとらないといけません。
そのとき電話の相手は「長尾さんはいますか」と尋ねます。大抵はちょっとした用事で出かけていたり、会議だったり、まだ来てなかったりします。行き先が分かっていればいいのですが、よく分からないときはちょっと気まずく、「よく分かりません」としか言えません。
教官が部屋を留守にするときは、どこへ何のために行ったかを把握しておきましょう。
■[190] モーション・イベントの完成 Casper 2001年09月26日 (水) 17時58分 |
最近つくったシステムです。
これはモーションにイベントを埋め込むもので、指定した時間が来ると文字列が得られる仕組みです。各モーション、パーツごと、動作ごとに、個別で指定できるので、これを使ってサウンドや馬の扶助のタイミングを取ってください。
モーションイベントTStringsで与えられます。TStringsを用意して、TFrameModel.ALLTreeMotionMove(N, TStrings)で受け取りましょう。これは毎回呼び出すたびに、前回の呼び出しとの間に発生したすべてのモーションイベントが取り出されます。
モーションイベントの作成にはMotionMaker5-12、実行にはNetLinkJooba_06を使ってください。
最近、外部ファイルが多くなったので、ProjectU_File_Packとして個別に圧縮しています。使うときはこいつを一緒に展開して使いましょう。
MotionMakerは事故を防ぐために一緒にしてありますが…。
■[189] TStringsクラス Casper 2001年09月26日 (水) 16時15分 |
TStringsクラス
これは仮想クラスです。実際にはTStringListを使います。他にもこいつを継承して自分で定義する方法もあります。まだ本格的に継承してクラスを作っていくやり方はやっていないので、今度試してみようと思っています。
TStringList等を引数や戻り値として使う場合にTStringsと書いていてもやり取りできます。まぁTStringListしか使っていないのでTSytingListで渡してもいいわけですが、大元のTStringsなら他の派生クラスも送れちゃうので、そのあたりが便利です。
文字列を配列みたいに管理できるので、すっごく便利です。
Count
要素数です。配列の個数みたいなもの。文章の行数です。
Text
登録されている文章をまとめて得ることができます。
Strings[Index:Integer]:String
行ごとに文字列を取り出せます。
これを省略して TStrings[Index] と使えます。
ADD(S:String):Integer
文字列を追加します。追加したものは最後の行になります。
戻り値は追加された行、インデックス番号です。
AddStrings(Strings: TStrings)
他のTStringsから追加します。
Clear
文字列をすべて削除します。
IndexOf(const S: string): Integer
文字列Sが入っている行番号を返します。
文字は完全に一致する必要があります。
見つからない場合は-1がかえってきます。
LoadFromFile(const FileName: string)
ファイルから文章を読み込みます。
SaveToFile(const FileName: string)
ファイルに文章を保存します。
■[188] テストの珍回答 Casper 2001年09月25日 (火) 13時04分 |
情報機器でやらかしました。
「アクティブマトリクス方式の液晶」の説明で、「薄膜トランジスタを用いて、アクティブマトリクスを実現し、TNタイプの液晶の応答速度を補う」と書きました。
そして「その液晶はTNTと呼ばれる」と書いてしまいました。
液晶には火薬(TNT)は使いません。通電した瞬間に、ディスプレイの前に座っている人を爆破しちゃいそうです。
正しくは「TFT液晶」でした。これは発色が良いので液晶ディスプレイの主流として普及し、携帯電話の画面にも使われています。
■[187] Re[177]: ほかほかの栗ごはん Casper 2001年09月25日 (火) 12時55分 |
昨日までの「追い込み合宿」から家に帰ると、ほかほか栗ごはんでした。
そういえば、もう試験なのかと思ったりしました。
■[186] 研究室内のLAN Casper 2001年09月25日 (火) 12時53分 |
ここの研究室にはパソコンがたくさんある。他の研究室の平均の倍はあると思う。
それらをLANで繋いで、いろいろなことをやっているが、昨日、LAN経由でCD-Rにデータを焼いた。
そのときPsycho3が止まり、他のコンピュータ、特にLinuxが使えなくなった。これまでにもインターネットが遅くなったりしたが、パソコンが止まったのは初めてである。
教官が「Psycho3が死んだ、何かやってるか」と聞いてきました。僕としてはただCD-Rを焼いただけなので、悪くないはずです。その前にDMAC氏が同じことをしたはずなのに大丈夫でした。それとも、そのとき既に死んでいたのかな。
■[185] 楽天市場の懸賞広場 Casper 2001年09月24日 (月) 23時27分 |
最近、懸賞にはまっている。楽天市場に行って片っ端から応募しているのだ。
その後、応募の確認メールが届くのだが、その数47件。結構がんばっている。
これで懸賞に当たれば『懸賞生活』なのだが…。
そういえば去年、2年生(今は3年生)が「懸賞競争」をしてなかったでしょうか。これは懸賞で当たったものの価値(価格)で勝負するもので、正しい楽しみ方は、
「僕はマウンテンバイクを応募したぜ(\54,800)」
「俺なんかベットを狙ってるんだ(\120,000)」
と、応募したことだけで言い合うものみたいすです。
結局誰も当たらなかったのかな?
■[184] Netscape6.1の使い心地 Casper 2001年09月24日 (月) 23時19分 |
突然Netscape6.1をインストールしてみたくなりました。
IEなんてくそくらえ、Netscape最高! と思っている割にはNetscape6を使っていませんでした。
まず始めに、そのころのマシンがへぼかったというのがあります。Netscape4.7はそこそこ動くのに、Netscape6は遅かったのです。そしてHTMLタグの対応が大幅に変わっていたという点で使っていませんでした。たしかにJavaやスタイルシートを正しく表示させるためには、新しいブラウザを使うのが妥当です。しかし、古きよき旧タグを使っているところもあるので、一度はインストールしてみたNetscape6を消しました。
あれからNetscape6.1になったのでインストールしました。ハードディスクが新しいので少しは起動が速いし、タグなどのことはNetscape4.7を併用して使えば大丈夫でしょう。
でもそんな思いも減少気味です。まずフォントが小さい。まぁこれは調節次第で何とかなるでしょうが。
あと、やつぱり自分の思ったとおりに、作ったページが表示されないのはがっかりです。「Local Link」のインデントも無効になっています。
そしてこの日記が書けなくなったのが痛いです。いまこの文章はNetscape6.1で書いていたものをコピーして、エディタで書いたものです。そしてNetscape4.7で投稿しました。文字を打っていたら、改行したとたんにキャレット(カーソル)が消えて、先頭に飛んでしまいました。がんばっても書けなくなりそうだったので、急遽退避させました。
あと、IEぽくなりすぎ。Javaの起動は早いし、左にブックマークが表示されていたり、ウインドウサイズを変えても、再読み込みを行わずにページを表示したり、パスワードを管理してくれたり、リンクにポインタを合わせるとアンダーラインが表示されたり、Netscapeならオートジャンプして、IEなら止まるようにしてあるページで、止まったりしました。ほんとにNetscapeか、これは!!
いくら最新のものでも、サイトを見て回るのに、漫然と遅いのは重大な欠陥です。さらに速いパソコンを買ったときにでも、その使いやすさを再度、試したいと思います。
■[183] プログラムの統合 Casper 2001年09月24日 (月) 18時27分 |
大きなプロジェクトになると、プログラムを複数人で手分けをしてコーディングし、それをまとめて完成させるということが行われるようになります。
今日はプログラムを1つにまとめました。今回はシステムは複雑で高度な仕組みになりましたが、結構すんなり統合化されました。
やっぱり「なれ」でしょうか。クラスの仕組みも大体分かってきて、機能を構造的に分けて作るようにしたので、合体もすんなりいきました。
しかし合体してしまったので自分の台で開発できなくなりました。機能の中にデーターベースがあって、それはプロフェッショナル版でしか使えません。
■[182] 足首の可動範囲 Casper 2001年09月24日 (月) 09時32分 |
締め切り直前で泊まり込みです。
これが始まってから、左の足首の可動範囲が狭くなりました。
可動範囲というのは、動かせる限界のことです。何もしていないときはそんなに感じませんが、歩くときに「これ以上曲がらない」ということがあります。ストレッチ運動するとよく分かりますが、あきらかにいままでよりも曲がりません。右と同じ所まで曲げようとすると痛くなります。なんていうか筋が固まった感じ?
たぶん夜寝るときの状態が原因だと思います。めんどうなので布団を敷かずに、床にゴロ寝の状態です。
寝ている間にこむら返りが起こることがありますが、あれは寝ている間に筋が伸ばされてしまって、もう伸びているのか縮んでいるのか分からなくなって、痙攣する症状です。
僕の症状はこの一歩手前くらいだと思います。
■[181] 3時のおやつ Casper 2001年09月23日 (日) 11時44分 |
「マグカップで作る簡単ケーキ、モコモコ」
これが結構好きなお菓子です。簡単に説明すると「1分で作れるケーキ」です。
箱の中にはケーキの素、ミックスと言うらしいです。小麦粉やコーンスターチ等が混ぜ合わされているからなのでしょうか。それと溶いた卵をマグカップ、膨らんだときにあふれないくらいの、電子レンジで使える容器ならなんでもいいです。それに入れてダマが残らないように混ぜます。適当なところで電子レンジに入れて1~2分くらい、チンすれば出来上がりです。
5分くらいで用意から、食べ始めることが出来るほど簡単なので、おやつとして楽しむには最高です。ちょっとだけ作る楽しみがあるので何回か作ってみました。
一箱100円で、2回分です。この他に用意するのは容器と卵だけです。他にも色々なものを混ぜ込んで楽しめるみたいなんで、今度からはこれに挑戦したいと思います。
■[180] マイコン部の特技 Casper 2001年09月22日 (土) 20時47分 |
今日の夜は「マイコン部の特技」をやってみました。
それは「MP3を聴いてメモ帳に打ち込む」というもので、大音量でアニソンやJPopを垂れ流しにして、カタカタというキーボードを叩く音が部屋に充満します。
いつもはイヤホンで遠慮しながら音楽を聴きながら作業していますが、このときだけはオープンエアーです。
曲を覚えているととても有利です。
■[179] 馬モーションの変更方法 Casper 2001年09月22日 (土) 16時12分 |
とにかく、簡単な使い方を目指して作ったモーションクラスでは、動作を変えるときも関数一発です。
モーションを変える場合は2種類の方法があります。
フレームに関連付けられたモーションを変更する方法
フレームにはモーションリストを関連付けることができます。そしてフレームをモーションで動かすときには、そのモーションリストが選んでいるモーションデータで動きます。
そのためフレームのモーションリストに対して、SetSelectMotionDataを行うと、モーションデータが変わって動きが変わります。他にモーションリストをごっそりと、取り替えることも出来ます。
モーションリストルートでモーションを変える
モーションはそれを一元的に管理するモーションリストルートで管理するのが一番楽です。
モーションリストルートはルート構築ファイルを読ませることで、必要なモーションリストを確保してくれます。フレームにモーションリストを割り当てるときも、構築済みモーションリストルートを指定することで、自動的にモーションリストを割り当てることが可能です。
モーションリストルートでは全てのモーションに対して、「次のモーションはこれ」といった命令を行うことが出来ます。これは確保しているモーションリストすべてに対して、次のモーションに切り替える働きがあります。最初に指定するのはモーションの名前です。その文字を含むモーションを持つモーションリストはすべて変更されます。その名前がないところはモーションの変更は起こりません。
■[178] 体重の変化を記録 Casper 2001年09月22日 (土) 08時52分 |
体重計があるので、毎日の体重を記録しておくことにしました。
一日のうちに3~4回くらい計ろうと思います。
データはExcelに書き込んでいきます。
一日のうちでも体重は結構変化しているそうです。
■[177] ほかほかの栗ごはん Casper 2001年09月21日 (金) 01時16分 |
今日の夕食は栗ごはんでした。
まぁそれだけなんですが…。
ちょつと食べ過ぎて、ちょっと腹が痛いです。何か出そう。
■[176] MotionMaker5のこと Casper 2001年09月21日 (金) 01時14分 |
「馬の動きで上下動は捨てられない」ということでモーションに座標の変化も含めるように改造しました。それがMotionMaker5なのです。
べつに改造は難しいものではなく、いたって簡単でした。もともとY軸、Z軸のベクトルを補間するように作られていますから、そこに座標を表すベクトルを追加して補間していくだけです。他にも追加しろと言われれば15分で作れます。
フレームの方も問題なく、基本的な制御用関数は用意済みなので、あとはそれを使うだけです。座標を変えるにはSetPositionを使うだけです。
しかし問題はモーションデータです。現在1年生を使って作っているものです。はっきり言って互換性がありません。レコード(構造体)単位でファイルから取り出したり、書き込んだりするのでエラーが発生します。今年覚えた「テキストファイル+ヘッダー情報」に比べれば、いまいち使いにくい方法です。「テキスト~」も洗練されているとは言えませんが…。
さらに面倒な事に、馬の種類ごとに座標が異なるため、それぞれで用意しなければならなくなります。もしサラブレッドしか乗れないようにするなら無問題です。
互換性が無くなりますが、上下動を今から実現させるにはこれを使うしかありません。最初はフレームに重力(下向きの加速)をかけておいて、馬が地面を蹴ると上向きの加速が加わって、上下動する、といったことを考えていました。
時間が無いのでこれは却下です。さらに時間がマジでないので、今入力してもらっているサラブレッド以外はそんなに動かないと思ってください。(動かしたいやつは自分で入力しなさい)
とういうわけで今までに作られたモーションデータを4->5にするために、ツールとそれぞれのモーションを確認できるMotionMakerを持ち帰って、家でコンバートして持ってこようと思っていました。フロッピーに入れるには大きいし、焼くのも時間がかかるので、とりあえず弓削に置いて、それをダウンロードしようと思いました。
しかし、圧縮をしていなかったために、XFileが30個、フレーム定義が40個、モーションデータが100個近く、置かれる事になりました。さらに日本語だったので最悪です。ファイル名が化けました。それぞれのフレームやモーションデータに付けられている名前でファイルに保存していたので、名前が化けると読めません。
そのせいでダウンロードする気が失せたので本日の作業は終了。明日何をするかを決定するか、レポートを書くだけになりました。
■[175] プロコンの予定 Casper 2001年09月18日 (火) 00時52分 |
プロコンの予定について家族で色々と相談しました。車を出したり、泊まりなどで色々と用意する事があるからです。
まず空港までについて話し合いました。この時肝心の父の予定が分からなかったけど、車なら6:40までに出ればよいということです。まぁフラワーライナーという手もありますが、僕的にはバスはあまり好きじゃありません。
帰りはバスでと言う事になりましたが。
次に地図でプロコンの会場周辺を調べました。
結構驚きました。このとき地図ソフトで調べていました。空港から道を辿って、「ホテル ニュー湯野浜リゾート」へ。これはすぐ分かりました。しかし会場となる中央公民館ってどこ?!
結局中央公民館はその地図ソフトには記録されていませんでした。大体の位置を推定して驚きました。プロコン会場と「ホテル ニュー湯野浜リゾート」はか・な・り離れています。そりゃまぁバスで駅まで30分ですから。因島からだとどこまでだ、向島かな?
いくらなんでも遠すぎませんか? それとも本州の人にはこれが普通なのか。
■[174] 馬のモーションを作る仕事は、1年生にさせよう Casper 2001年09月17日 (月) 19時14分 |
もう期限まで時間が無く、寝る間も惜しんでの作業になりそうです。このまま行くと2日で1つの作業を終わらせることになりそうです。
あまりにも無謀なので、モーションを作るのを他の人に任せることにします。ツールは作ってあるので、後はフレームを動かしながら時間を書き込んでセーブするだけです。
ジョイパッドとDirectXの動く台があればいいので一年生にやらせましょう。
しかし、ちょっとバグが発生しました。MotionMaker4では新しいファイルを保存することができません。既にファイルがあれば問題なしです。たぶん、ファイルが使えるかどうかの処理は読み込み時のみしか使えないのでしょう。
判断のルーチンはファイルを開いてみて、使えるかどうかを調べる方法だったと思います。
よって、セーブの時にこのルーチンでファイルを調べる必要なしです。
さらに作業のほかに課題が出ています。
ひー。
作るときの注意点
1.フレーム、モーションの名前に重複が無いようにしましょう
それぞれに付けられた名前で定義ファイルを作成します。
2.時間はミリ秒
モーションに指定する時間はミリ秒単位です。
最初のモーションフレームは0から始めましょう。
ダブルクリックするとフレームにモーションを反映させる事ができます。
3.同じ時刻を設定しない
時刻を指定せずにデータを取り込んでいくと、同じ時間のモーションが出来てしまいます。
Editで時間を変更してください。
4.作業が終わったら必ずセーブ
まぁ基本です。結構面倒なのでデーが消えると苦労します。
5.フレーム定義のセーブ、ロードはフレームを選択してから
選択したフレームに対してロード、セーブが行われます。
6.フレームの基本姿勢でモデルを組む
モデルを組む時は姿勢を変更してはいけません。
モーションを設定する時に、基準の値からずれてしまいます。
7.フレームにモーションを設定しないと動かない
フレームにモーションを指定しないと、モーションに従って動かないし、モーションにデータを取り込むことが出来ません。
8.キーフレームを設定して、後は時刻を設定する。
モーションに必要なのは、動きが切り替わる時の姿勢と、その時の時刻です。
これをキーフレームといい、後はプログラムが補間しながらフレームを動かします。
回転方向や角速度が変わるところを入力しましょう。
■[173] 今日の出来事 投稿者:Casper 投稿日:2001年09月17日 (月) 16時44分 |
龍難が鼻をかんだとき、どこからともなく『カルピス臭』がした。
まぁ、1回こっきりでした。
G部長を蜂が襲いました。別に蜂は襲おうとしたわけではないでしょうが、黒いシャツだったので引き付けられたのでしょう。G部長は素早く避けました。
龍難は無言で輪ゴムを見せました。
『・・・・・』
■[172] MotionMaker3のバージョンナンバー 投稿者:Casper 投稿日:2001年09月16日 (日) 15時14分 |
その後MotionMaker3のバージョンは3-32になった。
がんばって3-30で打ち切ろうと努力をしたが、結局バグがあれこれと見つかり、XFileもMotionDataも更新されて、あれよあれよと32番になりました。
龍難のは30でしょうか? あれはMotionListを読むときにエラーが発生して、最悪の場合マシンが青画面です。更新してください。
その後、ファイルの読み込みエラーがあっても、それを感知してメッセージが出るようにしました。ファイルエラーチェックのルーチンがV3Dライブラリに入っています。こちらも更新してください。
ところで「V3D」の「V」って何でしょ? 本に書かれてあったルーチンと便利なルーチンを、あれこれまとめて作りました。
Vectol? Visual?
MotionMakerは余計なコードが多いので、機能だけを取りたいなら、MotionViewを使いましょう。少しはシンプルにしました。ただフレームとモーションを見るだけですが…。
■[171] 素足の感覚 投稿者:Casper 投稿日:2001年09月16日 (日) 15時07分 |
今日の3時ごろ、研究室前の廊下を掃除した。
ただ単にゴミや砂を掃き出しただけである。さらに言ってしまうとゴミを隅のほうに寄せただけである。
僕としては靴を履き替えるときに、じゃりじゃり感をなくしたかっただけなのだ。
それにしても素足のペタペタ感は良い…。
今日の研究室は開放的である。窓を全開にして、ブラインドで光を遮り作業している。
そんなに涼しくなったのか。時折通り抜ける風が心地よい。
■[170] 授業の課題 投稿者:Casper 投稿日:2001年09月16日 (日) 12時41分 |
プロコンまぢかなのに、学校の試験もあって、課題も提出する必要があります。
現在、「オペレーション・リサーチ(OR)」、「人工知能(AI)」、「通信工学」、「体育・ストレッチ」からの課題、レポートの提出があります。
ORは演習問題1~3をやって提出。AIはポーカーのプログラムについて、そのアルゴリズム等の解説をしたレポート。通信工学はプリント3枚をやるということになっています。
このうちORは既に提出しました。あとはAIと通信工学だけです。
他にも「人間工学」では前期の課題である「色の選択」を行うプログラムの作成があります。
こちらは既に数個ほど作ってあるので無問題(もーまんたい)です。
僕の「色選択」では「数値を細かく指定できる」はほつといて、「人間が感覚的に分かりやすく、簡単に色を選ぶことが出来る」というのをテーマに作りました。これなら高得点が期待できると踏んだのです。
あとプログラミングの腕は評価の対処になるのでしょうか。
■[169] SetDirectionの復活 投稿者:Casper 投稿日:2001年09月16日 (日) 00時23分 |
聞こえる、我の復活を望む声が……。
意味の無い前ふりはほっといて、昔作っていたSetDirectionを復活させようかなと思っています。そもそもSetDirectionの機能はフレームの向きを、基本となるXYZ軸を、それぞれの軸周りの回転角で指定する方法でした。
これだとDirectXのSetOritationに悩まされていた人でも簡単にフレームの向きを決められます。さらにフレームを追加偏向するADDDirectionを使えば向きのコントロールなど完全征服です。
そんな便利そうな関数でしたが、ちょんと動かなかった上に、フレームの向きから偏向角を取り出すことに失敗したため、バージョンアップをしていく際に消してしまいました。
しかしSetOritationになれない人(DirectXで誰もがつまづく)でも一発で理解できるSetDirectionはフレームを使いやすくしたクラスには必須でしょう。何のために機能を特化して簡単に使えるようにしたのか。
というわけで復活させようかと思っています。前回、ちゃんと動かなかったのは他の関数内で変数の使い方がなってなかったと言う事が判明しています。それらの修正を細部まできっちりと済ませるとともに、Directionのテストをやってみようと思います。
もしSetDirectionができれば、右90度回転なんて朝飯前です。
SetDirection(0,-90,0)ですむのですから。
■[168] 馬の発する音 投稿者:Casper 投稿日:2001年09月16日 (日) 00時10分 |
すでになんとしても完成させなければならないような時期にきちゃってます。これからは今までに作ってきた物を統合していく作業と、調整することしか出来そうにありません。各自でなんとか形だけでも作り上げる必要があります。
形が出来上がってから、細かいところは修正しましょう。
(後になってくると修正できない部分もあったりするので、それを見越して設計をしておきましょう…)
さて馬のいななきや、足音などをどうやって発生させるかです。
今日(昨日?)は話がうやむやで終わってしまい、結局どうするのかが明日に持ち越されましたが、馬の動きを担当する僕が、足音等を制御するのが良さそうです。なんと言っても馬の足が地面につくタイミングなんて、僕以外のところじゃわかんねぇというのが大きいです。
その具体的な方法の詳細は明日決めるとして、概要を書いておきましょう。(注:自分だけの構想です)
まず馬のモーションを制御するTMotionRootからDMACの作成した3Dサウンドが使えるようにする必要があります。3Dサウンドは多重で音を再生できたり、待ち時間無しで使えるのでしょうか。
次に馬のモーションデータを監視するTMotionDataに機能を追加して、特定の時刻がきたら、あるコマンドが実行できるようにします。もちろんコマンドは3Dサウンドを発生させます。MotionDataで馬を動かす時にはDXTimerがフルスピードで呼んでくれるのでタイムラグは少ないと思います。
問題は馬のモーションのデータを記録する事です。こいつは骨がいる仕事で、面倒です。そこに音を追加するときた。まあ発生する時刻と鳴らす音(音のファイル)を指定するだけですが。
3dサウンドって龍難の方でも使ったりしませんか? 指導員が3Dサウンドで喋ったり…。だとすれば2つのユニットで共有して使うのか。それとも乗馬と手入れなので別々か。でも速度や方向転換したりするしなぁ。
そういえば馬が地形を判断して、自動的に障害物を避けたり、停止したりするんでしたよね。その機能を盛り込まなきゃ。
■[167] 引数の並び 投稿者:Casper 投稿日:2001年09月15日 (土) 17時13分 |
Casper作のクラス、ライブラリにはDirectXの引数の順番と逆になっていたりするものがあります。
一度、龍難のところで値を指定していたとき、関数を取り違えたため馬が横倒しになるということがありました。これはY軸とZ軸を指定し間違えたためで、ちょっと不便だなと思いました。
僕のクラスでY軸から指定するのは、補完機能を使ったとき、変数が昇順で並ぶためです。まずY軸の変数を使い、その下にあるZ軸の変数をしていするようにしています。
DirectXの場合、Z軸にはフレームの向きといった意味があり、そのため最初に指定したほうがいいだろうと考えて作られたのではと思います。
■[166] 役立つソフトの紹介 投稿者:Casper 投稿日:2001年09月15日 (土) 16時26分 |
「TextSS」http://www.tomato.sakura.ne.jp/~y-arena/
複数のファイルの内容を書き換えるソフトです。
置き換える条件を決めて実行するだけです。
失敗してもやり直せる、バックアップ機能もあるらしい。
書き換え時に「非書き込みテスト」を外さないとファイルが変更されません。
「ファイル名連続変更」http://hp.vector.co.jp/authors/VA004030/
ファイル名を一度に変換してくれるソフトです。
変換機能として「連番」「文字置換」「範囲置換」「挿入」「書式」などがあります。
変換後の名前を見ながら操作できます。
変換は下部にある「GO→」で行います。
■[165] 小指の爪が… 投稿者:Casper 投稿日:2001年09月15日 (土) 13時16分 |
今朝のことです。
雨の中学校に来たため、足が濡れて小指の爪もふやけてしまいました。
最近つめを切ってなかったので伸びていて、いじっていると横に切込みが入って……
■[164] 消しゴムの裏技 投稿者:Casper 投稿日:2001年09月15日 (土) 10時26分 |
G部長は消しゴムがすぐ割れて、最後まで使えないと言うので紹介します。
実は消しゴムケースの角の部分を切り落としておくと消しゴムが割れたりしません。消しゴムで字を消しているとき、消しゴムは変形して曲がり、ケースの角が消しゴムに食い込むそうです。一度切り込みが入ると、そこからひびが入り、割れてしまいます。
さあ、これで最後まで消しゴムを追加しましょう。
実は「伊藤家の食卓」で裏技として紹介されました。
■[163] ローカルファイルの検索 投稿者:Casper 投稿日:2001年09月15日 (土) 08時30分 |
ダウンローダー「ホームページゲッチュ!!」でサイトを丸ごとダウンロードしていましたが、目的のページがわからなくなりました。
いろいろなダウンロードソフトを試してみて、シンプルで簡単な操作と、目的にマッチしていたので「HPゲッチュ」を使っています。ページのURLを指定するだけで、ページを解析し、リンクを辿りながらサイト全体をダウンロードしてくれます。
気付けば1Gちょいも溜まっていました。フォルダ構成も実物と一緒で、目的のページはどこかを探すのに検索エンジンが必要になってきました。
そこで「FileManager1」を使うようになりました。こついはファイルシステムのインデックスを独自に構築して、高速にファイルをアクセスできるようになっています。機能として検索があり、インデックスで探すのでエクスプローラーの検索とは数段速くなっています。
「ホームページゲッチュ!!」
http://hp.vector.co.jp/authors/VA019646/software/
「FileManager1」
http://www3.hummingheads.co.jp/fm1/
■[162] 日記のメモ 投稿者:Casper 投稿日:2001年09月15日 (土) 07時45分 |
「日記のメモ」とは、日記ネタを書いておく物です。
実は授業中に思いついたネタを忘れてしまいました。面白さはありませんが、最近ネタ不足なので、貴重な1つを失った事になります。
そんなわけで「日記メモ」。思いついたことを即メモって日記にします。
問題は「何にメモるか」ということです。授業中でも文句を言われそうにないのはノートか本物のメモ帳。IT時代なのでパーム? それともテープに録音という手もあります。(ICレコーダーでも可)
■[161] 依頼の品で~す 投稿者:Casper 投稿日:2001年09月13日 (木) 23時57分 |
『ぱにぽに』届いたよ。
注文から4日で届きました。というわけで金をくれ。619円です。
他にも『攻殻機動隊2』と『あずまんが大王3』が届いた。
買いに行く手間がない分、便利ですな。月に一回くらいなら利用したい。
なおこのオンライン本屋システムを使いたい場合、「Local Link」のURLでアクセスしてくれると嬉しい。
今日家に帰るとぷにちゃが「エースコンバット4シャッタードスカイ」をやってた。即買い、即プレイですか…。部長さんみたいに9日プレイにはならなければいいけどな…。
次の目標は「フィールド」です。できれば「マップ定義ファイル」を読むだけの手軽さを実現させたい。
現在の「フレーム&も―ション」は定義ファイルのファイル名を設定された名前で作り出すようになっている。同じ名前が存在すると上書きされてしまうので注意だ。
テスト用のモーション定義ファイルでは、名前の重複があるためうまくモーションを保存できないはずだ。
■[160] 作業の区切り 投稿者:Casper 投稿日:2001年09月13日 (木) 19時43分 |
多関節モデルとモーションを実現させるクラスの開発と、それを使って定義ファイルを作成する「Model & Motion Maker」の完成です。とりあえずアルファ版はVer.3-26です。あと細々した調節と最後のバグだしをするだけ。
XFileのテクスチャー問題を攻略した後、フレームやモーションの定義ファイルも整理することにしました。フレームは馬のパーツごとにファイルが作られるので、XFileと同数が作成されます。(XFileのない部分もあるので2~3個多め)
するとまた問題がありました。ファイルを保存するときのパスはどうしよう。カレントフォルダは移動するしで、ファイルに絶対パスを埋め込もうかとも思いましたが、結局ここでもファイル名だけをファイルに埋め込みました。そして保存するときはダイアログで絶対パスを得て、ファイル名の部分を切り取って、保存先のフォルダを得られるようにしました。後はモーションの名前をくっ付けてファイルを保存します。
このモーションを定義するのは、作った僕でも難しいです。モーションのすべては時間とフレームの方向です。それが簡単に入力できる仕組みが欲しいです。残り少ない限られた時間で、新しい入力方を作ることは出来ませんが、モーションを定義するのも難しい話です。次の課題もありますし…。定義さえ出来ていればプログラム中での呼び出しは大変楽なのですが…。
一年にモーションを入力させる?!
(けっこう癖のあるインターフェースなので、投げ出しそうですが…)
■[156] Re[137]: Delphi6のSample 投稿者:SYAKU 投稿日:2001年09月09日 (日) 09時18分 |
土日出勤のはずが風邪でダウンしてしまいました。
体調戻れば昼から行きます。(熱が38度あるけど…)
まあ、熱も下がるでしょう。頭痛も引きつつあるし。
で、いつぞやのDelphi6でのDelphiXの動作ですが、インラインアセンブラの文法が変わったためエラーが出るようです。
のでアセンブラの部分を根性で書き換えたらどうにかエラーが無くなり動作しました。
行くときに変更箇所をまとめて持って行きます。
■[155] 今日の仕事、明日の課題 投稿者:Casper 投稿日:2001年09月08日 (土) 20時19分 |
現在、馬フレームとモーションについて大詰めです。早いこと済ませないと他のことができません。そろそろ他のことがしたいです。
今までに多関節モデルをフレームを階層構造にすることで実現させました。またそれに対応するモーションクラスを作りました。色々と機能を追加して、現在考えられる限りのことに対応しているはずです。
今日はこの階層フレーム構造を手続き一発で構築できるように改造していました。またそれに合わせてモーションの方も同じようにしました。
基本的には構築用スクリプトファイルを読んで、指示された関数を実行していくだけです。使うクラスは自動的に階層構造を構築するので、最初のルートを確保するだけです。
スクリプトファイルはテキストで書かれていて、1行に1つずつ、命令文と値が書かれてあります。あとは一行ずつ読み込んで、左右の空白を消して、命令と比べていくだけです。
現在、階層フレームにおいて、ツリーの生成がうまくいっていません。またモーションリストのロード時にうまくモーションデータが作成されません。
たぶんモーションセルが0個なので作成に失敗していると思います。
これを直すのが明日の課題です。
■[154] XFileのパス指定 Casper 2001年09月08日 (土) 12時54分 |
XFileにテクスチャー定義を含めるように作って、読み込み&表示を楽にしましたが、どうもテクスチャーファイルへのアクセスパスがおかしかったので書き込んでおきます。
メタセコイアでXFileを生成しています。この場合XFileはテキスト形式で出力されるため、簡単に内容を確認できます。またテクスチャーも定義できるため、メタセコがいまのところ使われています。
この便利なメタセコですが、欠点としてXFileのテクスチャーへのパスが、メタセコからの相対パスになってしまうというのがあります。この場合、メッシュビルダーに読み込んでフレームに追加しても、テクスチャーがどこにあるか分からないので、テクスチャーが反映されません。そのためファイル名だけの指定にして、実行ファイルの隣に置くようにしていました。
それがXFileが多くなると、フォルダにまとめて整理整頓をする必要がありました。ところがそれを行ったところ、テクスチャーが表示されなくなりました。色々試した結果、テクスチャーへの相対パスの指定が間違っていました。相対パスの概念はUNIXやURLと同じですが、記号の使い方が少し異なっていました。XFileではフォルダの区切りに\を2つ用いるようになっていました。
正しくパスを指定して、表示されるようになりました。
このXFileのパスは実行ファイルからの相対パスです。そしてこのXFileをファイルにするにはメッシュビルダーのSAVE機能を使います。すると実行ファイルからの相対パスで書き込まれます。そうですメタセコで作ったXFileがメタセコ基準の相対パスで書かれていたのも、すべてDirectXの仕様のせいでした。そのため他のプログラムで使用する際は、書き換えるか、メタセコのフォルダに同じ構成で生成する必要があるのです。
■[153] Delphiの小技(その1) Casper 2001年09月08日 (土) 10時43分 |
Delphiの役立つ知識、テクニックをメモする書き込みです。
過去ログ送りになるまで書き込めます。
as演算子 クラスの型キャスト
TObject as TForm という具合に後ろにあるクラスにキャストします。
Val手続き
文字列を指定の数(整数または実数)に変換できるか調べます。
StrToIntをする前などに行っておくとよいでしょう。
また、数字に変換できるまでのところを調べることも出来ます。
try finally文
try部で例外が起きても、finally部が実行されるようにできます。例外が発生したとしても、使ったクラス、動的変数を開放する時などに使えます。
try expect文
try部で例外が発生したとき、expect部が実行されます。例外に対処する処理を書くことが出来ます。
これってfinallyと同時に使えるのか?
■[152] Re[150]: おっ、日記への返信文です さや 2001年09月08日 (土) 01時49分 |
> まぁ別にいいですけど…(日記の数が増えるのはそれなりに嬉しい)
> 一応のルールとやらも、日記のメモとしてトップに書くか…。
あはは、自分のところにUPせずにこっちにカキコしそう^^
…ルール。よし!引退しよう♪きままがいちばん、わがままちゃん^^
■[151] Re[124]: 日記者の人口 さや 2001年09月08日 (土) 01時45分 |
私も以前から一応つけてたけど、毎年、思いついてはすぐ飽きるの繰り返しで、年に平均20日分?くらいしか書いてない・・・。
今回はいつまで続くのやら。あはは
■[150] おっ、日記への返信文です Casper 2001年09月08日 (土) 01時36分 |
まぁ別にいいですけど…(日記の数が増えるのはそれなりに嬉しい)
そういえば返信として修正個所を書き込むという手がありましたね。変更したところが日記のトップに載りますし…。
というわけで、この方法による日記についての修正もOKです。
これまではメンバーが修正して欲しい所を、直接話して来て修正していた。
一応のルールとやらも、日記のメモとしてトップに書くか…。