Тема: [Вконтакте] Переход по друзьям
Показать сообщение отдельно
Старый 12.02.2012, 22:10
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Border - это класс отображающий друга, а заодно загружающий фотографию? Тогда не понятно как вы координаты выставляете, чтобы все Border в одну точку не выставлялись.

Короче, как выглядит обкатанный мной метод создания списка друзей:

Надо отделить отображение от данных. Будет проще. Гораздо.
Как вообще реализуются списки с прокруткой на экране (не важно друзей, оружия в инвентаре или товаров в магазине):
(учтите, что далее идет много конкретики выбранной на абум, просто чтобы не засорять эфир словами "возможно", "лучше было бы", "если", ...)
- есть визуальный список, который можно прокручивать горизонтально с полями array, scrollH
- в коде этого списка ничего не знают ни про друзей, ни про то как их надо отображать
- в конструктор списка передается класс - "рендерер". Это штука, которая отображает конкретные данные, например друга, он обязательно реализует интерфейс:
Код AS3:
public interface IRenderer
{
    function get view():DisplayObject;
    function get data():*;
    function set data(value:*):void;
}
- когда этому списку присваивают array - он очищает все что у него было до этого и идет по порядку по этому массиву. Берёт каждый элемент и создает для него экземпляр Рендерера (по классу, который передали в конструктор). Но общается с ними только через интерфейс IRendere (конкретного класса он не знает). Он присваивает полю data значение из ячейки массива и добавляет view рендерера на себя.
В нем реализуется прокрутка (по изменению поля scrollH) и если потребуется другой горизонтальный список уже для товаров - его не придется писать заново.

Теперь надо понять как сформировать собственно этот array данных (теперь они у нас не завязаны на отображение и сделать это проще)
- Для начала подойдет самый тупой вариант с последовательным получением данных:
- создаем класс типа:
Код AS3:
    public class Friend
    {
        public var id:String;
        public var level:int;
        public var photoURL:String;
    }
- загружаем список айдишников друзей с вконтакта;
- для каждого айдишника создаем по экземпляру Friend, присваивая полю id этот айдишник и запоминая список экземпляров Friend в массиве;
- загружаем профили по полученному списку айдишников
- для каждого профиля по айдишнику находим экземпляр Friend (лучше не поиск использовать а через хеши - но это чисто для производительности, можно забить) и из профиля заполняем поле photoURL
- по списку айдишников запрашиваем уровни с нашего сервера, находим друзей в нашем массиве и присваиваем эти уровни;
- всё! массив данных готов - присваиваем его полю array и наблюдаем друзей внизу экрана
- фотографии друзей можно грузить уже в самом Рендерере (у него же есть ссылка на Friend, которую ему передали в поле data, а у Friend есть адрес фотографии);
- добавляем кнопки влево-вправо, которые делают list.scrollH++ и list.scrollH--.


Последний раз редактировалось expl; 12.02.2012 в 22:15.