anchor.diff:      if (!playing) {
         return _startPosition;
       }
  -    return (_startPosition + (time - _startTime) * _speed) % movie.frames.length;
  +    num pos = (_startPosition + (time - _startTime) * _speed) % movie.frames.length;
  +
  +    // If we're going too fast to animate transitions between frames, always use
  +    // the halfway point between frame changes.
  +    if (_speed.abs() >= 15) {
  +      return (pos ~/ 1) + 0.5;
  +    }
  +
  +    return pos;
     }
   
     num get position => positionAt(now());
  
positive.code:   }
  
    set speed(num newValue) {
      num t = now();
      _startPosition = positionAt(t);
      _speed = newValue;
      _startTime = playing ? t : null;
      if (_speed == 0) {
        playing = false;
      }
    }
  
    /// Modifies movie's starting position and speed based on a drag. Also pauses the player.
    /// The position will have deltaPos added to it and the speed will be set to deltaPos / deltaT.
    void drag(num deltaPos, num deltaT) {
      if (deltaT == 0) {
        return;
      }
      if (playing) {
        _stop();
      }
      _startPosition = (_startPosition + deltaPos) % movie.frames.length;
      _speed = deltaPos / deltaT;
      if (_onChange.hasListener) {
        _onChange.add(this);
      }
  
negative.code: import 'dart:async' show Stream, StreamController, StreamSubscription;
  import 'package:pixelcycle2/src/movie.dart' show WIDTH, HEIGHT, ALL, Movie, Frame, Size;
  
  /// A Player contains the position and speed at which the movie is playing.
  /// A position is represented as float between 0 up to (and not including) the number of frames in the movie.
  /// The first frame is shown for positions 0 to 1, the second, from 1 to 2, and so on.
  /// Time is in seconds since the zero time used by window.performance.now(), which is typically the page load.
  /// Speeds are in frames per second.
  class Player {
    final Movie movie;
    final StreamController<Player> _onChange = new StreamController<Player>.broadcast();
  
    // The time when the movie started playing, or null if it's not playing.
    num _startTime = null;
  
    // The position where the movie started playing, or will play if it's not playing.
    num _startPosition = 0;
  
    // The speed at which the movie is playing, or will play. May be negative to play backwards.
  