Показать сообщение отдельно
Старый 12.07.2004, 23:37
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 9  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
да, на этот раз полегчало, но даже если убрать один из обходов:
Код:
for (var i = 1; i<=col; i++) {
		for (var j = 1; j<=col; j++) {
			var sx, sy, mc, mc2;
			mc = field['p'+i+' '+j];
			mc.sx = mc.sy=0;
			if (mc.left) {
				mc2=mc.left
				sx = (mc._x-mc2._x+dist)/frict;
				sy = (mc._y-mc2._y)/frict;
				mc.sx += sx;
				mc2.sx -= sx;
				mc.sy += sy;
				mc2.sy -= sy;
			}
			if (mc.top) {
				mc2=mc.top
				sx = (mc._x-mc2._x)/frict;
				sy = (mc._y-mc2._y+dist)/frict;
				mc.sx += sx;
				mc2.sx -= sx;
				mc.sy += sy;
				mc2.sy -= sy;
			}
		}
	}
	// */
	for (var i = 1; i<=col; i++) {
		for (var j = 1; j<=col; j++) {
			mc = field['p'+i+' '+j];
			if (!mc.dragged) {
				mc._x -= mc.sx;
				mc._y -= mc.sy;
			}
		}
	}
	// */
	field.clear();
	field.lineStyle(1, 0, 100);
	for (var i = 1; i<=col; i++) {
		var mc = field['p'+i+' 1'];
		field.moveTo(mc._x, mc._y);
		while (mc) {
			field.lineTo(mc._x, mc._y);
			mc = mc.bottom;
		}
		var mc = field['p1 '+i];
		field.moveTo(mc._x, mc._y);
		while (mc) {
			field.lineTo(mc._x, mc._y);
			mc = mc.right;
		}
	}
то все равно все довольно коряво. сорри.
смысл в том, что все эти переходы по кадрам - вчерашний день. И не юзабельны и оч трудно читаются.
Я на твоем месте сделал бы класс, тогда все быстро встает на свои места.

Не совсем то, что тебе нужно, потому как вникать в детали поведения твоего исходника влом, (ну нетрезв.. прости ), но принцип, думаю, будет понятен:
Код:
#initclip
this.setPointClass = function() {
 var PointClass = function () {
  arguments.callee.addListener(this);
  if (PointClass._listeners[0] == this) {
   this.first = true;
  }
 };
 var tmp = PointClass.prototype=new MovieClip();
 var centerPoint = {_x:0, _y:0};
 tmp.onLoad = function() {
  if (this.first) {
   centerPoint._x = centerPoint._y=0;
   this.onMessage("onCalcCenter", centerPoint);
  }
  this.x=this._x-centerPoint._x, this.y=this._y-centerPoint._y;
  var d = Math.sqrt(this.x*this.x+this.y*this.y);
  this.fric = .1-d/1000;
 };
 Object.registerClass("point_mc", PointClass);
 AsBroadcaster.initialize(PointClass);
 tmp.onMessage = function() {
  PointClass.broadcastMessage.apply(PointClass, arguments);
 };
 tmp.onPress = function() {
  this.onEnterFrame = this.recalcCenterPoint;
  var p = this._parent, x, y;
  this.onMouseMove = function() {
   x=this._x=p._xmouse, y=this._y=p._ymouse;
   this.onMessage("onChangeTarget", x-this.x, y-this.y), updateAfterEvent();
  };
  this.onMouseUp = function() {
   this.recalcCenterPoint();
   this.onMessage("onChangeTarget", x+this.x, y+this.y);
   delete this.onMouseMove, delete this.onMouseUp, delete this.onEnterFrame;
  };
 };
 tmp.recalcCenterPoint = function() {
  centerPoint._x = centerPoint._y=0;
  this.onMessage("onCalcCenter", centerPoint);
 };
 tmp.onCalcCenter = function(pt) {
  var len = PointClass._listeners.length;
  pt._x += this._x/len, pt._y += this._y/len;
 };
 tmp.onChangeTarget = function(x, y) {
  this.xt=x-this.x, this.yt=y-this.y;
 };
 tmp.onEnterFrame = function() {
  var x = centerPoint._x+this.x, y = centerPoint._y+this.y;
  this._x += this.xst += (x-this._x)*this.fric, this._y += this.yst += (y-this._y)*this.fric;
  this.xst *= .8, this.yst *= .8;
  if (PointClass._listeners[0] == this) {
   recalcCenterPoint;
  }
 };
 var rm = MovieClip.prototype.removeMovieClip;
 tmp.removeMovieClip = function() {
  PointClass.removeListener(this), rm.apply(this);
 };
};
this.setPointClass();
delete this.setPointClass;
#endinitclip
т.е. каждая точка должна думать о себе.
эээ ... залинкуй point_mc
и накидай их на сцену несколько штук... не важно куда
а код пихни в этот point_mc.

всех благафф