использовать закадровый буфер размер вашего контроля.
Сначала сделайте это простым способом. Нарисуйте весь экранный эквалайзер, прокручивающийся до нужного положения. Когда готово, blit это к фактическому экрану.
Если это слишком медленно, попробуйте оптимизировать его, не перерисовывая весь экранный экран, но сделав вертикальное разделение: (Я говорю о горизонтальном движении прокрутки здесь, чтобы сделать концепцию понятным. этот метод применим и к прокрутке в 8 направлениях)
Это несколько сложно реализовать (поэтому я предложил простой подход в первую очередь), но попытайтесь представить себе бумагу с изображением на ней, а левую сторону вы оберните и приклейте его к правой стороне (так что вы получите трубку). Таким образом, вы можете прокручивать бумагу бесконечно (вращая трубку вокруг оси y).
Аналогичным образом вы можете сделать то же самое с заставным буфером. Подготовьте буфер вне экрана, нарисуя на нем полное содержимое.
Теперь для прокрутки вправо вы в основном разделяете буфер затвора в 2 (путем этого вертикального разделения (точно так же, как бумага в примере, где был клей)). предположим, что вы прокручиваете 10 пикселей вправо, что вы делаете:
- Скопируйте правую часть раскола (находящегося в пикселе 10) в пиксель 0 вашего элемента управления. (поэтому вся область от (10, 0) - (ширина - высота) до: (0,0)
- затем скопируйте левую сторону раскола: пиксель от 0 до 10 до ширины пикселя -10. так: (0,0) - (10, высота) до (ширина-10, 0)
Прежде чем вы сделаете это, ТОЛЬКО перерисуйте пиксели, которые должны были быть изменены (в данном случае 10 пикселей с тех пор, как мы прокрутили 10 пикселей) Все остальные пиксели по-прежнему идентичны и не нуждаются в перерисовке.
Вам нужно будет сделать это на бумаге самостоятельно, чтобы это понять. Это довольно распространенная техника разработки игр на платформах, где ограничены ресурсы (мобильные телефоны и т. д.).
p.s.прокрутка во всех направлениях может быть достигнута точно так же (хотя еще труднее получить право); ^)
Во время моей мысли об этом другой связанный с этим вопрос подошел. Если вы нашли этот вопрос интересен, есть вероятность, что это один может быть интересно, как хорошо :) http://stackoverflow.com/questions/1635699/how-to-synchronize-content-of-one-view-depending-on -scroll-position-in-sibling-sc – SoManyDetails