Показать сообщение отдельно
Старый 06.02.2008, 19:39
_Nickromant_ вне форума Посмотреть профиль Отправить личное сообщение для _Nickromant_ Найти все сообщения от _Nickromant_
  № 1  
Ответить с цитированием
_Nickromant_
 
Аватар для _Nickromant_

Регистрация: Jul 2007
Сообщений: 59
Thumbs up Груз на нитке.

Пытаюсь сделать такой эффект, некий груз предположим шарик висит на нитке (верхний край нитки зафиксирован), нитка и шарик ведут себя согласно всем законам гравитации, нитка не упругая, а фиксированной длинны. Шарик перетаскивается с помошью мыши. Порыскав на форуме, почитав физику за 9 класс и тд, добился следушего:
Код:
this.createEmptyMovieClip("line", 1);
this.line.init = function(num, len) {
	this.len = len;
	this.point = [];
	for (var i = 0; i<num+1; i++) {
		var t = new Object();
		t.x = 0+i*20;
		t.y = 200;
		this.point.push(t);
	}
};
this.line.onEnterFrame = function() {
	this.point[0].x = 100
	this.point[0].y = 100;
	this.gravity = 30;
	this.clear();
	this.lineStyle(0, 0, 100);
	this.moveTo(this.point[0].x, this.point[0].y);
	for (var i = 1, len = this.point.length; i<len; i++) {
		this.point[200].x = _root.g._x;
		this.point[200].y = _root.g._y;
		//[x1,y1] и [x2,y2] - координаты предыдущей и текущей точки соответственно
		var x1 = this.point[i-1].x, y1 = this.point[i-1].y;
		var x2 = this.point[i].x, y2 = this.point[i].y;
		// xd и yd - разница расстояний между точками
		var xd = x2-x1
		var yd = y2-y1+this.gravity;
		//dist - расстояние между точками
		var dist = Math.sqrt(xd*xd+yd*yd);
		//коррекция расстояния между точками до требуемого (через подобие)
		this.point[i].x = x1+(xd*this.len)/dist;
		this.point[i].y = y1+(yd*this.len)/dist;
		this.lineTo(this.point[i].x, this.point[i].y);
	}
};

this.line.init(200, 1);
не получается привязать шарик к концу нитки и заставить двигаться за курсором вместе с ниткой.
В общем подскажите, буду очень благодарен, если у кого есть материал на эту тему или собственное решение, прошу поделиться. Заранее благодарю.


Последний раз редактировалось _Nickromant_; 06.02.2008 в 20:18.