Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Производительность флешки на разных компьютерах (http://www.flasher.ru/forum/showthread.php?t=154014)

romeoq 11.04.2011 15:16

Производительность флешки на разных компьютерах
 
Есть флешка - сетевая игра. Подключение через сокет. Все работает. Проблема заключается в том что у всех разные компы с разной производительностью, соответственно на одном компе персонаж может дойти из точки А в точку В быстрее или медленнее чем на другом.
Сейчас в алгоритме использую ENTER_FRAME. Пробовал Timer, и setInterval() - так на медленных компах еще сильнее тормозит. Что делать? Как привязаться к какому либо таймеру правильно? Может надо использовать какой либо внешний таймер? Например с сервера? Вобщем HELP!!!!

etc 11.04.2011 15:42

Привязывайтесь к абсолютному времени.

romeoq 11.04.2011 15:56

Можно подробнее
 
Цитата:

Сообщение от etc (Сообщение 988528)
Привязывайтесь к абсолютному времени.

Я так понимаю алгоритм будет выглядить следующим образом.
1. В определенные промежутки времени - запрос абсолютного времени
2. Вычисление времени которое прошло с последнего запроса
3. Исходя из вычисленного времени - передвигать объекты.

MAPUTO 11.04.2011 18:03

Зачем всем вычислять расстояние на которое надо всем перемемтиться?
Каждый вычисляет свою позицию сам и передает остальным где находится сейчас и что делает.
Если кто медленней - это его проблемы. Главное он будет знать где находятся остальные сейчас.

goodguy 11.04.2011 21:23

MAPUTO, тут похоже дело не совсем в этом. Одни и те же объекты будут на разных компах находиться в разных местах.
Jobe Makar в своей книжке Actionscript for Multiplayer Games and Virtual Worlds довольно подробно об этом писал

romeoq 11.04.2011 21:49

В этой проблеме действительно помогает привязка к абсолютному времени, только вот где его взять то? Timer и setInterval тормозят вместе с флешкой. Я сделал следующим образом:
Код AS3:

var tim:Timer = new Timer(40);
tim.start();
tim.addEventListener(TimerEvent.TIMER, setTimerToLocation);
//Установка таймера на локации
private function setTimerToLocation(e:TimerEvent = null):void
{
var timePassed:int = getTimer() - pastTimer;
pastTimer = getTimer();
setMovement();
}

Вот так вне зависимости от тормозов Timer, я вычисляю сколько времени прошло с предыдущего вызова функции движения, и уже это значение использую при передвижении. Если знаете как еще прикрепиться к абсолютному времени - говорите. Очень интересно как решали подобные проблемы.

etc 11.04.2011 22:08

Date#getTime()

Alexd21 15.04.2011 14:16

для решения этой проблемы есть готовые классы сторонних разработчиков
TweenMax - указываете координаты и время за которое объект должен туда добраться
время расчитываете сами, формула проста: время=расстояние/скорость


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

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