Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Круги со случайными координатами центра (http://www.flasher.ru/forum/showthread.php?t=162991)

brodotsky 05.08.2011 17:44

Круги со случайными координатами центра
 
Нужно следующее:
в первом кадре появляется круг со случайными координатами центра;
во втором кадре добавляется ещё один такой же круг, тоже со случайными координатами;
в третьем кадре - ещё один и т.д.

Ясное дело, нужен ActionScript, иначе случайных координат не получить.
Программно круги не создаются, можно программно создавать только кривые и заливки (lineStyle, curveTo, beginFill, endFill).
Но в моём случае создавать столько кривых и заливок - верный способ всё повесить.

Может быть, можно программно создавать экземпляры символа?
Если можно, то как?

DaFive 05.08.2011 17:56

Взято отсюда: http://www.actionscript.org/forums/s...d.php3?t=30328
Код AS3:

MovieClip.prototype.drawCircle = function(center, rad, fillColor, fillAlpha, lineColor, lineAlpha, lineWidth) {
    trace(center[0]+", "+center[1]+", "+rad+", "+fillColor+", "+fillAlpha+", "+lineColor+", "+lineAlpha+", "+lineWidth);
    controlOffset = Math.sin(24*Math.PI/180)*rad;
    if (!fillColor) {
        // if fillColor is not specified black is assigned @ alpha 100%
        fillColor = 0x000000;
        fillAlpha = 100;
    }
    if (lineColor) {
        // if lineColor is specified a line is drawn, if not not
        // if lineWidth is not specified width is set @ 1 pixel
        // if lineAlpha is not specified alpha is set @ 100%
        lineStyle(lineWidth+1*(lineWidth == undefined), lineColor, lineAlpha+100*(lineAlpha == undefined));
    }
    beginFill(fillColor, fillAlpha);
    moveTo(center[0], center[1]-rad);
    curveTo(center[0]+controlOffset, center[1]-rad, center[0]+Math.cos(45*Math.PI/180)*rad, center[1]-Math.sin(45*Math.PI/180)*rad);
    curveTo(center[0]+rad, center[1]-controlOffset, center[0]+rad, center[1]);
    curveTo(center[0]+rad, center[1]+controlOffset, center[0]+Math.cos(45*Math.PI/180)*rad, center[1]+Math.sin(45*Math.PI/180)*rad);
    curveTo(center[0]+controlOffset, center[1]+rad, center[0], center[1]+rad);
    curveTo(center[0]-controlOffset, center[1]+rad, center[0]-Math.cos(45*Math.PI/180)*rad, center[1]+Math.sin(45*Math.PI/180)*rad);
    curveTo(center[0]-rad, center[1]+controlOffset, center[0]-rad, center[1]);
    curveTo(center[0]-rad, center[1]-controlOffset, center[0]-Math.cos(45*Math.PI/180)*rad, center[1]-Math.sin(45*Math.PI/180)*rad);
    curveTo(center[0]-controlOffset, center[1]-rad, center[0], center[1]-rad);
    endFill();
};
_root.drawCircle([150, 150], 100, 0xFF0000, 100, 0x0000FF, 100, 4);


brodotsky 05.08.2011 18:47

Спасибо - работает, и быстро работает!
В порядке издевательства я попросил Flash нарисовать 10 тысяч кругов со случайными координатами центра и случайным цветом:
Код AS1/AS2:

for (I=0;I<10000;I++)
  {center=[Stage.width*Math.random (),Stage.height*Math.random ()];
  rad=10;
  fillColor=(255*Math.random ())
            +((255*Math.random ())<<8)
            +((255*Math.random ())<<16);
  fillAlpha=100;
  lineColor=0;
  lineAlpha=0;
  lineWidth=0;
  _root.drawCircle (center,rad,
                    fillColor,fillAlpha,
                    lineColor,lineAlpha,lineWidth);}

Что вы думаете?
Flash MX зависает всего на 1,5 минуты (при этом четырежды предлагает прервать процесс).
И это на моём-то старом Селероне!

Интересно, что бы было, если бы автором Flash была Microsoft?

А всё-таки непонятно, почему ни Macromedia, ни Adobe не сделали во Flash встроенный метод drawCircle?

DaFive 05.08.2011 18:53

Встроенный метод drawCircle есть в AS 3.0, а во втором много чего нет. Бросьте вы его уже, читайте по АС 3.0.

i.o. 05.08.2011 19:05

Цитата:

Flash MX
....
А всё-таки непонятно, почему ни Macromedia, ни Adobe не сделали во Flash встроенный метод drawCircle?
Батюшки, этой IDE уже как 9 лет :)

brodotsky 05.08.2011 21:35

В AS3 есть drawCircle?
Значит, только Macromedia не додумалась.
А Adobe, съев Macromedia, сразу додумалась.

Похоже, в случае с Flash новее означает лучше
(это применимо далеко не ко всем программам).
Уговорили, перейду на AS3, только чуть-чуть позже.

Вообще, похоже, основное назначение раздела AS 1.0/2.0 - агитировать за AS 3.0.

i.o. 05.08.2011 21:54

AS 2.0 прекратил свое развитие сразу после выпуска AS3 в свет. А было это в 2005-2007, точно не помню.


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

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