Показать сообщение отдельно
Старый 15.03.2008, 22:20
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 3  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
По умолчанию Всё-таки делаем это!

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

Устанавливаем правильные объекты для рекурсивного метода и заменяем создание нового объекта на this:
Код AS3:
const source:CubicBezierSVG = this;
.....
firstHalf.getQuadBez_RP (....
secondHalf.getQuadBez_RP(....
Тестируем. Сработало!

Редактор нам подсветил неиспользуемые переменные. Удаляем их, сохраняем документ. Панель Problems насыпала проблем. Проходим по всем ошибочным вызовам, удаляя в каждом первые четыре аргумента. Делаем это до тех пор, пока панель Problems не прекратит истерику.

Результатом наших трудов стало то, что метод getQuadBez_RP приведен в такое состояние:

Код AS3:
public function getQuadBez_RP(k:Number, qcurves:Array):void {
	const source:CubicBezierSVG = this;
	// find intersection between bezier arms
	var startArm : LineSVG = new LineSVG(source.start, source.startControl);
	var endArm : LineSVG = new LineSVG(source.endControl, source.end);
	var s:Point = startArm.getLineIntersection(endArm);
	// find distance between the midpoints
	var dx:Number = (source.start.x + source.end.x + s.x * 4 - (source.startControl.x + source.endControl.x) * 3) * .125;
	var dy:Number = (source.start.y + source.end.y + s.y * 4 - (source.startControl.y + source.endControl.y) * 3) * .125;
	// split curve if the quadratic isn't close enough
	if (dx*dx + dy*dy > k) {
		var halves:Array = source.split();
		var firstHalf:CubicBezierSVG = halves[0] as CubicBezierSVG; 
		var secondHalf:CubicBezierSVG = halves[1] as CubicBezierSVG;
		// recursive call to subdivide curve
		firstHalf.getQuadBez_RP (k, qcurves);
		secondHalf.getQuadBez_RP(k, qcurves);
	} else {
		// end recursion by saving points
		qcurves.push({p1x:source.start.x, p1y:source.start.y, cx:s.x, cy:s.y, p2x:source.end.x, p2y:source.end.y});
	}
}
и это состояние нас не устраивает тем, что в конце кода присутствует вопиющий пример неявного нетипизированного доступа. Им и займемся.
__________________
http://realaxy.com


Последний раз редактировалось iNils; 20.12.2010 в 13:28.