Показать сообщение отдельно
Старый 29.09.2017, 17:59
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код AS3:
//Создаём квадрат
var quad:Shape = new Shape();
quad.graphics.beginFill(0x000000);
quad.graphics.drawRect(0, 0, 32, 32);
addChild(quad);
 
var points:Array = [];
var min:int = 5, max:int = 10; //Сколько точек будет - случайное число между 5 и 10.
var numPoints:int = min + Math.round((max - min) * Math.random());
 
for(var i:int = 0; i < numPoints; i ++) points.push(new Point(Math.random()*(stage.stageWidth - quad.width), Math.random()*(stage.stageHeight-quad.height)));
 
var position:Number = 0; // позиция анимации
var speed:Number = 1; // пикселей в кадр
var distance = calculateDistance(points); // Общая длина пути
 
this.addEventListener(Event.ENTER_FRAME, update);
 
function calculateDistance(arr:Array):Number
{
	var distance = 0;
	for(var i:int = 1; i < arr.length; i++)
		distance += Point.distance(arr[i] , arr[i-1]);
	return distance;
}
 
function update(e:Event):void
{ 
	//Эта функция будет вызываться каждый кадр
	if(position > distance)
		return;
	var distanceSum:Number = 0;
 
    for(var i:int = 1; i < points.length; i++)
	{
		var currDist = Point.distance(points[i], points[i-1]);
		if(distanceSum + currDist > position) //Мы нашли промежуток, в котором находимся
		{
			var pos:Point = Point.interpolate(points[i], points[i-1], (position - distanceSum)/currDist);
			quad.x = pos.x; // quad меняем на кастомную фигуру
			quad.y = pos.y;
			break;
		}
		distanceSum += currDist;
	}
 
	position += speed;
}
__________________
There is no thing in this world that is not simple.