![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 30
|
Здравствуйте, у меня вопрос по Graphics.drawPath(). Писал когда-то работоспособный простенький редактор сплайнов, отрисовку производил с помощью Graphics.drawGraphicsData(). Выглядело это так:
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); // ... ... } Сейчас я произвожу модификацию сплайна или шейпа (вернее, их graphics) с помощью последовательных вызовов lineStyle(), beginFill(), endFill() из других объектов. Между ними я планировал вставлять вызовы drawPath(). Вот "рабочая лошадка": 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; } 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; } |
|
|||||
|
>>плейер выдает критическую ошибку и убивается насмерть.
А текст выводящейся ошибки (секрет) или вы считаете, что это неважно, потому что я сначала смотрю на текст ошибки, а потом думаю, че с ней делать. Как правило плеер сам говорит вам в тексте ошибки, чего ему не нравится.
__________________
Гоночка |
|
|||||
|
Modus ponens
|
Вдумчиво прочитайте вот эту строчку:
А вообще, код в таком оформлении можно только в ванной с выключеным светом показывать ![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 30
|
Прекрасная, на мой взгляд, строчка
. Если бы вы мне еще подсказали, как нетипизированный "вход" с предыдущего звена проверить на наличие у него свойства graphics, я был бы очень признателен. Я, сколько ни читал референс, другого способа определить это не нашел.@Alex Lexcuk: во вложениях вам и текст ошибки. Ну а все же, по сабжу? Последний раз редактировалось dump13; 06.01.2010 в 14:18. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 30
|
To Alex Lexcuk: между плеером и системой - среда исполнения, поэтому ошибки, которые выдаются им в обычных условиях (просто при ачипятке в коде), у меня язык не повернется назвать критическими. Текст *критической* ошибки смотрите выше. Если не верите, вот ссылка, проверьте сами.
Слева ставите gc Sprite, справа от него - sp Polygon, снизу под ними обоими - gc GC+SP. Ставите полигону хотя бы одну точку, дважды кликаете по gc GC+SP. Все. Последний раз редактировалось dump13; 06.01.2010 в 14:43. Причина: Битоя сццылко |
|
|||||
|
Modus ponens
|
>> Прекрасная, на мой взгляд, строчка
да... вот только там должно быть не логическое "и", а логическое "или"... только там весь код в таком же духе, типа круглое носим, квадратное катаем.. выражения внутри if() блока всегда приводятся к Boolean в AS3, поэтому писать if (someObject == null) бессмысленно т.как вы будете Boolean к Boolean кастовать в таком случае, переменные нельзя объявлять внутри if() / for() и т.п. блоков, использовать uint для итератора бессмысленно, если значений никогда не будет больше 0x7FFFFFFF (т.как он медленнее), проверять длинну массива в каждой итерации при том, что вы не изменяете ее - это тоже сильно... Ну и плюс ко всему всунуть значения констант вместо ссылок на них - тоже как бы... Что касается ошибки - поставьте не бета плеер (10.0.28, а лучше 10.0.32). EDIT: А хотя нет, с условием погарячился - прошу прощения. Я не понял сразу, что оно должно делать. Но все равно если делать по-нормальному, то _output должен был быть типа Graphics, ну или в самом худшем случае:
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 06.01.2010 в 15:31. |
|
|||||
|
Цитата:
__________________
Гоночка |
|
||||||
|
Регистрация: Apr 2009
Сообщений: 30
|
@wvxvw: ну, в том коде как раз и должно стоять логическое И: если объект - Спрайт, то он не будет Шейпом (|| выдаст false), если он Шейп, Спрайтом ему не быть (опять false), и тело выполняться не будет. Во всем остальном - спасибо за ценную инфу
, особенно по тормозности uint, я этого действительно не знал.Цитата:
Цитата:
![]() Цитата:
Цитата:
Цитата:
@Alex Lexcuk: ссылку поправил, так, на всякий случай. |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 1,724
|
wvxvw, почему нельзя переменные объявлять в for()?
то есть медленее чем ?? |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:15. |
|
|
« Предыдущая тема | Следующая тема » |
|
|