Progression Forum
9月 03, 2010, 02:42:33 午前 *
ようこそゲストさん。まずは、ログインするか、ユーザ登録してください。
アクティべーションメール送られて来ませんでしたか?

ユーザ名、パスワード、クッキー保持期間を入力してログインして下さい。
お知らせ:
 
   ホーム   ヘルプ 検索 ログイン 登録  
ページ: [1]
  印刷  
投稿者 スレッド: エフェクトのdurationが1秒単位でしか設定できない  (参照数 9768 回)
miyasuke
初心者
*
投稿: 1


プロフィールを見る
« 投稿日:: 2月 17, 2009, 12:56:10 午前 »

はじめまして。
つい先日より、Progressionを使用させていただいております。

現在、ページ遷移のエフェクトコンポーネント(BlindsEffect、WipeEffectなど)で、
durationの値を1000ms(1秒)よりも短く設定しようとしたところ、逆に継続時間が長くなってしまうという現象が発生しております。
もし仕様でしたら申し訳ありませんが、失礼ながら仕様ではないと仮定して以下書かせていただきます。


まず、現状としては、目視による観察より、
durationの値が 1000のときと、1999のときとで、エフェクトの継続時間に変化がみられませんでした。
一方、1999のときと、2000のときとでは、明確に継続時間に変化が見られました。
このことから、現状では、エフェクトコンポーネントのdurationは、値1000単位(実質1秒単位)でしか設定できないものと思われます。

私の方で原因を調査してみましたところ、下記の点が主な原因となっていると思われます。
詳しいところまでは調べておりませんので、こちらが正しいかどうかはわかりませんが、調査していただければ幸いです。

----------------------------------
・DoTransitionクラス(パッケージ:jp.progression.commands)
 コンストラクターの第4引数(duration)の型がint型指定で、これがそのまま秒数として扱われている。
 <行数: 163, 181>

・EffectBaseクラス(パッケージ:jp.progression.core.casts.effects)
 _castAddedメソッド、_castRemovedメソッドにおいて、DoTransitionインスタンスを生成する際に、
 コンポーネントのパラメータで入力したdurationの値(int型)に対し、 duration/1000 を第4引数にあてている。
 (ms単位のint値が、int値1000で割られ、小数点以下が切り捨てられた上で、秒数とされている可能性がある)
 <行数: 96~103>
----------------------------------


【当方環境】
OS: Windows Vista
オーサリングツール: Adobe Flash CS3 Professional
Progression バージョン: 3.1.42


以上、よろしくお願いいたします。
IP記録
flabaka
コミッター
新参メンバー
*****
投稿: 90



プロフィールを見る サイト
« 返信する #1 投稿日:: 2月 17, 2009, 03:34:31 午前 »

>miyasukeさま

はじめまして。

僕も試してみたところ、miyasukeさまと同じ現象を確認致しました。

1.1000と1999の時では、違いが見られない

これはmiyasukeさまが仰られている様にdurationがint型になっているためだと思います。

trace(int(1));とtrace(int(1,9));を実行してみると、小数点以下は切捨てられているので、どちらも1と表示されます。
ですので、1000と指定しても、1999と指定しても、(最終的には)どちらも1秒として扱われているから、違いが見られません。

2.1999と2000の時では、違いが見られる

これも先と同様で、1999は1秒。2000は2秒として扱われているので、表示に違いが見られます。

3.500と指定した場合、継続時間が長くなった

500と指定した場合ですが、trace(int(0.5));と同じになるので、小数点以下が切り捨てられ、0秒と表示されるはずですよね?
しかし、実際には2秒くらいに表示されてしまいます。

これは、どうやらfl.transitionクラスが関係しているみたいです。

Transition.asクラスの94~103行目あたりにこんな記述があります。

function set duration (d:Number):Void {
      if (d) {
         this._duration = d;
         this._twn.duration = d;
      }
   };
   
   function get duration ():Number {
      return this._duration;
   };

dが0だと、set duration内がスルーされて、44行目で適宜されている値(private var _duration:Number = 2;)を拾ってきます。

ですので、durationを500ミリ秒と設定すると、エフェクトが2秒で表示されてしまうのではないでしょうか?

(開発者のtaka:niumさまでないので正しいことは言えませんが)現状では1000ミリ秒以下を設定してしまうと、fl.transitionのせいで(自動的に)2秒になってしまうと思われます。
IP記録
ページ: [1]
  印刷  
 
ジャンプ先:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!