Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   что происходит при множественном вызове метода? (http://www.flasher.ru/forum/showthread.php?t=91037)

Annihilator 23.01.2007 15:04

что происходит при множественном вызове метода?
 
Что происходит, если вызванный метод объекта еще не закончил работу, а при этом приходит новый вызов его же? Он запускается паралельно или ждет окончания предыдущего, или вообще игнорируется? Что происходит со свойствами, которые этот метод в процессе своей работы изменяет?

Futs 23.01.2007 15:17

Все будет зависеть от того, что ты делаешь или глюки или заменяет предыдущий.

CorC 23.01.2007 15:26

он запускается параллельно, и параллельно будут все переменные менять, если они конечно не локальные...

Annihilator 23.01.2007 15:53

Ну вот у меня есть объект, который перемещается на фиксированые отрезки (по клеткам). У других юзеров на этой сцене должно синхронно отображаться его движение.
Код:

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, переслать сообщение о начале движения через сокет-сервер и на удаленных клиентах его разобрать, набегают задержки; в результате на удаленных клиентах через две-три клетки объект зависает на месте, хотя на клиенте-хозяине продолжает двигаться. То есть происходит это самое наложение активаций одной и той же фунуции. Как быть?

Futs 23.01.2007 15:53

Код:

mc.onPress = function(){
this.onEnterFrame = function(){
this._x++
}
}

Где паралельность, будет переопределяться

Futs 23.01.2007 16:03

Я так думаю: нужно определять закончил-ли движение объект у клиента и тогда, если получены новые данные, двигать объект опять. А по идее время должно быть на загрузку новых данных. Оттуда и задержки.

Annihilator 23.01.2007 16:34

у меня свойство "allowmove" и определяет это. Но при частом вызове функции, оно все равно не очень-то помогает.


Часовой пояс GMT +4, время: 16:42.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.