Поиск:

Ответ в темуСоздание новой темы
> Читаю потихоньку исходники.. почему так? 
:(
    Опции темы
Kurt
Дата 3.11.2004, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Вот, читаю потихоньку исходники..
В файле Animation.java натолкнулся на такой код:
Цитата
public synchronized boolean update(long elapsedTime)
    {
        if (frames.size() > 1)
        {
            animTime += elapsedTime;

            if (animTime >= totalDuration)
            {
                animTime = animTime % totalDuration;
                currFrameIndex = 0;
            }

            while (animTime > getFrame(currFrameIndex).endTime)
            {
                currFrameIndex++;
            }
        }
        return false;
    }

Не понимаю, зачем здесь возвращается булевское значение?
Тут всегда возвращается false. Кроме того, я посмотрел по другим файлам - он, вроде, везде вызывается как
someObject.update() - т.е. нигде не проверяется возвращаемое значение.
Резюме - зачем здесь boolean и почему не void?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 3.11.2004, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Animation я брал из Invasion, а тудa этот класс попал ещe откуда-то :) Очевидно, return здесь совсем не нужен. Вот допишу сервер, может дойдут руки подчистить :)


--------------------

PM   Вверх
Kurt
Дата 3.11.2004, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Еще заметил такую фигню:
я запускаю класс Test из консоли.
Так вот, если моя текущая директория - директория, содержащая исходники - все ОК.
Иначе - он не находит map.txt, даже если он лежит в директории, откуда я запускаю.
Добавлено @ 23:53
Хотя это явно чисто тестовый баг, потом надо бы продумать строчку
[code=]parser.parse("map.txt");[/code]
сделать, чтоб искал в classpath и в текущей директории..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Kurt
Дата 4.11.2004, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Продолжаем..
Мне долго не давала покоя проблемка излишнего расхода ресурсов.
Таракан у меня на экране нет-нет да и моргал.
Предлагаю такое решение:
перед каждой перерисовкой делать небольшую задержку.
Вот, смотрите, я поменял чуток класс AbstractGame.java:
Цитата

..
public abstract class AbstractGame implements Runnable
..
    public void gameLoop()
    {
        long startTime = System.currentTimeMillis();
        currTime = startTime;
        while (isRunning)
        {
        try{
            Thread.currentThread().sleep(50);
        }
        catch(Exception ex){
           
        };
...

Кто заметит задержку в 50 миллисекунд между прорисовкой?
Однако, после добавления этого кода, все стало просто шикарно:
1) таракан ВООБЩЕ не моргает и при этом нормально передвигается;
2) приложение потребляет всего 10% процессорного времени - можно игратьcz и заниматься своими делами. :)
..
Ессно, можно развить эту мысль - например, вычислять необходимую задержку исходя их мощности и загруженности операционной системы, но это детали..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 4.11.2004, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



У меня при sleep(50) таракан стал "дергаться", а процессор оказался занят игрой на 60% ...
Маленькая задержка, скажем, в 5 мс вообще никак не влияет :(

К сожалению, при работе с сервером дергается всe куда хуже :)


Kurt, если есть желание, могу добавить тебя в девелоперы. Толькo нужен твой логин на сорсфорж


--------------------

PM   Вверх
Kurt
Дата 4.11.2004, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Цитата
У меня при sleep(50) таракан стал "дергаться", а процессор оказался занят игрой на 60% ...
Маленькая задержка, скажем, в 5 мс вообще никак не влияет

Ну, я ж говорю - нужно считать fps и исходя их этого вычислять fps.
Надо подумать..
Кстати, у тебя вообще-то моргание наблюдалось?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 4.11.2004, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Цитата(Kurt @ 3.11.2004, 17:15)

Кстати, у тебя вообще-то моргание наблюдалось?


Нет. Оно появляется только со sleep, а без негo всe идет очень гладко.


--------------------

PM   Вверх
Kurt
Дата 4.11.2004, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Поверь мне наслово - у меня все наоборот.
Ладно, разберемся..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 4.11.2004, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Тем не менее, идея помоглa smile я добавил Thread.sleep(100) в update сервера, и стало гораздо лучшe - таракан хотя и "скачет", но намногo плавнее.


--------------------

PM   Вверх
DarkDS
Дата 4.11.2004, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



Может попробовать сервер и таракана на разных машинах запустить?
PM MAIL   Вверх
Domestic Cat
Дата 4.11.2004, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Надо бы, но сначала стоит код причесать и заставить его нормально работать с локальным хостом.
Сегодня еще посмотрю, а затем можно пробовать smile


--------------------

PM   Вверх
Kurt
Дата 4.11.2004, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Цитата
Тем не менее, идея помоглa

smile
Я думаю, на клиентах все же надо будет сделать такую задержку, вот только ее надо вычислать исходя их мощности системы - скорее всего у тебя получились косяки именно из-за разности между ресурсами наших машин - им всем нужны РАЗНЫЕ задержки. Иначе, у тебя все ОК, у меня даже просто мирно отдыхающий таракан постоянно моргает - непорядок..
Предлагаю ввести некоторое фиксированное кол-во fps (желательно, как можно меньше - чтоб меньше ресурсов есть..) и используя таймер и sleep - корректировать это значение, чтоб на всех машинах было одинаково.
Т.е. по событию таймера проверяем сколько было fps за прошедшую секунду и с помощью пропорций корректируем значение sleep.

Цитата
я добавил Thread.sleep(100) в update сервера

К сожалению, с сервером тоже придется сделать похожее - число 100 будет нормально работать на ТВОЕМ компе, не не факт что на более сильной/слабой машине будет все то же.
..
З.Ы. Чтоб поднять настроение и оптимистический настрой:
попробовал запустить в ASPLinux9.0+JVM1.4 - не грузит карту, из какой бы директории я не запускал это горе-приложение.. Надо поработать..
З.Ы.Ы. До этого запускал в OS WinXP SP1.



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 4.11.2004, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Цитата
Чтоб поднять настроение и оптимистический настрой:
попробовал запустить в ASPLinux9.0+JVM1.4 - не грузит карту, из какой бы директории я не запускал это горе-приложение.. Надо поработать..


Ох, то ли с путями не то, то ли с рисункамi smile

Цитата
К сожалению, с сервером тоже придется сделать похожее - число 100 будет нормально работать на ТВОЕМ компе, не не факт что на более сильной/слабой машине будет все то же.


И от коннекшнa тожe. Нo я думаю, 30-50 тоже хватит, а это подойдет в люб ом случае. jа доделал сервер, тепер' оn нe отсылаеt координаты объекта, если они nе измеnенились зa циkл.

Попишу ещe доки и выложу попозже.
Цитата
Я думаю, на клиентах все же надо будет сделать такую задержку, вот только ее надо вычислать исходя их мощности системы - скорее всего у тебя получились косяки именно из-за разности между ресурсами наших машин - им всем нужны РАЗНЫЕ задержки. Иначе, у тебя все ОК, у меня даже просто мирно отдыхающий таракан постоянно моргает - непорядок..


А это на лаптопе было?
Цитата
Т.е. по событию таймера проверяем сколько было fps за прошедшую секунду и с помощью пропорций корректируем значение sleep.


Оk, допишу расчет фпс, а там подберем параметры .


--------------------

PM   Вверх
DarkDS
Дата 4.11.2004, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



Цитата(Domestic @ 4.11.2004, 23:25)

Ох, то ли с путями не то, то ли с рисункамi

Уже выяснили - с рисунками... Нужно их а соурсейв как бинарики положить smile
У меня такая же ситуация smile
PM MAIL   Вверх
Domestic Cat
Дата 5.11.2004, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



100 мс оказалось слишом много. Сделал 30 - даже не чувствуется, что есть нетворкинг smile smile
Дописываю доки и выкладываю.


--------------------

PM   Вверх
DarkDS
Дата 5.11.2004, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



зы. нужно поменять ключ у имеджей на -kb и перезалить
PM MAIL   Вверх
Domestic Cat
Дата 5.11.2004, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



ок, сделаю следующий раз


--------------------

PM   Вверх
Kurt
Дата 5.11.2004, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Да я уже догадался - собственно, зашел на форум отписать, что лажанулся с загрузкой. Сорри - надеюсь, мне, как новичку, простительно. smile
Однако, теперь другая фигня.
Запускаю клиент, сервер.
Появляется таракан, но при клике в любом месте таракан остается на месте, а в консоли появляется следующее:
Цитата
java.lang.ClassCastException
        at Receiver.doReceive(Receiver.java:147)
        at Receiver.access$100(Receiver.java:11)
        at Receiver$1.run(Receiver.java:105)

..
Цитата
А это на лаптопе было?

Моргание наблюдается на лаптопе и на "обычном" компе..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 5.11.2004, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Цитата
Появляется таракан, но при клике в любом месте таракан остается на месте, а в консоли появляется следующее:


Хмм... Когда я сливал, все работало. Ну да ладно, я сейчас все равно пределываю и думаю через полчаса выложить новую версию smile


--------------------

PM   Вверх
Sun
Дата 24.11.2004, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



У меня есть замечание по классу SimpleFood.
1. Там нет смысла использовать массив анимаций. Достаточно одной.
2. В методе draw не нужно делать разворотов. Так-же еда не должна перемещатся и соответственно иметь направление.
Код

   public void draw(Graphics g, final Rectangle viewPort)
   {
       g.drawImage(getImage(),
               (int)Math.ceil(getX() - viewPort.x),
               (int)Math.ceil(getY() - viewPort.y),
               getWidth(),
               getHeight(),
               null);
   }

3. Нужно добавить конструктор с передачей имени файла который содержит анимацию и колличество кадров
Код

   public SimpleFood(String fileName, int frameCount)
   {
       Animation a  = new Animation();
       a.loadStripImageArray(IMAGE_DIR + fileName, frameCount);
       setAnimation(a);
   }

4. В методе eat() вызывать update. Или может добавить в класс Animation безусловный переход к следующему кадру. Число кадров в анимации должно соотвествовать числу фаз поеданий данного фуда.
5. Не имеет смысл делать статусов для еды. Когда последняя часть еды съедена - нужно удалять еду из списка объектов игры.


--------------------
Account removed
PM MAIL   Вверх
Domestic Cat
Дата 24.11.2004, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Цитата
1. Там нет смысла использовать массив анимаций. Достаточно одной.


Согласен.

Цитата
В методе draw не нужно делать разворотов. Так-же еда не должна перемещатся и соответственно иметь направление.


тоже согласен, но что если еда будет несимметричной ? Все время будет одинаково рисоваться.

Цитата
В методе eat() вызывать update. Или может добавить в класс Animation безусловный переход к следующему кадру. Число кадров в анимации должно соотвествовать числу фаз поеданий данного фуда.


Хорошая идея.
Цитата
Не имеет смысл делать статусов для еды. Когда последняя часть еды съедена - нужно удалять еду из списка объектов игры.


Ты имеешь в виду DEAD - ALIVE? Статуs удобен тем, что можно в 1 цикле будет перебрать все игровые объекты и тe что DEAD, удалить. А бez статуса nужно будет это в разных местах делать.


--------------------

PM   Вверх
Sun
Дата 24.11.2004, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Цитата(Domestic @ 24.11.2004, 13:29)
Ты имеешь в виду DEAD - ALIVE? Статуs удобен тем, что можно в 1 цикле будет перебрать все игровые объекты и тe что DEAD, удалить. А бez статуса nужно будет это в разных местах делать.

Да, я это и имел в виду. На счет перебора объектов, пожалуй ты прав. Тогда у еды должно быть два статуса ALIVE и DEAD, и несколько фаз поедания.


--------------------
Account removed
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Игра на JAVA | Следующая тема »


 




[ Время генерации скрипта: 0.2314 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.