トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
佐々木
Åê¹ÆNo.27711
投稿日時: 2006-8-7 14:14
新米
居住地: 滋賀
投稿: 19
使用環境:
WinXP,Flash professinal8.0
マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
現在は、
ムービークリップ上に
on (release) {

//Goto Webpage Behavior
getURL("http://yahoo.co.jp","_self");
//End Behavior

}
でマウスがクリックしたらWebに飛ぶというものを作っているのですが、カーソルが一定時間動かなかったらWebに飛ぶというものを作るにはどのようなActionScriptを使えば良いのですか?
よろしくお願いします。


----------------

tnagata
Åê¹ÆNo.27720
投稿日時: 2006-8-7 16:00
常連
居住地:
投稿: 140
使用環境:
Flex2,, Flash5
OS:Windows 2000 SP4,,WindowsVista
IE5,6,7
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
簡単に思いつくのは
setInterval()あるいはonEnterFrameで
_xmouse, _ymouseを監視するというものでしょうか?

監視の開始タイミングは、どこに持ってくるか?が問題かと
思います。

まずはヒントのレベルで上記のようなメソッドを調べてみては
如何でしょうか?
この後は、アルゴリズム的な部分になりますので自身で
考えてみると面白い(人それぞれ感じ方はありますが)
と思います。
佐々木
Åê¹ÆNo.27734
投稿日時: 2006-8-8 2:35
新米
居住地: 滋賀
投稿: 19
使用環境:
WinXP,Flash professinal8.0
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
ご返答ありがとうございます。
さっそくsetInterval()、onEnterFrameを索引で調べてみました。
どちらも、フレームごとに処理を繰り返し行うということは分かりました。しかしサンプルの種類が多く内容の完全理解とまではちょっとという感じです。

監視のタイミングとして_xmouse, _ymouuseがムービークリップの上に来て1秒ほど経ってから認識をはじめたいと思います。
そして、10秒ほど経ってもマウスがそのムービークリップ上にある場合はアクションで決めたWebへ飛ぶというアルゴリズムにしたいと思っています。


----------------

ひろゆき
Åê¹ÆNo.27735
投稿日時: 2006-8-8 3:10
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
引用:
suto-さんは書きました:
さっそくsetInterval()、onEnterFrameを索引で調べてみました。
どちらも、フレームごとに処理を繰り返し行うということは分かりました。

setInterval は、フレームごとではないと思うのですが...。


もっと基本的なスクリプトから始めるとか、
setInterval や onEnterFrame を実際に使ってみるとか、
準備をもう少しされた方がよろしいかと思いますが。

_root にムービークリップ(インスタンス名: my_mc) を配置。

サンプル1

my_mc のムービークリップアクションに
onClipEvent(load) {
	function jumpURL() {
		getURL("http://www.flash-jp.com/", "_self");
	}
	startTime = getTimer();
}
on(release) {
	jumpURL();
}
onClipEvent(enterFrame) {
	countTime = getTimer() - startTime;
	if (countTime > 10000) {
		jumpURL();
	}
}
onClipEvent(mouseMove) {
	startTime = getTimer();
}
と記述。


サンプル2

my_mc のムービークリップアクションに
onClipEvent(load) {
	function jumpURL() {
		getURL("http://www.flash-jp.com/", "_self");
	}
}
on(release) {
	jumpURL();
}
onClipEvent(enterFrame) {
	if (!mouseID) {
		mouseID = setInterval(this, "jumpURL", 10000);
	}
}
onClipEvent(mouseMove) {
	clearInterval(mouseID);
	delete mouseID;
}
と記述。


サンプル3

_root 第1フレームに
function jumpURL():Void {
	getURL("http://www.flash-jp.com/", "_self");
}
my_mc.onRelease = function():Void {
	jumpURL();
};
this.onEnterFrame = function():Void {
	if (!mouseID) {
		mouseID = setInterval(this, "jumpURL", 10000);
	}
};
this.onMouseMove = function():Void {
	clearInterval(mouseID);
	delete mouseID;
};
と記述。


ただし、いずれも
swfの表示領域内でマウスが動いていない場合には、マウスの動きは検知できません


----------------
質問する際は、回答者に具体的な情報を与えてください。

佐々木
Åê¹ÆNo.27736
投稿日時: 2006-8-8 10:46
新米
居住地: 滋賀
投稿: 19
使用環境:
WinXP,Flash professinal8.0
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
回答ありがとうございます。
setInterval()はSWFの再生時に一定の間隔で関数、メソッドを呼び出すものですよね…
勘違いしてました。ご指摘ありがとうございます。
そして、サンプルを拝見させていただきました。
マウスの移動がないときにはTimerがカウントされていく様が分かってきました。
質問なのですが、サンプル2の
if (!mouseID) {
mouseID = setInterval(this, "jumpURL", 10000);
}
の部分でif内の!mouseIDがよくわからないのですが、
これはmouseIDではないとき!?ということになるのでしょうか。

それと、追で申し訳ないのですがサンプルのようにTimerをrootのフォーム上に表示する方法をお聞きしたいのですが。


----------------

tnagata
Åê¹ÆNo.27737
投稿日時: 2006-8-8 10:48
常連
居住地:
投稿: 140
使用環境:
Flex2,, Flash5
OS:Windows 2000 SP4,,WindowsVista
IE5,6,7
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
とりあえず、サンプルを作成してみました。
わざとコメントは省略しました。

まずは、簡単にボタンを押下したときから10秒間マウスが動かなかった場合にtrace()が反応してくれるようになっています。

このままだと、色々不十分がありますので、
ひろゆきさんの、コードと組み合わせると
上手く希望の仕様が出来上がると思います。

もちろん、ひろゆきさんのやり方で十分ですがw


var nID:Number;
var nXMouse:Number;
var nYMouse:Number;
test.onRelease = function ()
{
	StartTimer();
}

function StartTimer()
{
	nID= setInterval(callFunc, 10000);
	nXMouse = _xmouse;
	nYMouse = _ymouse;
	trace([nXMouse, nYMouse]);
}

function callFunc()
{
	trace([nXMouse, nYMouse]);
	if ( (nXMouse == _xmouse) && (nYMouse == _ymouse) )
	{
		trace("動いてない");
		clearInterval(nID);
	}
}
Fla4man
Åê¹ÆNo.27738
投稿日時: 2006-8-8 11:12
職人
居住地: かまくら
投稿: 517
使用環境:
WinMe,Win2000,
Flash4,アズさん,大仏、delphi
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
そのコード(setInterval)だと動かして元の位置に戻っていると「動いていない」になるのでは?

定期間隔チェック路線もコードのしやすさからいいと思いますが
その場合はむしろ動かなかった場合(タイムアウトした場合)にclearIntervalになるはず
(チェックは有効なので)

逆に「TimeOut」をやる場合は
初期インストール状況では使えないとかでFlash-JP非推奨なんだそうですが
アルゴリズム的にはOnMousemove時にsetTimeOutとclearTimeOutをかけるほうがコードがきれいです。(CPU負荷も低い)

そう考えると結局マウス移動時にチェックしないといけないので
特に負荷とかきにしないならば
onEnterframeか1秒に1回チェックぐらい(適当なインスタンスを利用するとか)の
「FPS系チェック」のほうがコーディングの苦手な人には組みやすいのではと思います。

このスレの話は実用的応用が効く話なので
数パターン確保しておいて損は無いのではないでしょうか。

しかしsetTimeOutとかsetInetrvalの残りタイマーを直接水増しできれば楽なんだけれどもなぁ。とも思ったりして


----------------
通常のハンドル名:×○○× ねた回収モードに突入 現在1/100

tnagata
Åê¹ÆNo.27739
投稿日時: 2006-8-8 11:33
常連
居住地:
投稿: 140
使用環境:
Flex2,, Flash5
OS:Windows 2000 SP4,,WindowsVista
IE5,6,7
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
全くそのとおりです。
まずはStep1的なサンプルですので、その辺り不十分な個所がしっかり詰め込まれています。(ワハハw)
そういった点を考えてもらい、創作してもらえたらな?とかって考えました。
「マウスが動いていない」をどのように組むか?
といった部分は、知識的にsetInterval, onEnterFrame,_xmouse,_ymouse等の事を知らなければ出来ないと思いました。(実際は色々手法があると思いますが)
ですが、それをどのように組むか?については知恵の部分というのでしょうか。
そういう部分は、(私的ですが)楽しいものなので悩んでもらいたいな?とかって思っちゃいました。
引用:

そのコード(setInterval)だと動かして元の位置に戻っていると「動いていない」になるのでは?


Fla4manさんのご意見は、うんうんと納得しました。
引用:

?コードがきれいです。(CPU負荷も低い)

なんかは、私もよく考える部分なんでこういう論議は好きですね?。

引用:

このスレの話は実用的応用が効く話なので
数パターン確保しておいて損は無いのではないでしょうか。

あ?このスレを資産的に考えると、そうですね。
とりあえず、質問者の解決を待った後に?とかって思ってますが。

ご指摘ありがとうございました。
ひろゆき
Åê¹ÆNo.27742
投稿日時: 2006-8-8 12:21
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
引用:
suto-さんは書きました:
質問なのですが、サンプル2の
if (!mouseID) {
mouseID = setInterval(this, "jumpURL", 10000);
}
の部分でif内の!mouseIDがよくわからないのですが、
これはmouseIDではないとき!?ということになるのでしょうか。

var n:Number = 1;
if (n) {
	trace("n があります。");
} else {
	trace("n はありません。");
}

if (n) {
	trace("n があります。");
} else {
	trace("n はありません。");
}

var n:Number = 1;
if (!n) {
	trace("n はありません。");
} else {
	trace("n があります。");
}

if (!n) {
	trace("n はありません。");
} else {
	trace("n があります。");
}

[制御]-[ムービープレビュー]で、出力を確認してみてください。

また、ヘルプで、「! 論理否定 (NOT) 演算子」の項目を見てもよいかもしれません。


引用:
それと、追で申し訳ないのですがサンプルのようにTimerをrootのフォーム上に表示する方法をお聞きしたいのですが。

「フォーム」というのが何を指すのか、よく分かりませんが、
_root にテキストフィールド(インスタンス名: time_txt) を配置して、
「サンプル2」の場合であれば、
onClipEvent(load) {
	function jumpURL() {
		getURL("http://www.flash-jp.com/", "_self");
	}
}
on(release) {
	jumpURL();
}
onClipEvent(enterFrame) {
	if (!mouseID) {
		mouseID = setInterval(this, "jumpURL", 10000);
		startTime = getTimer();
	}
	countTime = getTimer() - startTime;
	_parent.time_txt.text = countTime;
}
onClipEvent(mouseMove) {
	clearInterval(mouseID);
	delete mouseID;
	_parent.time_txt.text = 0;
}
として、表示してありますが、
getTimer を使うのであれば、
わざわざ setInterval を用いずに「サンプル1」のままでも
いいのではないかという気もします。


----------------
質問する際は、回答者に具体的な情報を与えてください。

佐々木
Åê¹ÆNo.27751
投稿日時: 2006-8-9 11:18
新米
居住地: 滋賀
投稿: 19
使用環境:
WinXP,Flash professinal8.0
Re: マウスポインタが一定時間動かなかったらWebに飛ぶというものをつくりたいのですが、
>tnagataさん
引用:
知識的にsetInterval, onEnterFrame,_xmouse,_ymouse等の事を知らなければ出来ないと思いました。

私はsetIntervalについて全然しらなかったので、それを分かっただけでも少しは知識がついた気がします。

サンプルのScriptはボタンに対応できるやつですよね!今のところムービークリップで作っているのですが、ボタン編も現在作っているので参考にさせていていただきたいと思います。
ありがとうございます。


----------------

(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops