Вспышка - облегчает прокрутку движущегося ролика, прокручиваемого датчиком с каждой стороны - PullRequest
0 голосов
/ 09 апреля 2010

Я надеюсь, что кто-то может пролить свет на эту проблему для меня ... У меня есть видеоклип, который прокручивается с помощью «датчика» на каждой стороне сцены. Клип прекрасно прокручивается в обоих направлениях, но вот моя проблема:

Когда пользовательская мышь покидает сцену, видеоклип останавливается на дорожках, и это не обеспечивает приятного плавного эффекта. Глядя на приведенный ниже код, могу ли я сказать, что анимация должна ослабляться, когда пользовательская мышь покидает сцену, а не просто внезапно останавливаться?

class Sensor extends MovieClip {

    public function Sensor() {
    }

    public function onEnterFrame() {

        //

        var active:Boolean;

        // is mouse within sensor?
        if ((_level2._xmouse >= this._x) && _level2._xmouse <= (this._x + this._width)) {
            active = true;      
        } else {
            active = false;
        }

        if(active) {

            // which area of the sensor is it in?
            var relative_position:Number;
            var relative_difference:Number;
            relative_position = _level2._xmouse / this._width * 100.0;

            //_level2._logger.message("relative position is " + relative_position);

            if (!isNaN(relative_position)) {

                // depending on which area it is in, tend towards a particular adjustment
                if(relative_position > _level2._background_right_threshold) {
                    relative_difference = Math.abs(relative_position - _level2._background_right_threshold);
                    //relative_difference = 10;
                } else if(relative_position < _level2._background_left_threshold) { 
                    relative_difference = Math.abs(_level2._background_left_threshold - relative_position);
                    relative_difference *= -1;
                } else {
                    _level2._background_ideal_adjustment = 0;
                }


                var direction:Number;
                if(_level2._pan_direction == "left") {
                    direction = 1;
                } else {
                    direction = -1;
                }
                _level2._background_ideal_adjustment = direction * (relative_difference / 10) * _level2._pan_augmentation;
                //_level2._logger.message("ideal adjustment is " + _level2._background_ideal_adjustment);
                if (!isNaN(_level2._background_ideal_adjustment)) {

                    // what is the difference between the ideal adjustment and the current adjustment?
                    // add a portion of the difference to the adjustment:
                    // this has the effect that the adjustment "tends towards" the ideal
                    var difference:Number;
                    difference = _level2._background_ideal_adjustment - _level2._background_adjustment;
                    _level2._background_adjustment += (difference / _level2._background_tension);

                    // calculate what the new background _x position would be
                    var background_x:Number;
                    var projected_x:Number;
                    background_x = _level2["_background"]._x;
                    projected_x = background_x += _level2._background_adjustment;
                    //_level2._logger.message("projected _x is " + projected_x);

                    // if the _x position is valid, change it
                    if(projected_x > 0) projected_x = 0;
                    if(projected_x < -(_level2["_background"]._width - Stage.width)) projected_x = -(_level2["_background"]._width - Stage.width);
                    _level2["_background"]._x = projected_x;

                    // i recommend that you move your other movieclips with code here

                }

            }

        }

    }

}

1 Ответ

1 голос
/ 22 апреля 2010

Ссылка, которую вы указали, не работает, но я думаю, что у меня есть подсказка

velocity=0;
maxVelocity=3;
accel=0.1;
break=0.98;


function onEnterFrame(){
    if (mouseOverRightSensor){
        velocity +=accel; 
    }else if (mouseOverLeftSensor){
     velocity -=accel;
    }
   // make sure you constrain the velocity
   if (Math.abs(velocity)>maxVelocity) {  
   //get the sign of the velocity and multiply it with maxVelocity
      velocity=Math.abs(velocity)/velocity * maxVelocity
   }
   //Add the velocity to the movieclip's position
   movieclip.x+=velocity;
   //shrink down the velocity, this is done each frame no matter if the mouse is over the sensor;
   velocity*=break;
}

Как правило, вам нужно перемещать мувиклип, даже если мышь не находится над датчиками. Это достигается с помощью переменной скорости.

Возможно, вам придется настроить значения и добавить больше кода, это всего лишь некоторый концептуальный код. Надеюсь, это поможет вам:)

...