![]() |
|
||||||||||
|
|||||
|
[+1.3 20.03.09]
Регистрация: Oct 2007
Сообщений: 35
|
Как с помощью языка ActionScript 3.0 нарисовать кольцо? Да так чтобы можно было его использовать как маска для другого графического объекта.
|
|
|||||
|
ну как нибудь так?
|
|
|||||
|
Как вариант, можно использовать битмап и blendMode.ALPHA или blendMode.Erase. Один недостаток - придется делать такую маску на весь экран или больше чем границы маскируемого объекта.
Ну или отрисовать полукольцо вектором, и отразить копию. Короче способов много. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Буквально на днях столкнулся с этой же задачей. Манипуляции с блендом вроде дали нужный результат, но в итоге, при понижении качества отрисовки (качество в ролике меняется динамически при анимации), по краям маски появляется ореол.
В результате, я просто стал заливать кольцо битмапом. |
|
|||||
|
Регистрация: May 2006
Сообщений: 36
|
Так еще можно, только оптимизировать надо:
public function drawSegment (_from:Number, _angle:Number, _length:int, _resolution:int):Sprite { var sgm:Sprite = new Sprite(); var quality:Number = _angle/_resolution; var p:Object; var i:int; if (quality > 20) { _resolution = _angle/10; quality = _angle/this.resolution; } this.graphics.beginFill(0); for (i = 0; i <= _resolution; i++) { p = radialToCartesian (_length, quality*i + _from); this.graphics.lineTo(p.X, p.Y); } this.graphics.lineTo(0, 0); this.graphics.endFill(); return sgm; } public function radialToCartesian (r:Number, a:Number):Object { var X:Number = r*this.cosD(a); var Y:Number = r*this.sinD(a); return {X:X, Y:Y}; } public function sinD (angle:Number):Number { return Math.sin(this.degreesToRadian(angle)); } public function cosD (angle:Number):Number { return Math.cos(this.degreesToRadian(angle)); } public function degreesToRadian (angle:Number):Number { return angle * (Math.PI/180); } Последний раз редактировалось Irradiance; 13.07.2009 в 13:48. |
|
|||||
|
С вашего так сказать, позволения
Кстати, прикольная вещь... function drawSegment(_from:Number, _angle:Number, _length:int, _resolution:int,_width:int):Sprite { var sgm:Sprite = new Sprite(); var quality:Number=_angle/_resolution; var p:Object; var i:int; if (quality>20) { _resolution=_angle/10; quality=_angle/this.resolution; } sgm.graphics.beginFill(0); for (i = 0; i <= _resolution; i++) { p=radialToCartesian(_length,quality*i+_from); sgm.graphics.lineTo(p.X, p.Y); } for (var j = 0; j <= _resolution; j++) { var p1=radialToCartesian(_length-_width,quality*j+_from); sgm.graphics.lineTo(p1.X, p1.Y); } sgm.graphics.lineTo(0, 0); sgm.graphics.endFill(); return sgm; } function radialToCartesian(r:Number, a:Number):Object { var X:Number=r*this.cosD(a); var Y:Number=r*this.sinD(a); return {X:X, Y:Y}; } function sinD(angle:Number):Number { return Math.sin(this.degreesToRadian(angle)); } function cosD(angle:Number):Number { return Math.cos(this.degreesToRadian(angle)); } function degreesToRadian(angle:Number):Number { return angle * (Math.PI/180); } var sv:Sprite=drawSegment(0,360,100,100,30); sv.x=200 sv.y=200 addChild(sv); |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:13. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| ring , кольцо |
|
|