Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 25.05.2010, 10:58   #1
Fatal
Оператор ЭВМ
 
Аватар для Fatal
 
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
Чтение и запись в фаил.

Столкнулся с проблемой записи и загрузки переменных из файла.

Сначала я сохраняю некоторые переменные :

SaveGame = WriteFile("Save.txt")
WriteString ( SaveGame, EntityX#(player))
WriteString ( SaveGame, EntityY#(player))
WriteString ( SaveGame, EntityZ#(player))
CloseFile( SaveGame )
Затем я загружаю переменные и выставляю игрока в них :

If TestImage (MouseX(),MouseY(), x1-5,170, button) Then
If MouseHit(1)
LoadGame=ReadFile("Save.txt") 
PositionEntity player,ReadString(LoadGame),ReadString(LoadGame),ReadString(LoadGame)
CloseFile(LoadGame)
EndIf
Но игрок помещается не в те коардинаты, в которые я его сохранял. Причем если щелкать загрузку несколько раз, что он будет выставлять его в разные коардинаты! Хотя если выводить коардинаты на экран :

LoadGame=ReadFile("Save.txt") 
DrawText "  " +ReadString(LoadGame)+ "  " +ReadString(LoadGame) + "  " +ReadString(LoadGame) + "  " +ReadString(LoadGame) + "  " +ReadString(LoadGame) ,300,200 
CloseFile(LoadGame)
То они правельные. У меня есть пара идей на этот счет. Может быть дело в несовпадении типов или связано с вектором?
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
(Offline)
 
Ответить с цитированием
Старый 25.05.2010, 11:16   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Чтение и запись в фаил.

www.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ
LOAD-SAVE
http://forum.boolean.name/showthread.php?t=1014
ВАЖНО: всегда контролируйте себя - если вы для объектов сохраняли сначал х а затем y, то и грузить их надо в том же порядке.
Проблема не в 3д (модеры!). Никто не гарантирует что при вызове F(q(),p()), сначал будет вычислено q(),а затем p(). Для большинства случаев, где распределения выходных занчений функций q() и p() независмы это не критично: ну подумаешь, сначала вызовется p(), а затем q() - передадутся то они в верном порядке. Но в твоём случае - функции зависимы. Допустим, в файле подряд сохранено "1,2,3"
И ты вызываешь:
PositionEntity player,ReadString(LoadGame),ReadString(LoadGame),ReadString(LoadGame)
Очень может оказаться что блитц грузит параметры с конца. Т.о. он сначала получит занчение для третьего аргумента (прочитает из файла - 1), затем для второго - и т.д. В результате - значения перепутаны.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Fatal (25.05.2010)
Старый 25.05.2010, 11:18   #3
Fatal
Оператор ЭВМ
 
Аватар для Fatal
 
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
Ответ: Чтение и запись в фаил.

Проблема в 3Д, коардинаты загружаются правильно, в правельном порядке. НО модель перемешается не туда, куда нужно! Но за инфу спасибо)
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
(Offline)
 
Ответить с цитированием
Старый 25.05.2010, 11:22   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Чтение и запись в фаил.

2) используй не стринги, а соотвествующие объекты
2.1) или явно указывай перобразование типов
3) убедись, что записываешь глобальные координаты
3.1) или и пишешь и ставишь - локальные
4) телепатировать не удалось - давай рабочий код
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Damp (26.05.2010), Fatal (25.05.2010)
Старый 25.05.2010, 11:26   #5
Fatal
Оператор ЭВМ
 
Аватар для Fatal
 
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
Ответ: Чтение и запись в фаил.

2) используй не стринги, а соотвествующие объекты
Преобразовывать в intger?

3) убедись, что записываешь глобальные координаты
Коардинаты конечно глобальны, выводя текст на экран я их получаю правильно

Рабочий код :

If TestImage (MouseX(),MouseY(), x1-5,70, button) Then
If MouseHit(1)
SaveGame = OpenFile("Save.txt")

WriteString ( SaveGame, EntityX#(playership))
WriteString ( SaveGame, EntityY#(playership))
WriteString ( SaveGame, EntityZ#(playership))
;WriteString ( SaveGame, Playerfuel#)
;WriteString( SaveGame, PlayerMoney)
;WriteLine( SaveGame, PlayerSpeed#)   
CloseFile( SaveGame ) 
EndIf 
DrawText " Сохранить ",x1+30,55
EndIf
If TestImage (MouseX(),MouseY(), x1-5,170, button) Then
If MouseHit(1)
LoadGame=ReadFile("Save.txt") 
PositionEntity playership,ReadString(LoadGame),ReadString(LoadGame),ReadString(LoadGame)

CloseFile(LoadGame)
EndIf
DrawText " Загрузить ",x1+30,155
EndIf
If TestImage (MouseX(),MouseY(), x1-5,270, button) Then
DrawText " Выход ",x1+30,255
EndIf

LoadGame=ReadFile("Save.txt") 
DrawText "  " +ReadString(LoadGame)+ "  " +ReadString(LoadGame) + "  " +ReadString(LoadGame),300,200
CloseFile(LoadGame)
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
(Offline)
 
Ответить с цитированием
Старый 25.05.2010, 11:57   #6
RlexGm
ПроЭктировщик
 
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений
(для 34 пользователей)
Ответ: Чтение и запись в фаил.

если все координаты грузятся правильно, то возможно у тебя он сталкивается со стенами.У меня было такое.Команда PositionEntity переносит, но если по пути встречается объект, с которым установлена колизия, то он сталкивается с ним. Юзай HideEntity и ShowEntity, а еще лучше сначало позиционируй потом грузи карту в цикле(за 1 проход естественно)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Fatal (25.05.2010)
Старый 25.05.2010, 12:00   #7
Fatal
Оператор ЭВМ
 
Аватар для Fatal
 
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
Ответ: Чтение и запись в фаил.

Ща попробую
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
(Offline)
 
Ответить с цитированием
Старый 25.05.2010, 12:06   #8
Fatal
Оператор ЭВМ
 
Аватар для Fatal
 
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
Ответ: Чтение и запись в фаил.

Спасибо большое. Действительно, дело было в том, что он останавливался при столкновении. Нужно было сделать инферсию загрузки коардинат ( спасибо impersonalis ) и скрыть модель игрока на время его перемещения.
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
(Offline)
 
Ответить с цитированием
Старый 26.05.2010, 09:38   #9
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Чтение и запись в фаил.

PositionEntity player,ReadString(LoadGame),
мне кажется, значние ReadString(LoadGame) не факт, что во float будет преобразовано.
Лучше наверно явно указать:
x#=Float(ReadString(LoadGame))
PositionEntity player,x#,
(Offline)
 
Ответить с цитированием
Старый 26.05.2010, 10:44   #10
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Чтение и запись в фаил.

Damp, см. пост номер 4
Fatal, смотри ещё:
http://forum.boolean.name/showpost.p...1&postcount=51
51ый пост в теме www.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ
Создаём свой FPS (first person shooter)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 26.05.2010, 18:54   #11
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Чтение и запись в фаил.

Ага ) продублировал, можно сказать.

Просто чего-то вспомнилось, в какой-то математике, пока не поставил 3.0 вместо просто 3 (без точки), ничего не получалось, т.е. надо было явно указывать, что имеешь ввиду float даже для просто цифры. Вобщем надо "явно указывай перобразование типов" +1
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Damp за это полезное сообщение:
Артем Валерьевич (28.05.2010), impersonalis (27.05.2010)
Старый 27.05.2010, 05:20   #12
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Чтение и запись в фаил.

Наверно вместо String лучше использовать WriteLine/ReadLine.
(Offline)
 
Ответить с цитированием
Старый 28.05.2010, 16:42   #13
Fatal
Оператор ЭВМ
 
Аватар для Fatal
 
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
Ответ: Чтение и запись в фаил.

От этого ничего не менялось, я пробовал.
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
(Offline)
 
Ответить с цитированием
Старый 11.06.2010, 08:39   #14
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Чтение и запись в фаил.

я так гружу:
Function loadsettings(puth$)


If FileType(puth$)=1
.load
  set=OpenFile(puth$)
  graphsize=ReadLine(set)
  colorit=ReadLine(set)
  volummus=ReadLine(set) 
  volumsou=ReadLine(set)
  ;key
  move_up=ReadLine(set)
  move_down=ReadLine(set)
  move_left=ReadLine(set)
   move_right=ReadLine(set)
   move_jump=ReadLine(set)
   move_sest=ReadLine(set)
   key_fun=ReadLine(set)
   key_bar_op=ReadLine(set)
   key_bar_left=ReadLine(set)
   key_bar_right=ReadLine(set)
CloseFile(set)
Else
  in=WriteFile(puth$)
  WriteLine(in,0)
  WriteLine(in,16)
  WriteLine(in,80)
  WriteLine(in,50)
  WriteLine(in,200)
  WriteLine(in,208)
  WriteLine(in,203)
  WriteLine(in,205)
  WriteLine(in,57)
  WriteLine(in,23)
  WriteLine(in,0)
  WriteLine(in,0)
  WriteLine(in,0)
  WriteLine(in,0)
CloseFile(in)
Goto load
EndIf
End Function
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com