0

アクション スクリプト ビデオを検索するためのスライダーを作成しました。私が何に取り組んでいるかを見ることができれば、よりよく理解できるかもしれません: http://www.stevevo.sin.khk.be/Website%202SDesign/ -> これは私がいるウェブサイトのテストサーバーのリンクです建物が走っています。中央に巨大なバナーが表示されます。ロールオーバーすると、スライダーと一時停止/開始ボタンが表示されます。スライダーは、1つの小さなことを除いてうまく機能します。スライダーを完全に左にドラッグすると、actionScript 3.0 は再びムービーを開始します (私は推測します)。今度は中断せずに右にドラッグすると、スライダーは本来のように右に移動しません (すべて 1 回のドラッグで)。

最初に滑り始めてから滑り続けることができないのはなぜですか?

私のコード:

とても簡単です。ドラッグを開始すると、長方形が dragRestriction になります。ムービーが停止します。isDragging = true.

SearchBarSlider.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);

function fl_ClickToDrag(event:MouseEvent):void
{
    var rect:Rectangle = new Rectangle(SearchBar.x + 3, 
                       SearchBar.y, 
                       SearchBar.width - 10, 
                       0);
    SearchBarSlider.startDrag(false, rect);
stop();
    isDraging = true;
}

繰り返しますが、簡単です。ドラッグストップ。ムービーの再生が再開されます。isdragging = false;

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);

function fl_ReleaseToDrop(event:MouseEvent):void
{
    SearchBarSlider.stopDrag();
    play();
    isDraging = false;
}

スライダーの x 位置をドラッグするときにマウスが移動すると、適切な量のフレームに変換されます。3 つの部分の間に他の長さが適用されます。

stage.addEventListener(MouseEvent.MOUSE_MOVE, fl_Drag);

function fl_Drag(event:MouseEvent):void
{
    if(isDraging == true) {
        if(SearchBarSlider.x - (SearchBar.x + 3) < 20){
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3)) / 20) * 320));
        } else if(SearchBarSlider.x - SearchBar.x + 3 >= 20 && SearchBarSlider.x - SearchBar.x + 3 < 40){
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 20) / 20) * 365) + 365);
        } else {
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 40) / 20) * 465) + 685);
        }
    }
}

このイベントは、ドラッグしていないときにすべてのフレームで発生します。ただし、スライダーの x 位置をフレームに変換する代わりに、フレームをスライダーの x 位置に変換します。

stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);

function fl_frameEvent(e:Event):void
{
    if(isDraging == false) {
        if(currentFrame < 365){
            SearchBarSlider.x = SearchBar.x + 3 + Math.round((currentFrame / 365) * 20);
        } else if(currentFrame >= 365 && currentFrame < 685){
            SearchBarSlider.x = SearchBar.x + 23 + Math.round(((currentFrame - 365) / 320) * 20);
        } else {
            SearchBarSlider.x = SearchBar.x + 43 + Math.round(((currentFrame - 685) / 465) * 20);
        }
    }
}
4

2 に答える 2

0

私は実際に自分の問題を解決しました。これが解決策です。

stage.addEventListener(MouseEvent.MOUSE_MOVE, fl_Drag);

function fl_Drag(event:MouseEvent):void
{
    if(isDraging == true) {
        if(SearchBarSlider.x - (SearchBar.x + 3) < 1){
        } else if(SearchBarSlider.x - (SearchBar.x + 3) < 20){
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3)) / 20) * 320));
        } else if(SearchBarSlider.x - SearchBar.x + 3 >= 20 && SearchBarSlider.x - SearchBar.x + 3 < 40){
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 20) / 20) * 365) + 365);
        } else {
            gotoAndStop(Math.round(((SearchBarSlider.x - (SearchBar.x + 3) - 40) / 20) * 465) + 685);
        }
    }
}

フレーム 1 で gotoAndStop イベントが発生すると、フレーム 1 でアクション レイヤーがコードを再開するため、プログラム全体が再起動するという問題がありました。忙しかったドラッグは終わった。新しいコードでは、検索バーは gotoAndStop(1); を実行しません。

于 2011-03-13T21:29:08.010 に答える
0

ドラッグすると、2番目の機能は本当に発生しませんか? それを削除しますか、それとも同時に実行していますか? enter_frame 関数と mouse_move 関数が互いに戦っていると思います。ドラッグ機能でこれを追加します:

stage.removeEventListener(Event.ENTER_FRAME, fl_frameEvent);

そしてドロップ機能にこれを追加します:

stage.addEventListener(Event.ENTER_FRAME, fl_frameEvent);

別の回避策として、スライダーをズームインした場合、左に 99.9% 来ても完全に整列していない場合、期待どおりに機能することに気付きました。ドラッグ可能な長方形を調整して、左側の小さなスペース。

SearchBar.x + 4
于 2011-03-12T17:03:40.427 に答える