[リストへもどる]
一 括 講 読

投稿時間:04/01/22(Thu) 11:58
投稿者名:en
Eメール:eiji-nishimura@nifty.com
URL :http://homepage3.nifty.com/en_pers/
タイトル:タイヤネコサンプルプログラムの質問
PDKを使いはじめて約1ヶ月経ち、少しずつ綾織が理解できてきたところ
です。
サンプルプログラム&説明書を元に改造を試み、Main.ayaの120行目あた
りに以下の処理が有り簡単な式と関数を記述してみました。
キャラクターは意図した動作を行うのですが、なぜそうなるのかが解ら
ないので教えて下さい。
-----Main.ayaの抜粋--------------------------------------
// 時間イベント駆動系(毎分0秒の時に呼ばれる)
// 但しなにかしらの処理を実行中の場合はこの処理は呼ばれない
action MinDrive@( Second() == 0 )
{
UpdateMin();
// 最後にチェックした時間を記録しておく
PutProperty( "TIME_LastMinChecked", itoa( Time() ) );
}

// 毎分0秒の処理を行う
void UpdateMin()
{
DM( 5, "UpdateMin" );
// ** 毎分0秒に行いたい処理があればここに処理を書く **
------------ここから追加-------------------------
//アクティブウインドウタイトルバーチェック
//毎時10分毎に起動する。
if( (Minute()%10) == 0 ){
string Titlebar = GetActiveTitleBarString( );
PersonaCG( "smile1" );
Talk( "\e" + Titlebar + "で何をしてらっしゃるんですか?\c" );
}
------------ここまで追加--------------------------
// ** その他の処理 **
-----Main.aya抜粋終わり---------------------------------
不明な部分
1.voidとは?
2.DM( 5,"xxxxx" )とは?
PDKの説明書は一通り目を通したつもりですが解説されている箇所を
見つけられませんでしたのでご享受の程よろしくお願いいたします。

投稿時間:04/01/23(Fri) 14:29
投稿者名:中西@プラエセンス
Eメール:nassie@praesens.co.jp
URL :http://www.praesens.co.jp/pws/
タイトル:Re: タイヤネコサンプルプログラムの質問
> 1.voidとは?

まず,この行自体が行っていることは,「『void型のUpdateMin()』という
関数を定義している」です.
「ユーザ定義関数」を自分で定義して使うことができます.

void型とは,「返り値のない」関数を表しており,UpdateMin()という
関数は,「呼ばれると中身の処理を行うが,それによってなんらの値も
返さないことを意味します.
例えば,
action MinDrive@( Second() == 0 )
{
 int i = UpdateMin();
}
のような記述は行えません.

綾織言語仕様にも下記の通り解説がありますが,
http://www.praesens.co.jp/file/pdk/manual/index_c1.html#doc2_sect:mark3

正直,関数の概念を一から説明するのはとても難しいので,
C言語の入門書(例えば http://www.gihyo.co.jp/books/syoseki.php/4-7741-1264-X )
を読んでいただいたほうがいいかもしれません.


> 2.DM( 5,"xxxxx" )とは?

これはユーザ定義関数で,私共がタイヤネコのサンプルを書いた時に,
任意に定義して使っている関数です.

どういう関数かというと,デバッグメッセージを,デバッグの詳細さレベルに
あわせて表示するための関数です.
一つめの引数の数字を,
・重要で頻度の低いデバッグメッセージなら: 10
・流れを理解するために頻繁に挿入するもの: 1
・その中間 : 2〜9

といったように指定しておき,好きな文字列を第二引数に書いておきます.

で,ソースをコンパイルする際に,
Main.ayaの186行目から記述されている下記の関数の,10のところを
好きなデバッグレベルに変更することで,
簡単に「こまかいデバッグ用メッセージを表示する」←→
「リリース用にレベル10しか表示しないようにする」
を切り替えられます.

// デバッグメッセージ処理
void DM( int lv, string str )
{
 // ここの数字を変更することでデバッグメッセージを表示したり
 // 非表示にしたりできます
 if( lv >= 10 ) {
  SetTalkWaitMode( 1 );
  Talk( "\fc(ff0000)DM: " + str + "\_fc\n" );
  SetTalkWaitMode( 0 );
 }
}

投稿時間:04/01/23(Fri) 17:21
投稿者名:en
Eメール:eiji-nishimura@nifty.com
URL :http://homepage3.nifty.com/en_pers/
タイトル:Re^2: タイヤネコサンプルプログラムの質問
ご享受ありがとうございます。

> > 1.voidとは?
>
> まず,この行自体が行っていることは,「『void型のUpdateMin()』という
> 関数を定義している」です.
> 「ユーザ定義関数」を自分で定義して使うことができます.
>
> void型とは,「返り値のない」関数を表しており,UpdateMin()という
> 関数は,「呼ばれると中身の処理を行うが,それによってなんらの値も
> 返さないことを意味します.
> 例えば,
> action MinDrive@( Second() == 0 )
> {
>  int i = UpdateMin();
> }
> のような記述は行えません.
>
> 綾織言語仕様にも下記の通り解説がありますが,
> http://www.praesens.co.jp/file/pdk/manual/index_c1.html#doc2_sect:mark3
>
正直、"action"と同列の扱いかと思っていたのですが、int等と同列の扱いなのですね。誤解していました。

>
>
> > 2.DM( 5,"xxxxx" )とは?
>
> これはユーザ定義関数で,私共がタイヤネコのサンプルを書いた時に,
> 任意に定義して使っている関数です.
>
> どういう関数かというと,デバッグメッセージを,デバッグの詳細さレベルに
> あわせて表示するための関数です.
> 一つめの引数の数字を,
> ・重要で頻度の低いデバッグメッセージなら: 10
> ・流れを理解するために頻繁に挿入するもの: 1
> ・その中間 : 2〜9
>
> といったように指定しておき,好きな文字列を第二引数に書いておきます.
>
> で,ソースをコンパイルする際に,
> Main.ayaの186行目から記述されている下記の関数の,10のところを
> 好きなデバッグレベルに変更することで,
> 簡単に「こまかいデバッグ用メッセージを表示する」←→
> 「リリース用にレベル10しか表示しないようにする」
> を切り替えられます.
>
> // デバッグメッセージ処理
> void DM( int lv, string str )
> {
>  // ここの数字を変更することでデバッグメッセージを表示したり
>  // 非表示にしたりできます
>  if( lv >= 10 ) {
>   SetTalkWaitMode( 1 );
>   Talk( "\fc(ff0000)DM: " + str + "\_fc\n" );
>   SetTalkWaitMode( 0 );
>  }
> }
こちらも一歩理解が深まりました。
そうしますと、サンプルプログラムを例にするとデバッグ用に起動し、上記
ロジックの箇所でエラーが発生すると、キャラクターが「エラーメッセージ
の詳細をしゃべる」という理解で良いのですね。

使ってみて解らなかったらまた質問させて下さい。



- Web Forum -