このページには広告が含まれています
ゴースト開発メモ

#伺か YAYAでのゴースト開発メモ:存在するかどうか分からない関数を呼び出す

この記事は約4分で読めます。

存在するかどうか分からない関数を呼び出す場合、ISFUNCとEVALの合わせ技が本来だが、いちいちその2つを並べて書くのは面倒だし、特に、呼び出した関数に何か引数を渡したい場合、さらに面倒になる。
ので、その辺をひとまとめにした、CallFunctionと言うものを作ってみた。

CallFunction
{	//------------------------------------------------------------------------------
	//	存在するかどうか分からない関数を呼び出す。
	//	ISFUNC→EVALの流れをひとまとめにしたもの。
	//------------------------------------------------------------------------------
	_Function = _argv[0];
	_Value	  = _argv[1,_argc-1];
	_Function_EVAL = _Function;

	//引数が指定されていたら引数をセットする
	if (ARRAYSIZE(_Value) > 0) { _Function_EVAL = "%(_Function)(%(CHR(0x22))%(_Value)%(CHR(0x22)))"; }

	//指定された関数を呼び出す
	if (ISFUNC(_Function)){ EVAL(_Function_EVAL); }
}

使い方は、

CallFunction(呼び出したい関数名[,その関数に渡す引数])

その関数に渡す引数、は、引数が必要ない場合は省略可能。

CallFunctionの使用例

OnAnchorSelect
{	//------------------------------------------------------------------------------
	//	アンカーがクリックされたときの処理(URLジャンプなど)
	//------------------------------------------------------------------------------
	_id = reference[0];

	// アンカーのIDの冒頭に「http://~」があればWebサイトを開く。
	if (RE_MATCH(_id, '(http|https|ftp)://(.+)')) {
		_url = EscapeText(_id);
		"\C\j[%(_url)] \e";
	// それ以外はIDと同じ名前のイベントへジャンプ
	} else {
		CallFunction('_id')
	}
}

MouseCounter
{	//------------------------------------------------------------------------------
	//	マウス操作の捕捉。引数に'Wheel'を指定するとホイール反応
	//------------------------------------------------------------------------------
	_PreviousArea	= PreviousArea_Move;	//直前のエリア
	_PreviousTime	= PreviousTime_Move;	//直前の時刻
	_Stroke		= Stroke_Move;		//ストローク数
	_Threshold	= 64;			//反応しきい値

	_TYPE  = _argv[0];	//ホイールかそれ以外か
	_Scope = reference[3];	//マウスイベントが発生しているスコープ
	_Area  = reference[4];	//マウスイベントが発生しているエリア

	if (_TYPE == 'Wheel') {
		//ホイール操作に対する反応
		_PreviousArea	= PreviousArea_Wheel;	//直前のエリア
		_PreviousTime	= PreviousTime_Wheel;	//直前の時刻
		_Stroke		= Stroke_Wheel;		//ストローク数
		_Threshold	= 2;			//反応しきい値
	}

	if ((_Area != '')||(_Scope == 1)) {
		//どこかが撫でられている
		if (_Area == _PreviousArea) {
			_Interval = systemuptime - _PreviousTime;
			if (_Interval > 1) {
				//1秒以上間隔が空いたらカウンタをリセット
				_Stroke = 0;マウス反応中 = 0;
			}

			//現在時刻を取得
			_PreviousTime = systemuptime;
			_Stroke++;

			//触られた量が閾値を超えたら「触られている」と判断
			if (_Stroke > _Threshold) {
				//触られた
				if (!マウス反応中) {
					//既に反応中でなければ、触られた部位を見てトークする
					マウス反応中 = 1;
					'\t' + CallFunction('MouseReaction',_TYPE);
以下省略

コメント

タイトルとURLをコピーしました