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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     このActionscriptのカラクリを教えて下さい!
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
sanagirock
Åê¹ÆNo.34485
投稿日時: 2007-7-31 22:14
新米
居住地:
投稿: 3
使用環境:
iMac (Intel core2Duo 2.0GHz)
MacOSX 10.4.10
Flash CS3
このActionscriptのカラクリを教えて下さい!
MCの動きに次第にブレーキがかかる動きを表現する際に、

onClipEvent (load) {
var div:Number = 0.25; //ブレーキかけるための値
var move_to:Number = 540; //目的地のx座標
this._x = 800;
}

onClipEvent (enterFrame) {
this._x = this._x + (move_to - this._x) * div;
}

上記のようなASを使用していますが、この仕組みがイマイチわかっていません。
なぜ目的地の座標(この場合, x座標540)でピッタリ停止するんでしょうか?
それ以上動かないのはなぜなのか、考え始めると気になってしようがありません。
ご教授お願い致します。
ちなみにこのASは、(株)毎日コミュニケーションズの「Flash8 レベルアップコース」
という書籍で勉強した際に覚えたものです。
ひろゆき
Åê¹ÆNo.34486
投稿日時: 2007-7-31 23:04
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: このActionscriptのカラクリを教えて下さい!
まず、(move_to - this._x) が何を意味しているのか、を
お考えになることだと思います。

分かりやすく言えば「減速」しているからです。


ちなみに、全く同じ動きは、フレームアクションに記述しても実現できます。
動かそうとしているムービークリップのインスタンス名が mc だとして。

mc を配置したフレームに
var div:Number = 0.25;
var move_to:Number = 540;
mc._x = 800;
mc.onEnterFrame = function():Void {
	this._x += (move_to - this._x) * div;
};
と記述。

ただし、正確には、「ピッタリ停止」していない可能性があります。
詳しくは、こちらを。
指定座標に減速しながら近づくMC。
目的地に近づく (1)
などが参考になるでしょうか。


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

c-geru
Åê¹ÆNo.34488
投稿日時: 2007-8-1 1:59
職人
居住地: 文京区本郷
投稿: 209
使用環境:
10.6.8+ CS5.5
Win7+ CS4
Re: このActionscriptのカラクリを教えて下さい!
引用:
onClipEvent (enterFrame) {
this._x = this._x + (move_to - this._x) * div;
}

(move_to - this._x)は、目的地とMCの距離ですよね。それに係数(div)をかけているので、目的地とMCの距離の25%(0.25)だけ移動する(近づく)わけです。

次にこの処理が実行される時には、先程より近づいた「目的地とMCの距離」の25%(0.25)だけ近づく・・・と、処理を繰り返すと「目的地とMCの距離」はどんどん短くなるので、それにに係数(div)をかけた値もどんどん小さくなり0に近づきます。

計算上の誤差もあるのでピッタリでない場合もありますが、移動させる距離が限りなく0に近い数値になるので最終的に止まって見えるわけです。誤差等の話は、ひろゆきさんが紹介されたリンクに詳しいです。

野中文雄
Åê¹ÆNo.34490
投稿日時: 2007-8-1 2:50
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: このActionscriptのカラクリを教えて下さい!
イーズアウト(減速)のアニメーションは、「差を割引いて足込む」という式がよく用いられます。
プロパティ += インスタンスから見た相対的な目標値 * 減速率

または、

プロパティ+= (プロパティの目標値 - 現在のプロパティ値) * 減速率

ただし、0 < 減速率 < 1

以下は、減速率が0.5=1/2の場合です。「おやつ食べていい?」と訊くのがenterFrameイベント、半分食べるのが距離の移動に当たります。

拙著『オブジェクト指向で考えるActionScript』p.132より引用:
昔私の家の近所に、男の子の兄弟がいました。大体次男・次女というのは、要領がよくなるようです。

弟が台所のお母さんに、「おやつ食べていい?」と隣の部屋から大声で尋ねました。お母さんはお兄さんの分を残しておくように、「半分だけよ」と答えました。しばらくすると、弟はまた「おやつ食べていい?」と聞いてきます。お母さんは「半分だけよ」と、大声でいいました。でもしばらくすると、また同じことを尋ねるのです。何度もしつこいので、お母さんは怒ってその部屋に行ってみました。すると、おやつは全部なくなっていたそうです。正確には、けし粒くらい残っていたかもしれません。

つまり、そういうことです。

引用:
sanagirockさんは書きました:
上記のようなASを使用していますが、この仕組みがイマイチわかっていません。
なぜ目的地の座標(この場合, x座標540)でピッタリ停止するんでしょうか?
それ以上動かないのはなぜなのか、考え始めると気になってしようがありません。
ご教授お願い致します。


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

sanagirock
Åê¹ÆNo.34501
投稿日時: 2007-8-1 14:15
新米
居住地:
投稿: 3
使用環境:
iMac (Intel core2Duo 2.0GHz)
MacOSX 10.4.10
Flash CS3
Re: このActionscriptのカラクリを教えて下さい!
野中様、c-geru様、ひろゆき様
ご返答ありがとうございました。
非常にわかりやすく説明していただけたので、感謝しております。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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