Рисование случайных кругов с использованием таймера в границах этапа в ActionScript - PullRequest
1 голос
/ 29 сентября 2010

Мне нужно использовать таймер для анимации с контролем времени, время рисования каждые 500 миллисекунд и рисование всего 20 кругов Мне также нужно убедиться, что круги полностью прорисованы за пределами сцены. Я пытался понять это навсегда, и это сводит меня с ума. Это код, с которым я играл, и я не могу понять это. ПОЖАЛУЙСТА, ПОМОГИТЕ КАК МОЖНО СКОРЕЕ !!!

import flash.events.TimerEvent;
import flash.utils.Timer;

// creates a new hundred-second Timer,  ticks every 250 milliseconds
var faster_minuteTimer:Timer = new Timer(250, 6);

// designates listeners for the interval and completion events
faster_minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
faster_minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

// starts the timer ticking
faster_minuteTimer.start();

function onTick(event:TimerEvent):void
{
// displays the tick count so far
trace("Count... " + event.target.currentCount);
}
function onTimerComplete(event:TimerEvent):void
{
trace("Play Done.");
}
var xCoord, yCoord, radius, Width, Height:uint; // declare variables

// not using any variables for the first one


xCoord = (Math.random()* stage.stageWidth); // somewhere on the stage
yCoord = (Math.random() * stage.stageHeight);
radius = Math.max(Math.random() * 85, 20); // radius between two numbers

graphics.beginFill(Math.random() * 0xffffff); // random color
graphics.drawCircle(xCoord,yCoord,radius); // coordinates x & y, radius
graphics.endFill(); // end color fill

Ответы [ 2 ]

2 голосов
/ 29 сентября 2010
import flash.display.Sprite;
import flash.events.TimerEvent;
import flash.utils.Timer;

var timer:Timer = new Timer(500, 20);
timer.addEventListener(TimerEvent.TIMER, timerTick);
timer.start();

function timerTick(e:TimerEvent):void {
    var newCircle:Sprite = new Sprite();
    var radius:Number = Math.max(Math.random() * 85, 20);
    var safeX:Number = ((stage.stageWidth - radius) - radius) * Math.random() + radius;
    var safeY:Number = ((stage.stageHeight - radius) - radius) * Math.random() + radius;
    newCircle.graphics.beginFill(Math.random() * 0xFFFFFF, 1);
    newCircle.graphics.drawCircle(0, 0, radius);
    newCircle.graphics.endFill();
    newCircle.x = safeX;
    newCircle.y = safeY;
    stage.addChild(newCircle);
}
  1. Настройка таймера
  2. Создание спрайта круга
  3. Создание случайного размера радиуса для параметров вашего вопроса
  4. Определение безопасного значения между макс (stage.stageWidth - радиус) и min (радиус)
  5. Нарисуйте круг в спрайте круга так, чтобы его центральная точка находилась в начале координат спрайта (0, 0)
  6. Поместите круг в егозаданные рандомизированные безопасные координаты
  7. Добавьте круг на сцену

Надеюсь, это поможет!

Проверено и работает:)

Редактировать: Здесьпример изображения распределения 2000 кругов: http://grab.by/6C1O

0 голосов
/ 29 сентября 2010

У меня нет удобного компилятора, но что-то вроде этого должно быть близко.

Глобальные переменные maxWidth, maxHeight, maxSize определяют наибольший круг, который будет соответствовать и где его можно нарисовать.

Функция drawOne () рисует круг случайного радиуса.Центр круга произвольно устанавливается равным как минимум радиусу круга от каждой стороны сцены.

Каждый тик таймера вызывает drawOne ().

import flash.events.TimerEvent; 
import flash.utils.Timer;

// Timer ticks 20 times 500 msec apart 
var circleTimer:Timer = new Timer(500, 20);

// designates listeners for the interval and completion events 
circleTimer.addEventListener(TimerEvent.TIMER, onTick);
circleTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

// starts the timer ticking 
circleTimer.start();

function onTick(event:TimerEvent):void 
{
   trace("Count... " + event.target.currentCount);
   drawOne();
} 

function onTimerComplete(event:TimerEvent):void 
{
  trace("Play Done.");
} 

// globals for size of stage, circles
var maxWidth:uint = stage.stageWidth;
var maxHeight:uint = stage.stageHeight;
var maxSize:uint = Math.min(maxWidth, maxHeight);
var minSize:uint = Math.min(20, Math.floor(maxSize/2));

function drawOne():void
{
 // to fit box, radius must be 1/2 shortest side or less
    var radius:uint = Math.max(Math.floor(Math.random() * maxSize/2), minSize);
 // center circle at least radius from any side
    var xCoord:uint = Math.random()*(maxWidth - 2*radius) + radius;
    var yCoord:uint = Math.random()*(maxHeight - 2*radius) + radius;

    graphics.beginFill(Math.random() * 0xffffff); // random color
    graphics.drawCircle(xCoord,yCoord,radius);
    graphics.endFill();
}

Надеюсь, что этопомогает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...