Ленивая загрузка бесконечного фона прокрутки во Flash CS5 / ActionScript 3 - PullRequest
0 голосов
/ 08 февраля 2011

Проект, над которым я работаю, имеет массивное фоновое изображение (шириной 800 пикселей и высотой 2585 пикселей), которое медленно прокручивается вверх.

Раньше я использовал код по адресу: http://www.ilike2flash.com/2010/08/endless-scrolling-background-in-as3.html

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

Итак, мой вопрос:

а. Есть ли еще один бесплатный код бесконечной прокрутки на основе Flash, поддерживающий ленивую загрузку фоновых объектов (скажем, существующий фон выделен в 6)?

б. Если нет, есть идеи, как мне изменить вышеуказанную ссылку, чтобы сделать это?

Спасибо! Мой AS3 выглядит следующим образом:

stop();

//The speed of the scroll movement.
var scrollSpeed:uint = 2;

//This adds two instances of the movie clip onto the stage.
var s1:ScrollBg = new ScrollBg();
var s2:ScrollBg = new ScrollBg();
addChild(s1); 
addChild(s2);
setChildIndex(s1, 0);
setChildIndex(s2, 0);

//This positions the second movieclip next to the first one.
s1.y = 0;
s2.y = s1.height;

//Adds an event listener to the stage. 
stage.addEventListener(Event.ENTER_FRAME, moveScroll); 

//This function moves both the images to top. If the first and second 
//images goes past the top stage boundary then it gets moved to 
//the other side of the stage. 
function moveScroll(e:Event):void{
  s1.y -= scrollSpeed;  
  s2.y -= scrollSpeed;  

  if(s1.y <= -s1.height){
     s1.y = s1.height - scrollSpeed;
  }else if(s2.y <= -s2.height){
     s2.y = s2.height - scrollSpeed;
  }
}

Ответы [ 4 ]

1 голос
/ 14 января 2012

Что касается "пустой строки высотой в пиксель после изображения и перед циклом следующего", это исправление избавило меня от пробела ...

if (s1.x <=  -  s1.width) { s1.x = s2.x + s2.width; }
else if (s2.x <= -s2.width) { s2.x = s1.x + s1.width; }

Обратите внимание, что положение x фона 1 находится в положении x фона 2 плюс его ширина и наоборот.

1 голос
/ 08 февраля 2011

привет æндрю ссылка имеет около 15 строк кода. он создает два экземпляра объекта, затем перемещает, перемещает оба на 1 пиксель в каждом кадре и проверяет, находится ли первый клип вне поля зрения, и в этот момент он перемещает мувиклип к краю другого клипа. Там не так много места для ошибок ... но если бы мне пришлось указать на это, я бы сказал, что это прямо здесь

if(s1.x < -s1.width){
  s1.x = s1.width;
}else if(s2.x < -s2.width){
  s2.x = s2.width;
}

должно быть: (обратите внимание на <= вместо <)

if(s1.x <= -s1.width){
  s1.x = s1.width;
}else if(s2.x <= -s2.width){
  s2.x = s2.width;
}

это устраняет разрыв в несколько пикселей между мувиклипами

Что касается загрузки большого актива, просто добавьте функцию прокрутки после загрузки. Вы можете найти образец в http://drawlogic.com/2007/09/20/howto-using-loaders-in-as3/, но есть множество других.

0 голосов
/ 20 сентября 2012

Попробуйте заглянуть в Blitmask Гринсока . Для этого вам понадобится только одно повторяемое изображение, а blitmask оптимизирован даже для менее мощных процессоров мобильного телефона.

0 голосов
/ 08 февраля 2011

я предполагаю, что вам нужна круглая ширина / высота изображения, чтобы это работало хорошо, как в демоверсии, вспышке не нравится рендеринг .5px промежутков и т. Д. Вы всегда можете попробовать переместить изображение в положение другие, просто чтобы убедиться, что все правильно, и надеяться, что это будет лучше:

if(s1.x < -s1.width){
  s1.x = s2.x + s2.width;
}else if(s2.x < -s2.width){
  s2.x = s1.x + s1.width;
}

когда дело доходит до ленивой загрузки фонов, вам нужно быть осторожным с ним и проверять, что изображение следующего раздела завершило загрузку, прежде чем начать его прокручивать, просто не забудьте сохранить источник изображения в переменной где-нибудь (возможно со статическим классом "отложенной загрузки"?), поэтому вы не пытаетесь вызывать URL несколько раз без необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...