Показать сообщение отдельно
Старый 06.01.2010, 13:21
dump13 вне форума Посмотреть профиль Отправить личное сообщение для dump13 Найти все сообщения от dump13
  № 1  
Ответить с цитированием
dump13

Регистрация: Apr 2009
Сообщений: 30
По умолчанию Критическая ошибка при вызове Graphics.drawPath()

Здравствуйте, у меня вопрос по Graphics.drawPath(). Писал когда-то работоспособный простенький редактор сплайнов, отрисовку производил с помощью Graphics.drawGraphicsData(). Выглядело это так:

Код AS3:
public function redraw ():void {
	var gdata:Vector.<IGraphicsData>=new Vector.<IGraphicsData> ();
	var path:GraphicsPath=_spline.toGraphicsPath ();
	gdata.push (new GraphicsStroke ( 0, false, "normal", "none", "round", 3.0, new GraphicsSolidFill (_bodyColor, _bodyAlpha) ));
	gdata.push (path);
	_body.graphics.clear ();
	_body.graphics.drawGraphicsData (gdata);
	// ... ...
}
То есть я не использовал drawPath() напрямую, и проблем не возникало.
Сейчас я произвожу модификацию сплайна или шейпа (вернее, их graphics) с помощью последовательных вызовов lineStyle(), beginFill(), endFill() из других объектов. Между ними я планировал вставлять вызовы drawPath(). Вот "рабочая лошадка":

Код AS3:
override public function process ():void {
	var p0:AGUnit = _parents[0], p1:AGUnit = _parents[1];
	if (p0 == null) {_output = null; return;}
	if (!(p0.output is Shape) && !(p0.output is Sprite)) {_output = null; return;}
	var gr:Graphics = p0.output.graphics;
	if (p1 != null && p1.output != null && (p1.output is AGSpline)) {
		var path:GraphicsPath = (p1.output as AGSpline).toGraphicsPath ();
		gr.drawPath (path.commands, path.data, path.winding);
	}
	_output = p0.output;
}
Когда этот метод вызывается, плейер выдает критическую ошибку и убивается насмерть. На всякий случай, вот так производится сборка GraphicsPath:

Код AS3:
public override function toGraphicsPath ():GraphicsPath {
	var gp:GraphicsPath=new GraphicsPath ();
	if (_points.length==0) {return gp;}
	var p:AGPoint=_points[0];
	gp.moveTo (p.x, p.y);
	for (var n:uint=1; n<_points.length; n++) {
		p=_points[n];
		gp.lineTo (p.x, p.y);
	}
	if (_closed) {p=_points[0]; gp.lineTo (p.x, p.y);}
	return gp;
}
Никто не знает, что это такое? Спасибо заранее.