Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Нарисовать окружность (http://www.flasher.ru/forum/showthread.php?t=50841)

Верас Ольга 02.11.2003 12:50

Нарисовать окружность
 
Вложений: 1
Подскажите пожалуйста, что не так. Надо нарисовать окружность радиусом 40 с координатами 41 : 41.
(одна окружность там нарисована, нужна такая же, но большего диаметра)
И как задать ширину линии. И если можно, то как ее в случае небходимости залить( простая).

Штрек 02.11.2003 13:18

Окружность/точная/
_root.createEmptyMovieClip("name", 1);
with (_root.name) {
lineStyle(1, 0x00ffcc, 100);
var rad=40

moveTo(-rad, 0);
curveTo(-rad, -rad*Math.SIN(Math.PI/180 * 22.5), -rad*Math.COS(Math.PI/180 * 45), -rad*Math.SIN(Math.PI/180 * 45));
curveTo(-rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), -rad, 0, -rad);
curveTo(rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), -rad, rad*Math.COS(Math.PI/180 * 45), -rad*Math.SIN(Math.PI/180 * 45));
curveTo(rad, -rad*Math.SIN(Math.PI/180 * 22.5), rad, 0);
curveTo(rad, rad*Math.SIN(Math.PI/180 * 22.5), rad*Math.COS(Math.PI/180 * 45), rad*Math.SIN(Math.PI/180 * 45));
curveTo(rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), rad, 0, rad);
curveTo(-rad*(1-Math.SIN(Math.PI/180 * 22.5))/Math.sqrt(2), rad, -rad*Math.COS(Math.PI/180 * 45), rad*Math.SIN(Math.PI/180 * 45));
curveTo(-rad, rad*Math.SIN(Math.PI/180 * 22.5), -rad, 0);
}
_root.name._x=41
_root.name._y=41

Пушистик 02.11.2003 13:51

а мона еще по другому:

Код:

function drawCircle(name,div,color,linecolor,alpha,radius) {
    _root.createEmptyMovieClip("name", div);
    with (_root.name) {
        lineStyle(1, linecolor, 100);
        beginFill(color, alpha);
        moveTo(200, 200);
        curveTo(200, 180, 215, 165);
        curveTo(230, 150, 250, 150);
        curveTo(270, 150, 285, 165);
        curveTo(300, 180, 300, 200);
        curveTo(300, 220, 285, 235);
        curveTo(270, 250, 250, 250);
        curveTo(230, 250, 215, 235);
        curveTo(200, 220, 200, 200);
        endFill();
        _width=radius;
        _height=radius;
    }
}
drawCircle(name,5,0x000000,0xFFFF00,30,40);

правда нуна буит координаты приобразовать через :) globalToLocal();....

а еще вот так можно:

Код:

_root.createEmptyMovieClip("circle", div);
with (_root.circle) {
    lineStyle(100, 0x000000, 100);
    moveTo(200, 200);
    lineTo(202.5,202.5);
}

:D

Штрек 02.11.2003 14:31

Цитата:

Оригинал написал(а) Пушистик
Последний - лихой вариант :D

2K WebStudio 02.11.2003 14:37

Штрек...
Ну чё ты....
Школа... пятый класс...
r=10;
mc = _root.createEmptyMovieClip("okr", 1);
with (mc) {
beginFill(0x000000, 0);
lineStyle(1, 0x000000, 100);
moveTo(-1*_root.r, 0);
for (x=_root.r*-1; x<=_root.r; x++) {
y = Math.sqrt(Math.pow(_root.r,2)-Math.pow(x, 2));
lineTo(x, y);
}
for (x=_root.r; x>=-1*_root.r; x--) {
y = -1*Math.sqrt(Math.pow(_root.r,2)-Math.pow(x, 2));
lineTo(x, y);
}
endFill();
}
mc.onPress=function(){
startDrag(this,false);
onMouseUp=function(){
stopDrag();
}
}

Вот!
радиус - первая же переменная ( r )!
радуйтесь жизни...
А ещё расскажите нам, какой из способов вы предпочли, спасибо!

Techmaker 02.11.2003 14:41

2 2K WebStudio
двоешник :)
а вот это будет корявый угловатый тормазной вариант :)

Код:

MovieClip.prototype.drawArc=function(x,y,radius,arc,startAngle,yRadius){
if(yRadius==undefined){yRadius=radius}
if(Math.abs(arc)>360){arc=360}
segs=Math.ceil(Math.abs(arc)/45)
segAngle=arc/segs
theta=-(segAngle/180)*Math.PI
angle=-(startAngle/180)*Math.PI
ax=x-Math.cos(angle)*radius
ay=y-Math.sin(angle)*yRadius
if(segs>0){for(i=0;i<segs;i++){
angle+=theta
angleMid=angle-(theta/2)
bx=ax+Math.cos(angle)*radius
by=ay+Math.sin(angle)*yRadius
cx=ax+Math.cos(angleMid)*(radius/Math.cos(theta/2))
cy=ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2))
this.curveTo(cx,cy,bx,by)}}}

with(this.createEmptyMovieClip("circle",1)){my_radius=Math.sqrt(Stage.width*Stage.width+Stage.height*Stage.height)/5;lineStyle(5,0xFF0000,100);beginFill(0x000000,50);moveTo(My_radius,0);drawArc(my_radius,0,my_radius,360,0);_x=Stage.width/2;_y=Stage.height/2}


Techmaker 02.11.2003 14:54

2 2K WebStudio
а вот это будет корявый угловатый тормазной вариант :)
двоешник :)

2 Верас Ольга
Код:

MovieClip.prototype.drawArc=function(x,y,radius,arc,startAngle,yRadius){
if(yRadius==undefined){yRadius=radius}
if(Math.abs(arc)>360){arc=360}
segs=Math.ceil(Math.abs(arc)/45)
segAngle=arc/segs
theta=-(segAngle/180)*Math.PI
angle=-(startAngle/180)*Math.PI
ax=x-Math.cos(angle)*radius
ay=y-Math.sin(angle)*yRadius
if(segs>0){for(i=0;i<segs;i++){
angle+=theta
angleMid=angle-(theta/2)
bx=ax+Math.cos(angle)*radius
by=ay+Math.sin(angle)*yRadius
cx=ax+Math.cos(angleMid)*(radius/Math.cos(theta/2))
cy=ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2))
this.curveTo(cx,cy,bx,by)}}}

with(this.createEmptyMovieClip("circle",1)){
my_radius=Math.sqrt(Stage.width*Stage.width+Stage.height*Stage.height)/5
lineStyle(5,0xFF0000,100)
beginFill(0x000000,50)
moveTo(My_radius,0)
drawArc(my_radius,0,my_radius,360,0)
_x=Stage.width/2;_y=Stage.height/2}

извеняюсь за второй топ :)

2K WebStudio 02.11.2003 14:59

Лучше всего вот так:
lineStyle( 0, 0x0000FF, 100 );
beginFill( 0xFF0000 );
moveTo( 500, 500 );
curveTo( 600, 500, 600, 400 );
curveTo( 600, 300, 500, 300 );
curveTo( 400, 300, 400, 400 );
curveTo( 400, 500, 500, 500 );
endFill();
А потом менять размер мувика!
Там было лево т.к. для маленьких окружностей шаг был слишком велик!
Так его можно уменьшить!Только для маленьких...
Для боьших - не надо... повиснуть может во всяком случае подгрузит комп...

Techmaker 02.11.2003 15:09

Цитата:

Оригинал написал(а) 2K WebStudio
Лучше всего вот так:
lineStyle( 0, 0x0000FF, 100 );
beginFill( 0xFF0000 );
moveTo( 500, 500 );
curveTo( 600, 500, 600, 400 );
curveTo( 600, 300, 500, 300 );
curveTo( 400, 300, 400, 400 );
curveTo( 400, 500, 500, 500 );
endFill();

а разве это окружность? :)

2K WebStudio 02.11.2003 15:36

Ну да...
Это из хелпа...

Штрек 02.11.2003 15:42

Чего за хрень.
У меня поделено на 8 секторов и ВПЕРЁД.
Супер окружность получается. :D
Вот ещё вариант с точн. 3зн.
function circle_sh(name,rad,x_poz,y_poz){
this.createEmptyMovieClip("name", 1);
with (this.name) {
lineStyle(3, 0x00ffcc, 100);


moveTo(-rad, 0);
curveTo(-rad, -rad*0.383, -rad*0.707, -rad*0.707);
curveTo(-rad*0.437, -rad, 0, -rad);
curveTo(rad*0.437, -rad, rad*0.707, -rad*0.707);
curveTo(rad, -rad*0.383, rad, 0);
curveTo(rad, rad*0.383, rad*0.707, rad*0.707);
curveTo(rad*0.437, rad, 0, rad);
curveTo(-rad*0.437, rad, -rad*0.707, rad*0.707);
curveTo(-rad, rad*0.383, -rad, 0);
}
this.name._x=x_poz
this.name._y=y_poz
}
circle_sh(circle1,100,200,200)

старина смерть 02.11.2003 15:57

Что то вы товарищи извращаетесь. Есть отличный вариант от меня родимого:)
http://www.flash.plux.ru/board/viewtopic.php?t=109

Там не только окружность, но и эллипс, квадрат, диги и прочая дрянь.

старина смерть 02.11.2003 15:59

Цитата:

Оригинал написал(а) Штрек
Чего за хрень.
У меня поделено на 8 секторов и ВПЕРЁД....

Ну ты извратился :)

старина смерть 02.11.2003 16:00

Цитата:

Оригинал написал(а) Techmaker

а разве это окружность? :)

А это не окружность - это псевдоовал :)

Верас Ольга 02.11.2003 20:49

Всем спасибо
 
Всем большое спасибо. Попробую что-нибудь из перечисленного. Но все же что не так в том варианте, что я сбросила - FF.zip Что в нем поправить?

Верас Ольга 03.11.2003 10:12

ну воспользовалась любезным предложением "Старины смерти". И каково энтот самый код не рисует окружность?

MovieClip.prototype.circle = function(x, y, r) {
circleColor = (255);
_root.prototype.circleStyle(10, circleColor, 100);
_x = 100;
_y = 100;
_r = 50;
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};

Techmaker 03.11.2003 12:42

2Верас Ольга
 
Цитата:

Оригинал написал(а) Верас Ольга
MovieClip.prototype.circle = function(x, y, r) {
circleColor = (255);
_root.prototype.circleStyle(10, circleColor, 100);
_x = 100;
_y = 100;
_r = 50;
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};

во первых это была только функция рисования, а во вторых ты неправильно её использовала :)
вот пример использования:
Код:

// функция рисования окружности nuran'а
MovieClip.prototype.circle = function(x, y, r) {
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};

// создадим мувик и нарисуем в нём окружность с помощью этой функии
this.createEmptyMovieClip("circle1",1)
//скажем созданному мувику
with(circle1){
// стиль линии (толщина 5, цвет чёрный, прозрачность 0%)
lineStyle(5,0x000000,100)
// начало заливки (цвет чёрный, прозрачность 50%)
beginFill(0x000000,50)
// запускаем функцию рисования окружности (положение по оси X - 0 (по центру мува),  положение по оси Y - 0 (по центру мува), радиус 50)
circle(0,0,50)
// конец заливки
endFill()
// распологаем мув по центру флэшки чтобы было видно эту окружность
_x=Stage.width/2
_y=Stage.height/2
}

вот так :) ;)

Верас Ольга 03.11.2003 19:54

Большое спасибо - это рисует. А задать сразу две окружности одним кодом сложно? Чтобы не ваять лишнее. Две окружности - одна вписана в другую - с общим центром ( без заливки).
Ну и уж последняя наглость - вращение какого -нибудь обьекта (скажем маленького кружка) по окружности?

Штрек 04.11.2003 00:30

Цитата:

Оригинал написал(а) Верас Ольга
А задать сразу две окружности одним кодом сложно? Чтобы не ваять лишнее. Две окружности - одна вписана в другую - с общим центром ( без заливки).

Ну два раза вызови функцию.
Шевели мозгами - полезно для общего развития.

Techmaker 04.11.2003 01:50

Цитата:

Оригинал написал(а) Верас Ольга
Большое спасибо - это рисует. А задать сразу две окружности одним кодом сложно? Чтобы не ваять лишнее. Две окружности - одна вписана в другую - с общим центром ( без заливки).
Ответ: не сложно, со временем научишся
--------------------------------------------------------------------------------
MovieClip.prototype.circle = function(x, y, r) {
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};

this.createEmptyMovieClip("circle1",1)
with(circle1){
lineStyle(5,0x000000,100)
circle(0,0,50)
_x=Stage.width/2
_y=Stage.height/2
}

this.createEmptyMovieClip("circle2",2)
with(circle1){
lineStyle(5,0x000000,100)
circle(0,0,20)
_x=Stage.width/2
_y=Stage.height/2
}
--------------------------------------------------------------------------------

:)

Штрек 04.11.2003 02:16

Можно просто продублировать circle1
и отскалить.

Techmaker 04.11.2003 02:18

Цитата:

Оригинал написал(а) Techmaker
this.createEmptyMovieClip("circle2",2)
with(circle1 ){
lineStyle(5,0x000000,100)
circle(0,0,20)
_x=Stage.width/2
_y=Stage.height/2
}

только что заметил(засыпаю уже, а ещё столько работы) :) замени на:
--------------------------------------------------------------------------------
this.createEmptyMovieClip("circle2",2)
with(circle2 ){
lineStyle(5,0x000000,100)
circle(0,0,20)
_x=Stage.width/2
_y=Stage.height/2
}
--------------------------------------------------------------------------------



Цитата:

Оригинал написал(а) Верас Ольга
Ну и уж последняя наглость - вращение какого -нибудь обьекта (скажем маленького кружка) по окружности?
ну а это уже из области триганометрии :)
--------------------------------------------------------------------------------
MovieClip.prototype.circle = function(x, y, r) {
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};

this.createEmptyMovieClip("circle1",1)
with(circle1){
lineStyle(5,0x000000,100)
circle(0,0,50)
_x=Stage.width/2
_y=Stage.height/2
}

this.createEmptyMovieClip("circle2",2)
with(circle2){
lineStyle(5,0x000000,100)
circle(0,0,10)
_x=Stage.width/2
_y=Stage.height/2
}

// создаём функцию цыкла
this.onEnterFrame=function(){
// обозначим радиус около которого вращается наша окружность
this.radius1=50
// обозначим скорость движения(вращения) окружности (градус/на кадр)
this.speed=2
// обозначим радианы
this.rad=Math.PI/180
// движение и расчёт
this.stepAngel+=this.speed
/* приравниваем расчитанные координаты к малой
//окружности с учётом расположения по центру */
this.circle2._x=Math.cos(this.stepAngel*this.rad)*this.radius1+Stage.width/2
this.circle2._y=Math.sin(this.stepAngel*this.rad)*this.radius1+Stage.height/2
}
--------------------------------------------------------------------------------

Techmaker 04.11.2003 02:22

Цитата:

Оригинал написал(а) Штрек
Можно просто продублировать circle1
и отскалить.

Проще создать второй клип, а не изменять дупликат :)

Штрек 04.11.2003 02:54

Цитата:

Оригинал написал(а) Techmaker

Проще создать второй клип, а не изменять дупликат :)

Ну конечно??
или
duplicateMovieClip("circle1", "circle2", 2);
circle2._xscale=80;
circle2._yscale=80;
или
this.createEmptyMovieClip("circle2",2)
with(circle2 ){
lineStyle(5,0x000000,100)
circle(0,0,20)
_x=Stage.width/2
_y=Stage.height/2
}
Думаю первый вариант попроще будет :D

Techmaker 04.11.2003 03:05

толщина линии как видишь меняется с размером, а я люблю всё чётко :) :D

Штрек 04.11.2003 03:24

Ну если толщина :D
Тогда просто

this.createEmptyMovieClip("circle1", 1);
with (circle1) {
lineStyle(5, 0x000000, 100);
circle(0, 0, 50);
circle(0, 0, 20);
_x = Stage.width/2;
_y = Stage.height/2;
}

И ничего больше /кроме пропотипа/

Techmaker 04.11.2003 03:31

2Штрек
может тогда проще рисовать прямо в руте без всяких мувиклипов? :)

Штрек 04.11.2003 04:06

РУТ - ЭТО СЕРЬЁЗНО !!! :D

старина смерть 04.11.2003 08:33

с приветом из ада
 
Цитата:

Оригинал написал(а) Techmaker
толщина линии как видишь меняется с размером, а я люблю всё чётко :) :D
А если толщину 0 задать? Тогда она с размером не меняется :)
Какой я умный, оказывается...

Верас Ольга 04.11.2003 11:13

Всем большое спасибо. Ну Вы мужики и накрутили. Без ящика не разобраться. А всего лишь надо - нарисовать 2 окружности разного диаметра. И имитировать их вращение. Мне показалось, что проще всего вращать по этим окружностям какой-нибудь мелкий обьект - дабы он перекрывал сектор окружности - и этим имитировал их визуальное вращение (в разные стороны). И мне не очень ясно с толщиной окружности. Она что, привязана к ее радиусу?
____________________________________________
Имеется в виду проще, чем стряпать какую-то разорваную окружность да еще ее и вращать. Хотя может я и не права -Вам виднее - жираф большой .....

Верас Ольга 04.11.2003 11:16

Имеется в виду проще, чем стряпать какую-то разорваную окружность да еще ее и вращать. Хотя может я и не права -Вам виднее - жираф большой .....

старина смерть 04.11.2003 11:20

коротко и ясно - только так!
 
Цитата:

Оригинал написал(а) Верас Ольга
Ну и уж последняя наглость - вращение какого -нибудь обьекта (скажем маленького кружка) по окружности?
Я сейчас vector2d объект пишу. С помощью него можно будет любые 2d движения делать. Программно. Даже туториал пишу. Скоро на свой сайт выложу. И редизайн у меня скоро гигантский. В том числе и форума. Форум под свой сайт заточу и интегрирую его в сайт. :)

старина смерть 04.11.2003 11:24

Цитата:

Оригинал написал(а) Techmaker

this.createEmptyMovieClip("circle2",2)
with(circle1){
lineStyle(5,0x000000,100)
circle(0,0,20)
_x=Stage.width/2
_y=Stage.height/2
}
--------------------------------------------------------------------------------

:)

А знаете ли вы тов. Алексей, что пользоваться with категорически воспрещается программистам с прямыми руками :)

Нужно только прямые ссылки. Хоть это и увеличивает размер, зато быстрее. Это 100%. Можешь не сомневаться.

старина смерть 04.11.2003 11:27

бейте меня - бейте. Я вампир и становлюсь сильнее :)
 
Цитата:

Оригинал написал(а) Верас Ольга
И мне не очень ясно с толщиной окружности. Она что, привязана к ее радиусу?

Толщина окружности? Что-то вы ОлЬга шутите. Может толщина линии? Она не привязана к окружности ни каким образом.

Techmaker 04.11.2003 12:43

Re: с приветом из ада
 
Цитата:

Оригинал написал(а) старина смерть

А если толщину 0 задать? Тогда она с размером не меняется :)
Какой я умный, оказывается...

я знаю :) , но это только в случае с нулём :)
Цитата:

Оригинал написал(а) старина смерть
Нужно только прямые ссылки. Хоть это и увеличивает размер, зато быстрее. Это 100%. Можешь не сомневаться.
и это я знаю :) , но лень меня переборола :)

MerlinTwi 05.11.2003 05:38

> А всего лишь надо - нарисовать 2 окружности разного
> диаметра. И имитировать их вращение.
Вращать окружность? а смысл?

> Мне показалось, что проще всего вращать по этим
> окружностям какой-нибудь мелкий обьект - дабы он
> перекрывал сектор окружности - и этим имитировал их
> визуальное вращение (в разные стороны).
> Имеется в виду проще, чем стряпать какую-то разорваную
> окружность да еще ее и вращать.
Если речь идет о вращении сектора, то второе как раз проще, например так:
Код:

// функция рисования окружности nuran'а
MovieClip.prototype.circle = function(x, y, r) {
        var mas = new Array();
        var step = 16;
        var angle = 360/step;
        var rad = Math.PI/180;
        for (var i = 0; i<=step; i++) {
                mas[i] = new Object();
                mas[i].x = Math.cos(angle*rad*i)*r+x;
                mas[i].y = Math.sin(angle*rad*i)*r+y;
        }
        this.moveTo(mas[0].x, mas[0].y);
        for (var i = 0; i<step-2; i += 2) { // step-2 чтобы из окружности получился сектор
                var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
                var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
                this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
        }
};

// Центр окружностей
var CircleX = 100;
var CircleY = 100;
// Радиус первой и второй
var CircleR1 = 50;
var CircleR2 = 30;

// рисуем первую
this.createEmptyMovieClip("circle1",1)
with(circle1){
        // стиль линии (толщина 1, цвет чёрный, прозрачность 0%)
        lineStyle(1,0x000000,100)
        // запускаем функцию рисования окружности
        circle(0,0,CircleR1)
        // распологаем мув в указанные X,Y
        _x=CircleX
        _y=CircleY
}
// делаем вращение
this.circle1.onEnterFrame = function() {
        this._rotation += 2;
}

// Рисуем вторую
this.createEmptyMovieClip("circle2",2)
with(circle2){
        // стиль линии (толщина 2, цвет красный, прозрачность 0%)
        lineStyle(2,0xFF0000,100)
        // запускаем функцию рисования окружности
        circle(0,0,CircleR2)
        // распологаем мув в указанные X,Y
        _x=CircleX
        _y=CircleY
}

// делаем вращение
this.circle2.onEnterFrame = function() {
        this._rotation -= 4;
}


Верас Ольга 05.11.2003 13:18

ЩАс Бум Пробовать

Верас Ольга 05.11.2003 18:46

Все работает замечательно. Но хотелось бы задать еще один дурацкий вопрос: Как регулировать величину сектора разрыва
на окружности? .
И все-таки еще: вращение MovieClip по заданному радиусу или эллипсоиду.
И вообще какого эти орлы из Macromedia не могли сделать транслятор кода на базовые функции рисования. Ведь один черт все эти фунции реализовали в процессе написания кода fLASH. Что не могли написать конвертор в AS. Сильно бы облегчили жизнь пользователям (особенно начинающим).
Ведь все-таки графический редактор у них уж очень убогий.
Шаг сетки не задаш какой нужен. И море всего остального. Содрали бы реализацию графических функции у ACAD или PCAD.

васёк 05.11.2003 23:02

хе-хе
 
надо взять циркуль во флеш и нариовать круг !
тебе это зачем ?

старина смерть 06.11.2003 09:19

i'm the best flash developerzzzzzz
 
MovieClip.prototype.circle = function(x, y, r) {
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};

_root.onLoad = function() {
fscommand("allowscale", false);
cnx = Stage.width/2;
cny = Stage.height/2;
// precalculations
rad = Math.PI/180;
radius = 100;
dot_radius = 20;
preRadius = radius-dot_radius;
preRad = 180*rad;
// axises
_root.createEmptyMovieClip("back", 1);
back.lineStyle(0, 0xFF0000, 100);
back.moveTo(cnx, cny-cny/1.1);
back.lineTo(cnx, cny+cny/1.1);
back.lineStyle(0, 0x00FF00, 100);
back.moveTo(cnx-cnx/1.1, cny);
back.lineTo(cnx+cnx/1.1, cny);
// back circle
_root.createEmptyMovieClip("bg", 2);
bg.lineStyle(0, 0xFFFFFF, 100);
bg.circle(0, 0, 100);
bg._x = cnx;
bg._y = cny;
// dot
_root.createEmptyMovieClip("dot", 3);
dot.beginFill(0x0000FF, 100);
dot.circle(0, 0, dot_radius);
dot._x = cnx;
dot._y = cny;
dot.endFill();
// text
_root.createTextField("text", 4, cnx+5, cny, 300, 20);
format = new TextFormat();
format.color = 0xFFFFFF;
format.font = "Verdana";
format.size = 14;
text.text = "click and move your mouse";
text.setTextFormat(format);
};

// ######################################################
// -- © 2003 Grigory A. Ryabov.
// -- http://www.flash.plux.ru
// -- Techmaker: Aleksey Shreider 8=)
// ######################################################

_root.onMouseDown = function() {
start = 1;
};

_root.onMouseUp = function() {
start = 0;
};

_root.onEnterFrame = function() {
var dx = cnx-_xmouse;
var dy = cny-_ymouse;
if (Math.sqrt(dx*dx+dy*dy)<=preRadius) {
dot._x = _xmouse;
dot._y = _ymouse;
} else {
angle = Math.atan2(dy, dx)-preRad;
dot._x = Math.cos(angle)*preRadius+cnx;
dot._y = Math.sin(angle)*preRadius+cny;
}
if (start) {
var dx = cnx-_xmouse;
var dy = cny-_ymouse;
radius = Math.sqrt(dx*dx+dy*dy);
preRadius = radius-dot_radius;
bg._xscale = bg._yscale=radius;
}
};


Часовой пояс GMT +4, время: 16:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.