|
3D-программирование Вопросы, касающиеся программирования 3D мира |
25.05.2010, 10:58
|
#1
|
Оператор ЭВМ
Регистрация: 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
|
Зануда с интернетом
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.05.2010, 11:18
|
#3
|
Оператор ЭВМ
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
|
Ответ: Чтение и запись в фаил.
Проблема в 3Д, коардинаты загружаются правильно, в правельном порядке. НО модель перемешается не туда, куда нужно! Но за инфу спасибо)
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
|
(Offline)
|
|
25.05.2010, 11:22
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Чтение и запись в фаил.
2) используй не стринги, а соотвествующие объекты
2.1) или явно указывай перобразование типов
3) убедись, что записываешь глобальные координаты
3.1) или и пишешь и ставишь - локальные
4) телепатировать не удалось - давай рабочий код
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
25.05.2010, 11:26
|
#5
|
Оператор ЭВМ
Регистрация: 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
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: Чтение и запись в фаил.
если все координаты грузятся правильно, то возможно у тебя он сталкивается со стенами.У меня было такое.Команда PositionEntity переносит, но если по пути встречается объект, с которым установлена колизия, то он сталкивается с ним. Юзай HideEntity и ShowEntity, а еще лучше сначало позиционируй потом грузи карту в цикле(за 1 проход естественно)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.05.2010, 12:00
|
#7
|
Оператор ЭВМ
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
|
Ответ: Чтение и запись в фаил.
Ща попробую
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
|
(Offline)
|
|
25.05.2010, 12:06
|
#8
|
Оператор ЭВМ
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
|
Ответ: Чтение и запись в фаил.
Спасибо большое. Действительно, дело было в том, что он останавливался при столкновении. Нужно было сделать инферсию загрузки коардинат ( спасибо impersonalis ) и скрыть модель игрока на время его перемещения.
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
|
(Offline)
|
|
26.05.2010, 09:38
|
#9
|
Знающий
Регистрация: 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
|
Зануда с интернетом
Регистрация: 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
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Чтение и запись в фаил.
Ага ) продублировал, можно сказать.
Просто чего-то вспомнилось, в какой-то математике, пока не поставил 3.0 вместо просто 3 (без точки), ничего не получалось, т.е. надо было явно указывать, что имеешь ввиду float даже для просто цифры. Вобщем надо "явно указывай перобразование типов" +1
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Damp за это полезное сообщение:
|
|
27.05.2010, 05:20
|
#12
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Чтение и запись в фаил.
Наверно вместо String лучше использовать WriteLine/ReadLine.
|
(Offline)
|
|
28.05.2010, 16:42
|
#13
|
Оператор ЭВМ
Регистрация: 25.05.2010
Адрес: Россия, Питер
Сообщений: 34
Написано одно полезное сообщение
|
Ответ: Чтение и запись в фаил.
От этого ничего не менялось, я пробовал.
__________________
Нет ничего хуже, чем ничего. (с) Василий Орехов
|
(Offline)
|
|
11.06.2010, 08:39
|
#14
|
Элита
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:23.
|