1

親MovieClip内の要素を無限に水平方向にスクロールする必要があります。

どの方法を試しても、「ドリフト」の要素が発生し、最終的に要素が重なり始めます。

に従って、各要素に相対再帰的なトゥイーンを使用してみましたが、この方法では、開始と停止を繰り返した後、かなりのエラーが発生する可能性があります。

//CODE START
      function doScroll():void {
         TweenLite.to(this, .25, {x:"20", ease:Linear.easeNone,onUpdate:checkPos,onComplete:doScroll});
     }
//CODE END

一定の速度を使用して、事前定義された位置に絶対トゥイーンを実行するように戻しました。これはより正確なようですが、それでも「ドリフト」が発生します。

//CODE START
//_dest is predefined 
var speed:Number = 500;
var dist:Number = this.x - _dest;
var distAbs:Number = dist < 0 ? -dist : dist;
//kludge to get constant velocity by recalculating time every frame
_time = distAbs / speed;
TweenLite.to(this, _time, {x:_dest, ease:Linear.easeNone,onComplete:reset});
//CODE END

これは非常に単純なはずだと思いました。誰かが私に可能なチュートリアルを指摘したり、提案をしたりできますか?

助けていただければ幸いです。

4

2 に答える 2

2

ソリューション/ディスカッション(http://forums.greensock.com/viewtopic.php?f=1&t=6800 )

(警告:これにはかなり長い説明が必要になります...)

これはコードの論理的な問題です。onUpdateでは、x位置が980を超えると、トゥイーンを強制終了してxを-980に戻し、最初からやり直すように条件付きロジックを実行していました。それぞれが異なる位置から始まる個々のアイテムごとにそれを行っています。その初期位置は、そのしきい値を超えると影響します。したがって、再配置すると、オフセットが異なります。

たとえば、item1が0のx位置で始まり、item2が490で始まり、両方とも毎秒400ピクセルで動き始め、フレームレートが60であるとすると、フレームあたり6.66666ピクセル移動します。Item1は980に到達するのに147フレームかかります。ただし、item2は980のしきい値を超えるのに74フレーム(実際には73.5ですが、ハーフフレームなどはありません)かかりますが、そうすると、xの位置になります。 983.333333。その時点で、条件付きロジックのために-980に戻りますが、余分な3.333333ピクセルを移動したことに注意してください。Item1とitem2がまったく同じ速度で移動することを意図しており、トゥイーン中に移動しますが、onUpdateロジックが再配置時にそれらの位置をずらしているため、最終的には一部が他よりも移動し、全体の速度に影響します。

もう1つの問題は、FlashがDisplayObjectsのx/y座標を0.05に最も近い値に丸めるという事実に関係しています。したがって、手動で再配置(ラップ)を行うと、小さな丸め誤差が発生します。たとえば、TweenLiteが正確なx値を980.799に設定するとします。Flashは実際にはそれを980.75に丸めます。次に、this.x-= 980のように再配置してからトゥイーンすると、そのラウンドで値がほぼ0.05ピクセル失われます。これを何度も実行すると、合計で0.5ピクセルまたは全体ピクセル(またはそれ以上)になる可能性があります。すべてのアイテムがわずかに異なる場所でしきい値を超えているため、丸め誤差は同じではないため、間隔にわずかな差異が見られ始めます。繰り返しますが、これはトゥイーンエンジンの問題ではありません。エンジン自体が値を正しく設定していることがわかります。

FLAとサポートファイルを含むソリューションがhttp://forums.greensock.com/viewtopic.php?f=1&t=6800に投稿されました。

他の人が示唆しているように、整列/スクロールしているすべてのアイテムを管理する単一のコードチャンクを用意することをお勧めします。すべてが毎回完全に整列するように、単一の参照ポイントから物事をレイアウトします。ロジックを適用するゲッター/セッターをトゥイーンすることができます。私はいつもそのテクニックを使っています、そしてそれは素晴らしい働きをします。上記のURL(ItemBase.asのscrollX getter / setter)に添付したコードで小規模な例を見ることができます。

于 2012-01-26T06:56:47.917 に答える
0

すべての背景要素を1つの次元で無期限に同じレートでトゥイーンする場合は、タイマーを使用してトゥイーンライブラリを完全にバイパスしませんか?

于 2012-01-26T02:06:53.137 に答える