|
Опубликовано 12.09.2012 16:59 (12 лет назад) # |
ASCII CAVERNS 0.1.1b (Да, версии теперь более верные)
Запись идёт в APPLICATION DATA, добавлен перехват ошибок. Если будет сообщение - то хоть станет понятно из-за чего проблема.
|
|
|
|
Опубликовано 12.09.2012 18:23 (12 лет назад) # |
Shirson написал:
На радеонах и на не радионах. И там и там одинаковое окно получается? Видимо разное. У тебя контекст устройства сдвинут вверх где-то на 22 пикселя. Кстати... а сколько у тебя в виндовсе размер заголовка окна? :) Не в этих районах?
~30. На скринах можно линейкой померять (;
Я подумываю под VCL перекинуть код. Размер подпрыгнет, но это более управляемо и более проще в отладке. Может и твою траблу решит.
Игра кстати мышь жестко захватывает. Переключаться на другие окна затруднительно становится. Хотелось бы чтобы по Alt+TAB можно было, без лишних переключений. |
|
|
|
Опубликовано 12.09.2012 18:33 (12 лет назад) # |
bsivko написал:
~30. На скринах можно линейкой померять (; Возможно, именно на эту величинц и съезжает контекст.
Игра кстати мышь жестко захватывает. Переключаться на другие окна затруднительно становится. Хотелось бы чтобы по Alt+TAB можно было, без лишних переключений. Это особенность эксДжина. Там окно так создаётся и мышка каптурится.
Вообще, VCL меня привлекает по многим параметрам, наверное, сделаю спидтест и если не будет тормозить, то перееду на нормальные дельфовые формы. Там и отлаживать легче будет и переключаться можно куда угодно без проблем. |
|
|
|
Опубликовано 13.09.2012 09:36 (12 лет назад) # |
Shirson написал:
Запись идёт в APPLICATION DATA
0_о нафига?)) Писать в папку с игрой рядом с экзешником - это как раз и есть "хардкорно". :) оставь путь как был ;) |
|
|
|
Опубликовано 13.09.2012 14:01 (12 лет назад) # |
RichDad написал:
Shirson написал:
Запись идёт в APPLICATION DATA
0_о нафига?
Это попытка залечить твою проблему с записью. |
|
|
|
Опубликовано 13.09.2012 14:52 (12 лет назад) # |
Shirson написал:
Это попытка залечить твою проблему с записью.
Дак он пишет в папку. Записывает и повисает.
То есть проблема не в сохранении как таковом, а в повисании после сохранения. |
|
|
|
Опубликовано 13.09.2012 16:20 (12 лет назад) # |
Какте-нибудь сообщения выскакивают? Что видно на экране? С новой папкой всё тоже самое? |
|
|
|
Опубликовано 13.09.2012 16:39 (12 лет назад) # |
Shirson написал:
Какте-нибудь сообщения выскакивают? Что видно на экране? С новой папкой всё тоже самое?
Сообщений никаких. Просто "приложение не отвечает" и через несколько секунд виндоза его убивает.
А с новой папкой проверю дома и скажу. |
|
|
|
Опубликовано 13.09.2012 20:47 (12 лет назад) # |
Shirson написал:
Какте-нибудь сообщения выскакивают? Что видно на экране? С новой папкой всё тоже самое?
Скрин: http://pix.am/dT4z.png
Это я нажал F5. Управление повисло сразу. А через неск. секунд виндовз определил как повисшее.
редакция от RichDad, 13.09.2012 20:47 |
|
|
|
Опубликовано 15.09.2012 04:19 (12 лет назад) # |
RichDad, специальный фикс. Пробуй ASCII CAVERNS 0.1.1bf
Кажется я пофиксил твою проблему с зависанием при записи.
Только там еще кучка дополнений, поэтому старые сэйвы не подойдутЬ.
Изменена система меню.
Из меню теперь можно сразу загружать игру.
редакция от Shirson, 15.09.2012 04:20 |
|
|
|
Опубликовано 15.09.2012 10:35 (12 лет назад) # |
Shirson написал:
RichDad, специальный фикс. Пробуй
Кажется я пофиксил твою проблему с зависанием при записи.
Зависает (((
Мне даже удивительно что у вас не зависает.
http://pix.am/zbQH.png это начало зависания
потом появляются песочные часы, затем все становится серым и далее как на предыдущем скрине
Кстати, играть снова становится сложно. fps 10-30, в среднем 20. В предыдущем фиксе хотя бы 40-60 давал. |
|
|
|
Опубликовано 15.09.2012 16:52 (12 лет назад) # |
У меня вчера начало зависать, поэтому и выяснил, из-за чего.
попробуй это
https://dl.dropbox.com/u/103424101/ASCII%20CAVERNS%20012.zip
Тут реализован непрозрачный дым. Что-то как-то... не нравится он мне. Некуздряво. Коллеги, попробуйте, скажите мнение.
редакция от Shirson, 15.09.2012 23:57 |
|
|
|
Опубликовано 15.09.2012 18:47 (12 лет назад) # |
Зависает. После зависания снимаю задачу, захожу, загружаюсь и дальше иду. Все как и раньше. :( Сейв завешивает намертво (по моим наблюдениям завешивает не игру, а ее управление, но может я туплю тут).
Ну и немного печалит, что ты спрятал сейв с игрой. Не олдскульно. ;) (а так как игра не имеет инсталлятора, то при удалении игры останется мусор, то это не есть гуд. как разработчик коммерческого ПО тебе говорю) |
|
|
|
Опубликовано 15.09.2012 18:49 (12 лет назад) # |
Ты ж на дельфи пишешь? Покажи код сохранения, может найду глюк. Или сырцы с момента релиза на IGDC спрятал в темный чулан?))
редакция от RichDad, 15.09.2012 18:50 |
|
|
|
Опубликовано 15.09.2012 23:52 (12 лет назад) # |
RichDad написал:
Ты ж на дельфи пишешь? Покажи код сохранения, может найду глюк.
MemoryStream.SaveToFile();
Нашёл? :)
Висло из-за того, что обработчик клавиатуры напрямую вызывал процедуру записи. Без тормозов. 60 раз в секунду :)
Я воткнул задержку в 100*1/60=1.6с (более чем достаточно). У меня виснуть перестало (у меня виснуть и при задержке 10*1/60 перестало).
Или сырцы с момента релиза на IGDC спрятал в темный чулан?)) Да. |
|
|
|
Опубликовано 16.09.2012 09:26 (12 лет назад) # |
Shirson написал:
MemoryStream.SaveToFile();
Ну говорю же: сохраняет и виснет. Так что ошибка явно не в этой строке :)
Ты попробуй ставить движок на паузу. То есть ввести некоторую boolean, которая в начале каждой процедуры стоит вида:
if (isOnPause) then return; (или у дельфи exit вместо return...)
Тогда сохранение будет такое:
isOnPаuse := true;
MemoryStream.SaveToFile();
isOnPаuse := false;
Так ты точно будешь уверен, что ничего лишнего не происходит в этот момент.
редакция от RichDad, 16.09.2012 09:27 |
|
|
|
Опубликовано 16.09.2012 10:00 (12 лет назад) # |
Shirson написал:
Я воткнул задержку в 100*1/60=1.6с (более чем достаточно). У меня виснуть перестало (у меня виснуть и при задержке 10*1/60 перестало).
Перестало виснуть на отдельной машине в отдельных случаях.
Все это хорошо, но винда это такой черный ящик, который может в любой момент забрать любой ресурс и не отдать. Например уйти в дефрагментацию по своим внутренним капризам.
RichDad написал:
Ты попробуй ставить движок на паузу. То есть ввести некоторую boolean, которая в начале каждой процедуры стоит вида:
if (isOnPause) then return; (или у дельфи exit вместо return...)
Не кажется, что в этом решении что-то не так?
Одна из процедур движка обязательно будет забыта. При добавлении новых процедур нужно об этом помнить, и помнить всем, кто касается разработки - а это мина замедленного действия.
Кроме того, когда-нибудь захочется сделшать ещё какой-нибудь флаг, и с имеющимся флагом он войдет в противоречие с новыми непредвиденными сюрпризами.
По-хорошему, для сохранения необходимо зафиксировать ситуацию в виде константных данных (никто не должен писать в данные, влияющие на образ сохранения во время фиксации). Далее запустить задачу в отдельном потоке с заданным для него таймаутом. И, если сохранение не удалось за заданное время (что контролируется внешним диспетчером), то тогда "Ой!" и сообщить об этом пользователю (по причинческим технинам сохранение не удалось, код ошибки Х, обращайтесь в саппорт). |
|
|
|
Опубликовано 16.09.2012 12:35 (12 лет назад) # |
RichDad написал:
Ты попробуй ставить движок на паузу. То есть ввести некоторую boolean, которая в начале каждой процедуры стоит вида:
if (isOnPause) then return; (или у дельфи exit вместо return...)
Не кажется, что в этом решении что-то не так?
Согласен. Но я не видел его архитектуру и телепаты в отпуске. В порядке бреда и такой вариант прокатит.
Скажем, в большинстве движков, что я видел, такой блок надо поставить всего в 2-3 процедурах: Render(), Process() и, например, еще какая-то служебная. Так что, по сути, в двух местах всего блок поставить.
PS А вообще не предположу даже примерно как простой SaveToFile может подвешивать движок. Что-то Shirson с архитектурой намудрил.
редакция от RichDad, 16.09.2012 12:37 |
|
|
|
Опубликовано 16.09.2012 12:36 (12 лет назад) # |
хотя, нет. Рендер тоже не надо останавливать.
Только Process() получается надо ставить на паузу.
редакция от RichDad, 16.09.2012 12:50 |
|
|
|
Опубликовано 16.09.2012 16:34 (12 лет назад) # |
bsivko написал:
Перестало виснуть на отдельной машине в отдельных случаях.
Так у тебя тоже зависало? А чего молчал, я думал это толькл у RichDad проблема.
По-хорошему, для сохранения необходимо зафиксировать ситуацию в виде константных данных (никто не должен писать в данные, влияющие на образ сохранения во время фиксации). Далее запустить задачу в отдельном потоке с заданным для него таймаутом. И, если сохранение не удалось за заданное время (что контролируется внешним диспетчером), то тогда "Ой!" и сообщить об этом пользователю (по причинческим технинам сохранение не удалось, код ошибки Х, обращайтесь в саппорт).
Вообще, сохранялка сейчас это просто заплатка, по просьбам вас. Я не заморачиваюсь о совместимости со старыми версиями и прочими красотами, по причине того, что это временно. Полноценная сохранялка будет разрабатываться, когда причешу архитектуру и заменю врагов.
Сейчас сохранение просиходит как пошаговая запись всех важных переменных в поток, с последующей его записью. Косяк может вывалиться только на этапе взаимодействия с операционкой при записи на диск. Я подумаю над проблемой еще раз, с той стороны, что ты описал.
Кстати, тут сподвигся на тест рендера из текстурного атласа (как сайчас) vs рендер из отдельных текстур. Оказалось, что из текстурного атласа рендерится в 5 раз быстрее 8/ Я в полном офиге, всегда думал, что наоборот.
Так вот, для теста я отключил VSync и игра заметно шустрее работать стала. У меня он был забит по умолчанию в дрвйверах видеокарты. Сделал для игры исключение, чего и вам рекомендую.
И как вам непрозрачный дым? Мне не очень понравился.
редакция от Shirson, 16.09.2012 16:35 |
|
|