2011-06-17 7 views
1

私はFlex/Flashでドラッグベースのコントロールを作成しています。フィルムストリップと同様に、アイテムをスクロールしてスクロールして項目をスクロールできます。コントロールをもっと自然に感じさせるために、スワイプが行われるとスクロールを遅くする慣性を追加しました。最初に読み込まれると、5つのアイテムが表示され、3つ目のアイテムを中心にして選択してスクロールする項目の「x」個の数字が表示されます。物理的な問題:速度からちょうど距離を計算する

スワイプジェスチャーを使ってアニメーションを作成するときに、項目が中間(3番目の位置)で終わるかどうかを判断し、それに応じて動き計算を調整して3番目/中央の位置にドッキングさせたいと思っています。あなたが長いスワイプを行うと想像して、それは過去のx個のアイテムを飛ばしますが、停止するまでゆっくり進むにつれて、アイテムは3番目の位置にエレガントに停止します。これを行うには、スピード値から移動する距離を判断する必要があると考えています(時間がユーザーエクスペリエンスには無関係です。つまり、長くスワイプすると長いアニメーションがアイテムをスキミングすることが正当化されます)。

現時点では、ユーザーがMOUSE_UPイベントを生成すると、ENTER_FRAMEイベントでアニメーションルーチン(イナーシャ付き)が呼び出されています。彼らがこれを行うとき、私はドラッグの速度を取得し(これを事前に監視することによって)、アニメーションを停止するのに適切な値に達するまでENTER_FRAMEイベントの各呼び出しでこの速度値を減分します。

残念ながら、私が見たスピードの計算では、スピードと時間を使って距離を決定していますが、スピードが必要です。確かに、私の知識はこの分野では強くないので、私は明らかに分からないかもしれない。事前に

乾杯...

+0

半明瞭性:アニメーション化している場合、時間はすでに要素です。アニメーションは時間の経過と共に変化を意味します。 – cHao

+0

ちょうど興味のない、あなたは速度と速度の違いは何だと思いますか?ここではベロシティのベクトルの様子が見えません。 – paxdiablo

+0

@ cHao - アニメーションが呼び出され、速度が取得されます。アニメーションの各サイクルで速度が低下するため、アニメーションの時間は不明です(または計算可能かもしれません)。 @ paxdiablo - 謝罪、私はここに私の言葉を混ぜていた。私はスピードと価値を持っています。私はスピードを減らします。 – SeanCocteau

答えて

0

まず、あなたはデフォルトの減速値を使用した場合で終わる位置を決定し、その後、あなたはその位置にスクロールすると、中心最寄りとなる項目を把握し、その後の計算しますその項目に正確に終わる新しい減速値。

私は頭の上にそのような計算をする数学を覚えていませんが、それは微積分です。

このようにして、時間を計算できますが、事前にそのことを知る必要はありません。

(私は、スワイプが1つの項目でも移動するのに十分な速さでない特別なケースを実行する必要があると思います。ユーザーはわずかにマウスを軽くたたくことがあります。現在のアイテムの再入荷です)


個人的に私はあなたが行っているアプローチを取っていません。私は単にそれがデフォルトの減速値でスクロールすることを許可し、速度が特定の閾値を下回ったときに最も近く終わるアイテムをゆっくりと中心に置きます。それはアイテムがオーバーシュートしてゆっくりと後ろにスクロールする可能性があることを意味しますが、少しオーバーシュートしてから修正することがクールに見えると思います。

+0

私はこれらの計算を実行するときに問題があると思いますが、加速は一定の反復ではなく、反復ごとに減少します。 – SeanCocteau

+0

アクセラレーションが変化するのはなぜですか?速度を変更するだけですが、加速度は変更しないでください。 – jhocking

+0

また、私は、この特定の例では、揺れ/揺れの効果が望ましいとは考えていません。したがって、優雅なドッキングを可能にする距離を計算する必要があります。 – SeanCocteau

0

新しいフレームを入力するたびに固定量(Dと呼ぶ)で速度を減らし、速度が一定のしきい値を下回ったときに停止すると、問題は非常に簡単です。しきい値を例えば0.7 * Dに設定すると、最初のスピードをDで割って切り捨てることができます。トラバースするフレーム数をNと呼びます。次に、(N + 0.01)* D、あなたは完了です。

+0

私はここにあなたに従っているか分かりません。私のデクリメント量は固定されており(0.95)、停止するしきい値は、速度が0.05またはそれ以下に達し、最初の速度がフレームあたり24ピクセルの場合です。これは距離をどのように計算するのですか? – SeanCocteau

+0

@SeanCocteau:フレームあたり24ピクセル?あなたのコントロールは「フィルムストリップに似ている」と言っていたので、私は「フレーム」を誤解してしまったと思います。あなたの例では、エージェントは(24-0.05)/0.95 = 25フレームを通過します(速度が0.25で、停止するには速すぎますが、次のフレームに入るには遅すぎる不健全な状態になります)。アイテムの幅はピクセル単位ですか? – Beta

関連する問題