Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.01.2010, 13:16
dex157 вне форума Посмотреть профиль Отправить личное сообщение для dex157 Найти все сообщения от dex157
  № 1  
Ответить с цитированием
dex157

Регистрация: Mar 2006
Сообщений: 44
По умолчанию работа с vector

Здравствуйте, я хотел бы посоветоваться, по поводу класса Vector, используете ли вы его в своих разработках, стоит ли его использовать или проще array..?
При использовании vector наткнулся на странный глюк, когда я передаю объект класса vector параметром метода в класс, мой вектор обнуляется, такое ведь не должно происходить..? )
пример, что бы понятнее было:
Код AS3:
var v:Vector.<Point> = new Vector.<Point>();
v.push(startPoint);
v.push(endPoint);
path.drawVector(v);
// тут v пуст


Последний раз редактировалось dex157; 13.01.2010 в 13:19.
Старый 13.01.2010, 13:31
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 2  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от dex157 Посмотреть сообщение
Здравствуйте, я хотел бы посоветоваться, по поводу класса Vector, используете ли вы его в своих разработках, стоит ли его использовать или проще array..?
При использовании vector наткнулся на странный глюк, когда я передаю объект класса vector параметром метода в класс, мой вектор обнуляется, такое ведь не должно происходить..? )
пример, что бы понятнее было:
Код AS3:
var v:Vector.<Point> = new Vector.<Point>();
v.push(startPoint);
v.push(endPoint);
path.drawVector(v);
// тут v пуст
Тоесть вы берете объект Vector, передаете его параметром в другой класс, в другом классе вы его убиваете и потом считаете, что так недолжно быть..?

Векторы стоимт использовать, потому, что они должно быть быстрее чем array, мне этого достаточно.
__________________
Гоночка


Последний раз редактировалось Alex Lexcuk; 13.01.2010 в 13:34.
Старый 13.01.2010, 13:37
dex157 вне форума Посмотреть профиль Отправить личное сообщение для dex157 Найти все сообщения от dex157
  № 3  
Ответить с цитированием
dex157

Регистрация: Mar 2006
Сообщений: 44
Alex Lexcuk
не все так просто, специально сделал следующие в методе drawVector()
Код AS3:
public function drawVector (v:Vector.<Point> ):void { 
	vec = v;
	graphics.clear( );
	graphics.lineStyle(lineThickness, lineColor, lineAlpha, 
                                linePixelHinting, lineScaleMode, lineCapsStyle, lineJoints); 
	p= vec.pop();
	graphics.moveTo(p.x, p.y);
	do {
		p = vec.pop();
		graphics.lineTo(p.x, p.y);
	}while (vec.length);
}
результат тот же, обнуление вектора происходит именно из за того что его передали свойством

Добавлено через 22 минуты
Цитата:
Сообщение от Alex Lexcuk Посмотреть сообщение
Тоесть вы берете объект Vector, передаете его параметром в другой класс, в другом классе вы его убиваете и потом считаете, что так недолжно быть..?
тем более, то что вы привели аргументом, совершенно не соответствует принципам ООП


Последний раз редактировалось dex157; 13.01.2010 в 14:00.
Старый 13.01.2010, 14:08
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 4  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Ну и? Хелп смотрим
Код:
pop():T
Удаляет последний элемент из вектора и возвращает его.
Вот вы и грохнули вектор и теперь он пустой. А почему вместо pop не использовать просто vec[0]
__________________
Гоночка

Старый 13.01.2010, 14:08
RandomUser вне форума Посмотреть профиль Отправить личное сообщение для RandomUser Найти все сообщения от RandomUser
  № 5  
Ответить с цитированием
RandomUser

Регистрация: Mar 2006
Адрес: Odessa
Сообщений: 157
vec и v ссылаются на один и тот же объект
__________________
Не всех война убила - многих покалечила

Старый 13.01.2010, 14:18
dex157 вне форума Посмотреть профиль Отправить личное сообщение для dex157 Найти все сообщения от dex157
  № 6  
Ответить с цитированием
dex157

Регистрация: Mar 2006
Сообщений: 44
RandomUser
да, так и получается..


Теперь понял, что передаем только ссылку на вектор, но не значения самого вектора..

Добавлено через 51 секунду
Alex Lexcuk
пожалуй так и буду делать, спасибо..

Старый 13.01.2010, 14:33
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
если нужна копия, то можно так
Код AS3:
var vec:Vector.<Point> = v.concat();

Старый 13.01.2010, 15:12
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
но сами поинты всё-равно будут линками
__________________
Отряд Котовскага

Старый 13.01.2010, 15:57
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Из недостатков вектора:

векторы не кастуются друг к другу. Т.е.
Код AS3:
var v0:Vector.<MovieClip> = new <MovieClip>[];
trace(v0 is Vector.<Sprite>); // false
trace(v0 as Vector.<Sprite>); // null
Векторы теряют тип при сериализации и все, не зависимо от вида сериализуются в Vector.<Object>.

Нету удобного способа перевести вектор в массив.

Векторы не раcширяемые.

Для объектов сложных типов векторы работают незначительно медленнее массивов.

У вектора нет метода sortOn().

Векторы и массивы в большинстве случаев не взаимозаменимы и их никак нельзя кастовать ка какому-то одному общему типу, поэтому, зачастую если ван нужно работать с API создаными без использования векторов, ваши попытки использовать вектор обречены

Достоинства - более безошибочный код. Небольшая прибавка в скорости при работе с простыми типами.
__________________
Hell is the possibility of sanity

Старый 13.01.2010, 16:45
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Для объектов сложных типов векторы работают незначительно медленнее массивов.
Наверное имелось в виду, незначительно быстрее массивов?
Или нет?
если они работают медленнее, зачем тогда они вообще?
__________________
Отряд Котовскага

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.