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

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

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

Регистрация: Feb 2012
Сообщений: 212
По умолчанию Расширение класса Point

Здравствуйте, понадобилось добавить классу Point ряд методов линейной алгебры. Вот только код не компилится, пишет что fd не определена.
Код AS3:
public class pVector extends Point {
 
		public function pVector(x:Number,y:Number):void {
			super(x,y);
		}
		public function pAdd( v:pVector ):void{
			x += v.x;
			y += v.y;
		}
		public function pMulNum( i:Number ):void{
			x *= i;
			y *= i;
		}
 
	}
Код AS3:
fd = new pVector(22, 22);
			trace(fd);// ошибка копмиляции

Старый 19.02.2012, 21:26
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
private var fd:pVector;
Классы принято с Большой Буквы называть.
__________________
тут я

Старый 19.02.2012, 21:38
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 3  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Не объявил переменную и пытался, что то с ней сделать. Прошу прощенья, видимо PHP иссушил мозг.
Теперь споткнулся вот об это:
Код AS3:
var objCenterPoint:pVector;
objCenterPoint = obj.localToGlobal(new pVector(33, 53));
Похоже localToGlobal() ругается на не соответствие типов данных. Видимо придется делать методы pVector статическими.


Последний раз редактировалось PlutDem; 19.02.2012 в 21:50.
Старый 20.02.2012, 01:16
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Там не localToGlobal ругается, а оператор "=", на то что обычную точку присваиваете переменной с objCenterPoint.

Там нужно возвращаемую localToGlobal точку как-то преобразовать в точку типа pVector.
Один из вариантов (может не адекватный вашим задачам, но для примера сойдёт):
Код AS3:
public static function fromPoint(point:Point):pVector
{
    return new pVector(point.x, point.y);
}
 
var objCenterPoint:pVector;
objCenterPoint = pVector.fromPoint(obj.localToGlobal(new pVector(33, 53)));
А вообще, да:
Если Вы _не_ навешивате дополнительных полей на точку, а только хотите добавить несколько методов - лучше действительно не делать подклассов. А просто сделать кучу функций, принимающих обычные точки и работающих с ними (эти функции можно реализовать как статические в каком-нибудь классе или как отдельные, лежащие в пакете).

Потому что иначе придется создавать объекты своего типа, когда те же операции можно делать и с просто Point.


Последний раз редактировалось expl; 20.02.2012 в 01:26.
Старый 01.03.2012, 23:47
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 5  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Вот еще одна дилемма:
Код AS3:
public static function summ( v1:Point,v2:Point ):void{
			v1.x += v2.x;
			v1.y += v2.y;
		}
Код AS3:
// В функцию нужно передать сумму векторов не изменяя их значения, однако в этом случае
//к вектору v1 навсегда прибавится v2
somefunction( pVector.summ(v1,v2) );
Можно сделать так:
Код AS3:
public static function summ( v1:Point,v2:Point ):Point{
			pX = v1.x + v2.x;
			pY = v1.y + v2.y;
			return new Point(pX,pY)
		}
Код AS3:
//Но в этом случае придется писать довольно длинно
v1= pVector.summ(v1,v2)
//вместо короткого
pVector.summ(v1,v2)
К тому же, насколько я могу судить, во втором случае старые значения векторов будут складироваться в ожидании Сборщика Мусора а это не есть хорошо.
В общем, хотелось бы узнать как все грамотно сделать.


Последний раз редактировалось PlutDem; 02.03.2012 в 00:24.
Старый 02.03.2012, 00:01
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Но в этом случае придется писать довольно длинно
А в каком случае короче?
У Вас ни одно предложение не согласуется с другим. Функции имеют разные имена в примерах. Написано что ничего не возвращает, но завершается return'ом, написано "не хочу менять v1 и тут же пример v1 = ...
Нельзя ли чуточку поуважительней? Тут не телепаты.
__________________
Reality.getBounds(this);

Старый 02.03.2012, 00:28
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 7  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Цитата:
Сообщение от Wolsh Посмотреть сообщение
А в каком случае короче?
У Вас ни одно предложение не согласуется с другим. Функции имеют разные имена в примерах. Написано что ничего не возвращает, но завершается return'ом, написано "не хочу менять v1 и тут же пример v1 = ...
Нельзя ли чуточку поуважительней? Тут не телепаты.
Извиняюсь, был невнимателен. В основном заставляет сомневаться второй вариант и его проблемы с мусором.

Старый 02.03.2012, 00:47
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 8  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
А не пытаетесь ли вы сделать add и offset?
А еще можете посмотреть в сторону методов Vector3D. Например на scaleBy.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 02.03.2012, 01:02
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 9  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
ChuwY
Посмотрел Vector3D и решил, что используя Point, занимаюсь велосипедоводством и экономией на спичках
Но опять же, как при вызове функции сохранить исходное значение v1?
Код AS3:
somefunction( v1.add(v2) );

Старый 02.03.2012, 01:45
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Посмотреть мало, надо прочитать.
Цитата:
Добавляет значения элементов x, y и z текущего объекта Vector3D к значениям элементов x, y и z другого объекта Vector3D. Метод add() не изменяет текущий объект Vector3D. Вместо этого он возвращает новый объект Vector3D с новыми значениями.
__________________
Reality.getBounds(this);

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

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

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


 


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


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