Показать сообщение отдельно
Старый 23.01.2007, 15:53
Annihilator вне форума Посмотреть профиль Отправить личное сообщение для Annihilator Найти все сообщения от Annihilator
  № 4  
Ответить с цитированием
Annihilator
 
Аватар для Annihilator

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
Ну вот у меня есть объект, который перемещается на фиксированые отрезки (по клеткам). У других юзеров на этой сцене должно синхронно отображаться его движение.
Код:
dynamic class Hero extends MovieClip {

var xmap:Number=null, ymap:Number=null, newpos:String="_", pos:String="front", act:String="stand";
var dirx:Number=0, diry:Number=0, allowmove:Boolean=false;
var user_id:Number=null, id:Number=null;
var mspeed:Number=10, scene_id=null;

function Hero() {
	super();
	this.allowmove=true;
	Key.addListener(this);
	onKeyDown=function(){
		if(this.allowmove){
			if (Key.isDown(Key.LEFT)){
				this.newpos="left";
				this.moveon();
			} else if (Key.isDown(Key.UP)){
				this.newpos="back";
				this.moveon();
			} else if (Key.isDown(Key.DOWN)){
				this.newpos="front";
				this.moveon();
			} else if (Key.isDown(Key.RIGHT)){
				this.newpos="right";
				this.moveon();
			}
		}
	}
}

public function moveon(){
	if(this.allowmove){
		this.onEnterFrame=function(){
			if((this.diry==0 && this._x*this.dirx<((this.xmap+this.dirx)*cellsize)*this.dirx) || (this.dirx==0 && this._y*this.diry<((this.ymap+this.diry)*cellsize)*this.diry)){
                                this.allowmove=false;
				this._x=this._x+(this.dirx*this.mspeed);
				this._y=this._y+(this.diry*this.mspeed);
			} else {
				this.mc.gotoAndStop(this.pos+"_stand");
				this.xmap=int(this._x/cellsize);
				this.ymap=int(this._y/cellsize);
				this.allowmove=true;
				delete this.onEnterFrame;
			}
		}
	}
}

}
Из-за того, что надо составить XML, переслать сообщение о начале движения через сокет-сервер и на удаленных клиентах его разобрать, набегают задержки; в результате на удаленных клиентах через две-три клетки объект зависает на месте, хотя на клиенте-хозяине продолжает двигаться. То есть происходит это самое наложение активаций одной и той же фунуции. Как быть?