PDA

Просмотр полной версии : Линия с переменной толщиной


Samuraix
06.03.2012, 01:39
Здравствуйте, форумчане.
Возник такой вопрос.
Когда рисую программно с помощью метода lineTo класса Graphics, линия получается, как на рисунке "а", мне же надо, чтобы линия к концу сужалась, как на рисунке "б". Много гуглил, но то ли я неправильно запрос составляю, то ли это невозможно. Хотелось бы узнать ваше драгоценное мнение и советы.

XoJlToH
06.03.2012, 01:44
все возможные варианты встроенных стилей тут http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#lineStyle()
остальное только рисовать кривыми самому.

in4core
06.03.2012, 01:49
невозможно. если только каким то образом трансформ матриц заюзать, и то врядли.
Но есть хак, дичайший правда

drawRect(0,0,длинна линии до уменьшения, ширина линии);
for(var i:int = 0 ; i < длинна линии во время уменьшения ; i++) drawRect( w, i , i , scaleFactor )

думаю смысл поняли, формула правда кривая помоему, но сами думаю сможете понять. Тоесть нужно рисовать каждый раз с уменшением в 1 px .

Есть еще вариант рисовать треугольник после , что быстрее и понятнее ))

Samuraix
06.03.2012, 02:05
Понятно.. Спасибо большое!

ChuwY
06.03.2012, 02:10
Думаю, можно поиграть с CapsStyle + JointStyle и толщиной линии.

wvxvw
06.03.2012, 19:26
Можно попробовать имитировать кисточку: т.е. рисовать параллельно несколько линий, а ближе к концу некоторые из линий заканчивать раньше, т.о. получится впечатление, как будто линии "плавно" заканчиваются.
Ну или как в Фотошопе - выбрать форму, и создавать линии дублируя эту форму вдоль пути.

alatar
06.03.2012, 20:34
Есть более (http://www.flashandmath.com/advanced/smoothdraw/) продвинутые (http://workflowflash.com/2984/custom-brushes-with-actionscript.php) варианты (http://en.nicoptere.net/?p=476).
Вечно я на них ссылки теряю. На том же принципе, что в последней ссылке даже выпустили интересный редактор (http://www.livebrush.com/).

MikroAcse
08.03.2012, 00:13
В чем прикол?
Разве нельзя сделать вот так?:
graphics.moveTo(10,50)
for(var a:uint=1; a<=10;a++){
graphics.lineStyle(a,0xFF0000);
graphics.lineTo(a*10,50)
}
У меня работает на ура. :)

alatar
08.03.2012, 00:28
Никто и не говорил, что этот способ не работает. Он используется еще со времен AS2. Но на кривых он смотрится плохо.