Вниз  Java-программирование (1-ые посты)
- 25.01.2014 / 12:56
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, с чего бы это?
__________________
 let live
- 25.01.2014 / 13:03
DominaN
  Пользователь

DominaN 
Сейчас: Offline
aNNiMON, да вот хотя бы из-за разницы координат. На одном клиенте пакет с координатами дошел, а на другом - нет. Одно дело если это всякие пропсы или рагдолы, а другое - если целишься со снайперки в хэд, а попадаешь в стену метра за полтора от прицела. Все такие вещи должны считаться только сервером.
- 25.01.2014 / 13:08
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, ты предлагаешь каждый раз ждать ответа от сервера с набором координат? Даже при среднем пинге играть уже станет невозможно, особенно если просчётов серверу приходится много делать.
__________________
 let live
- 25.01.2014 / 13:13
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, вспомни Counter Strike. Там от клиента постоянно передаются только координаты и дополнительные параметры. Сервер в ответ отправляет те же самые координаты и параметры, только уже всех игроков. Если связь с сервером теряется (но не разорвана), то ты спокойно бегаешь по карте, а противники просто стоят. Если бы всё рассчитывал сервер, ты и пошевелиться бы не смог.
__________________
 let live
- 25.01.2014 / 13:24
DominaN
  Пользователь

DominaN 
Сейчас: Offline
aNNiMON, Но расчет физики все равно происходит на сервере, просто несколько в другом месте:

MOVETYPE_WALK.
В обычном квейке вызывается прямо из
основной функции SV_Physics, в QuakeWorld,
Quake2, Half-Life вызывается из ответных
пакетов клиента, содержащих информацию о
перемещении игрока (т.н. usercmd_t), а в
Quake3 даже есть возможно выбирать откуда
вызывать физику игрока - из общего цикла
или из функции приёма пакетов (квар
g_synchronousClients 0\1). К слову сказать
вызов физики игрока из функции приёма
клиентских пакетов, кроме очевидных
преимуществ (более высокая скорость
реакции, более точная обработка физики) таит
в себе и пару неприятностей. О первой из них
знают все модемщики - чем реже приходят от
них пакеты к серверу, тем реже вызывается
физика игрока и никакой unlag и никакой
предиктинг не в состоянии сгладить эффект от
того преимущества, которое получают люди,
играющие на более толстом канале. А вот
вторая нехорошая проблема - то самое
пресловутое застревание игрока в лифтах на
подъеме\спуске, связанное с частичной
рассинхронизацией движения лифта и игрока.

- 25.01.2014 / 14:38
Naik
  Пользователь

Naik 
Сейчас: Offline
DominaN (25.01.2014/12:53)aNNiMON, и все клиенты будут считать по-разному :gg:я тоже думал над этим. Думаю обеспечить одинаковую физику на разных устройствах можно максимум в пошаговых играх с простой физикой.
- 25.01.2014 / 17:04
UserSuperPupsik
  Пользователь

UserSuperPupsik 
Сейчас: Offline
Ребят, Всем Здравствуйте!
Может кто-нибудь поделится готовым проектом.
У меня простая проблема.
Нужно создать Несколько классов MyCanvas1, MyCanvas1 ... MyCanvasN.
Привязать к ним Listener кнопок, чтобы
Нажал кнопку "1" включился Экран MyCanvas1
Нажал кнопку "2" включился Экран MyCanvas2
и т.д.
И ещё! Можно ли в каждом классе сделать, чтобы при нажатии на кнопку "8" сработал метод repaint()?
Может кто-нибудь поделится готовым проектом?
Буду благодарен!!! :)

Изменено UserSuperPupsik (25.01 / 17:05) (всего 1 раз)
- 25.01.2014 / 17:20
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Для этого можно создать абстрактный класс, чтобы в каждый канвас не лепить этот код.
То, что будет в коде абстрактного класса, то будет и во всех канвасах, наследуемых от него.
  1. public abstract class AbstractCanvas extends Canvas {
  2.  
  3.     public void keyPressed(int key) {
  4.         if (key ==  KEY_NUM1) display.setCurrent(new MyCanvas1());
  5.         if (key ==  KEY_NUM2) display.setCurrent(new MyCanvas2());
  6.         //...
  7.         if (key ==  KEY_NUM9) display.setCurrent(new MyCanvas9());
  8.         if (key == KEY_NUM8) repaint();
  9.     }
  10. }
  11.  
  12. // Теперь все классы надо наследовать не от Canvas, а от AbstractCanvas.
  13. public class MyCanvas1 extends AbstractCanvas {
  14.  
  15.     public void keyPressed(int key) {
  16.         // Если нужна какая-то дополнительная логика, то пишем:
  17.         super.keyPressed(key);
  18.     }
  19. }

__________________
 let live

Изменено aNNiMON (25.01 / 17:29) (всего 1 раз)
- 25.01.2014 / 17:27
DominaN
  Пользователь

DominaN 
Сейчас: Offline
aNNiMON, достаточно просто не переопределять keyPressed и он по умолчанию вызовется из суперкласса
- 25.01.2014 / 17:29
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, поэтому и написал, "если нужна" :)
__________________
 let live
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)