Не работает компьютерная игрушка

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Не работает компьютерная игрушка

Сообщение Debugger » 29.01.2009 (Чт) 17:29

Писал компьютерную игрушку. Выкладывать скорее всего не буду, так как писал под конкурс. Чтобы на компе, где жури будут смотреть ее, все точно пошло, я решил отладить игру на разных компах. На 1м ноутбуке все пошло нормально. На 2 компе не работали спрайты (вместо них просто черных квадратики) - пункты меню я тыкал наугад. Еще на одном вообще странная реакция - Subscript out of range. Но несколько раз запустился нормально. Возникла мысль логировать события, чтобы узнать, откуда ноги у ошибки на 3ем компе. Но нет - лог-файл не создавался даже в результате успешного запуска.
Откуда такое разнообразное поведение?
Сейчас могу только сидеть и смотреть, как игра себя поведет на 4м ПК.
DirectX8, "спрайты" - это D3DXSprite, а не что вы могли подумать. На моем компьютере все работает нормально.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Не работает компьютерная игрушка

Сообщение djalex777 » 29.01.2009 (Чт) 18:22

Debugger писал(а):Откуда такое разнообразное поведение?

Из-за разницы в аппаратной части компьютеров. (решение - учесть в коде нюансы)
Debugger писал(а):Но нет - лог-файл не создавался даже в результате успешного запуска.

А как ты его создавал?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Не работает компьютерная игрушка

Сообщение Debugger » 29.01.2009 (Чт) 21:27

Код: Выделить всё
Dim ffN As Integer

Private Sub Class_Initialize()
    ffN = 231
    Open App.Path & "\Log.txt" For Append As ffN
    Print #ffN , Now & " InitLog"
End Sub
Sub AddEvent(s As String)
     Print #ffN , Now & " " & s
End Sub

Private Sub Class_Terminate()
    Print #ffN , FormDate & " Log terminated"
    Close #ffN
End Sub

Вот так. Что-то не так в этом коде.
Больше всего интересно, чем не угодили спрайты компу №2 и динамический массив номеру 3. Сомнительно, что дело в аппаратной части... Хотя на ум ничего другого не идет.
А у кого-нибудь из форумчанинов такое было? Если на комьютере установлен VB6, то есть гарантии, что игра (с исходника?) запустится правильно?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Не работает компьютерная игрушка

Сообщение Mikle » 30.01.2009 (Пт) 10:59

Код: Выделить всё
ffN = 231

Это что? Почему не FreeFile?
Еще, этот путь:
Код: Выделить всё
App.Path & "\Log.txt"

в корне диска (например на флешке) будет некорректным.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Не работает компьютерная игрушка

Сообщение Debugger » 30.01.2009 (Пт) 13:55

231 потому что где-то дальше FreeFile не используется, а берется #1.
в корне диска (например на флешке) будет некорректным.

Да, проверю.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Не работает компьютерная игрушка

Сообщение djalex777 » 30.01.2009 (Пт) 17:03

Debugger писал(а):231 потому что где-то дальше FreeFile не используется, а берется #1.

Хм.. FreeFile используется для получения номера файла, который не занят.
А класс инициализируется где-нибудь?
По-поводу динамического массива - дело не в нём. А что за динамический массив? Чему равна его верхняя граница?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Не работает компьютерная игрушка

Сообщение Debugger » 30.01.2009 (Пт) 22:02

Хм.. FreeFile используется для получения номера файла, который не занят.

Этот класс инициализируется первым. И FreeFile возвращает 1. Файл остается открытым, так как класс жив.
Где-то дальше в коде у меня стоит
Код: Выделить всё
Open App.Path & "/game.dat" For Binary As #1
Get ....
....
Close #1

И так много раз, в разных процедурах, для разных файлов (а их много). Менять лень.

Динамический массив
Код: Выделить всё
Type Unit
X As Single
Y As Single
HP As Integer
...
End Type
Dim Units() As Unit
...
'При создании нового юнита
Redim Units(UBound(Units)+1)

А, ну еще и понравившийся трюк (Not(Units)).

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Не работает компьютерная игрушка

Сообщение djalex777 » 01.02.2009 (Вс) 18:07

1.Слэш в пути не в ту сторону...
2.Каким образом динамический массив инициализируется?? В таком виде кусок кода работать не будет. И плюс - Redim обнулит все элементы массива...

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Не работает компьютерная игрушка

Сообщение Debugger » 02.02.2009 (Пн) 15:33

Извиняюсь, поторопился. Слеш в обратную сторону, а в функции стоит Redim Preserve.
А разве имеет значение - "/" или "\"? у меня и так, и так работает.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: Не работает компьютерная игрушка

Сообщение DirectXManiac » 06.02.2009 (Пт) 4:02

1. Пиши обработчик файлов на уровне ядра движка - главной функцией которого будет проверка пути и его исправление.
Я когда то писал под свои нужды. Идея такая - все файлы, используемые в движке создаются/грузятся через этот самый менеджер. Тогда ошибок очень просто избежать, если правильно организовать менеджер. Там же легко понять почему у тебя не создается ЛОГ.
2. Учитывай Caps-ы, при создании устройства.
3. Старайся в общем виде делать рендер отдельных частей(тех же спрайтов) опять же с учетом параметров и капсов.
4. "А мне лень исправлять" - а я то думаю почему блин половина программ и игр очень криво написано. Вот из за таких вот ленивых как мы :lol:

А смысл оставлять ЛОГ файл открытым? Если ты его открываешь с опцией Append?
Open "c:\log.txt" For Append As #logFileNumber
Print #1, Now & " : " & Text
Close #logFileNumber
Я всегда так делал, не было такого чтоб не создавался файл... Как не извращался... Правда с флешкой не пробовал - но с менеджером файлов думаю будет все отлично работать.
#define ROFL 0xDDDD

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Не работает компьютерная игрушка

Сообщение Debugger » 06.02.2009 (Пт) 19:11

1. Не совсем понятно, что такое "ядро движка". Проверка на несуществование текстур и моделек есть. Если текстуры нет - просто выводится сообщение, прописывается в лог имя файла и игра закрывается.
2. Попробую. Будет забавно, если современный компьютер не потянет на 2 стадии текстурирования.
3. А какие есть капсы для спрайтов?
4. Не криво :) . Это ж не критично и даже не ошибка.
Открывать-закрывать его? Попробую.
Давай вернемся к начальной проблеме. На одном компьютере непонятно почему выскакивает VB-шная ошибка Subscript out of range :!: . Причина неизвестна. На другом компьютере не прорисовывались спрайты. Теперь понятно почему - аппаратная часть виновата, надо проверять капсы. А если спрайты нельзя рисовать, чем их можно заменить?

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Re: Не работает компьютерная игрушка

Сообщение Gemini » 06.02.2009 (Пт) 19:23

Subscript out of range - (На сколько я понимаю это происходит в самом начале загрузки) если так то просто пиши в лог все действия которые происходят с начала до конца отрисовки сцены. (либо ищи тонкие места где возможна ошибка)
В нашем деле главное ЛОГИКА.

косил косой косой косой.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Не работает компьютерная игрушка

Сообщение Debugger » 06.02.2009 (Пт) 21:13

А теперь посмотри первое сообщение. С основами отлавливания ошибок я знаком.
Меня интересует одно: почему у меня все нормально, а у кого-то другого появляются такие аномалии и как с этим бороться?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Не работает компьютерная игрушка

Сообщение iGrok » 06.02.2009 (Пт) 21:52

Debugger писал(а):Меня интересует одно: почему у меня все нормально, а у кого-то другого появляются такие аномалии и как с этим бороться?

Почему: из-за различий в конфигурации аппаратной и программной части систем.
Как бороться: до лога ошибок ты дошёл сам. =)

З.Ы. Если уж у тебя в процедуре, создающей лог есть ошибки (неиспользование FreeFile, и т.п.) , остаётся только догадываться, какие могут встретиться в коде.
Возможно, что-то тоже написано "на грани фола", т.е. неправильно, но у тебя работает. А на другой системе это самое "неправильно" и вылезает.

З.З.Ы. Держи нормальный логгер..
У вас нет доступа для просмотра вложений в этом сообщении.
label:
cli
jmp label

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Не работает компьютерная игрушка

Сообщение Debugger » 17.02.2009 (Вт) 21:42

Кстати, с нормальным логгером на том самом бажном компе все равно ничего не создается. Лога, всмысле.
Может быть, блошки и вошки? От них что хочешь будет.
З.Ы. Неиспользование FreeFile - это не ошибка.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Не работает компьютерная игрушка

Сообщение Williams » 13.03.2009 (Пт) 14:37

В этом одна из главных фишек программирования. Легко заставить работать у себя, трудно адаптировать под все конфигурации
И вы думаете, что вас оставят в живых после прочтения этого поста?


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList