forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   BlitzXML.bb (http://forum.boolean.name/showthread.php?t=2031)

Horror 03.12.2006 14:58

BlitzXML.bb
 
Всем привет!
Объясните пожалуйсто принцип работы с XML файлами (создание , сохранение, чтение и т.д) для Блитца и в блитце!

или описание на русском я сам тода разберусь)

Horror 03.12.2006 15:00

Re: BlitzXML.bb
 
А стоит ли это изучать?? или достаточно простого сохранение в файл

impersonalis 03.12.2006 15:46

Re: BlitzXML.bb
 
http://www.boolean.name/showthread.php?t=969 xml для b3d

Horror 03.12.2006 23:17

Re: BlitzXML.bb
 
impersonalis Спасибо! Но у меня сама либа была!
меня интерересовал вопрос чтения и сохранения!
типо по карте у меня разбросанно много обЪектов( к примеру деревьев)
как их всех сохранить в хмл-ку
ЗАРАНИЕ СПАСИБО) vbmenu_register("postmenu_23700", true);

moka 04.12.2006 01:29

Re: BlitzXML.bb
 
Ну сперва глянь примеры с работой, они то о всём и раскажут, ну и кратко от меня:
Есть раздела, в разделах могут быть ещё разделы, и чайлды. что-либо (раздел или чайлд), может иметь значения как в них так и отдельно но относящиеся к ним (новой строкой). Ты можешь их читать, находить и узнавать значения, и можешь делать свои хмлки. всё просто, смотри пример, в само устройство хмл не смотри :lol: там ты ничего почти не найдёшь кроме комментов.

ЗЫ
Хорошо сделан парсер, очень...

Horror 04.12.2006 20:33

Re: BlitzXML.bb
 
MoKa как построить саму хмлку я понял ! как читать я понял из примера ! а вот как сохранять кучу объектов в хмлку так и непонимаю)
ну типо я поставил объект в случайном месте как координыты сохранить , угол повора и т.д. в хмл...

moka 05.12.2006 04:51

Re: BlitzXML.bb
 
Для объектов создаёшь массив, со значениями координат и поворотов, ну и того что нужно сохранять.
Затем в цикле обновляешь данные для каждого состовляющего массива.
Потом что-бы сохранить, перебираешь весь массив и сохраняешь в разделе, подряд. В примере есть.
Там будет типо, найти колличество чайлдов, затем делаешь:
For С=1 to ChildCnt
Тут, комманда, которая будет брать чайлд под номером С.
Next
В примере должно быть.

Horror 14.05.2007 15:30

Re: BlitzXML.bb
 
У меня Снова вопрос по ХМЛу
Вообщем сохранение и загрузку сделал
НО при загрузки если элемент пустой
то выдает ошибку как это исправить?

Код:


rootnode = xmlLoad("Maps\Level.xml")
worldnode = xmlNodeFind("Level", rootnode)
 
; Стены
LoadLevWall=xmlNodeFind("Wall",worldnode)
WCnt%=xmlNodeChildCount(LoadLevWall)
  For w=1 To WCnt
    Node=xmlNodeChild(LoadLevWall,w)
      If xmlNodeNameGet(node) = "Object" Then
        wtyp= xmlNodeAttributeValueGet(node, "type")
        wX= xmlNodeAttributeValueGet(node, "X")
        wY= xmlNodeAttributeValueGet(node, "Y")
        wZ= xmlNodeAttributeValueGet(node, "Z")
        wYaw=xmlNodeAttributeValueGet(node, "Yaw")
        CreateModel(wX,wY,wZ,wYaw,wtyp)
      End If
  Next

ХМЛка выглядит так:
Код:


<Level>
 <Wall>
  <Object type="4" X="-214.972" Y="0.0" Z="189.818" Yaw="0.0"/>
  <Object type="4" X="-216.823" Y="0.0" Z="109.447" Yaw="0.0"/>
  <Object type="4" X="-222.078" Y="0.0" Z="-19.1" Yaw="0.0"/>
  <Object type="4" X="-221.069" Y="0.0" Z="-107.484" Yaw="0.0"/>
 </Wall>
...


Что не так? ЧТо дописать?

Horror 14.05.2007 15:32

Re: BlitzXML.bb
 
А и забыл (в моем понимание пустоu это)
Код:

<Level>
 <Wall>
 </Wall>
</Level>


moka 14.05.2007 23:22

Re: BlitzXML.bb
 
На какой именно строке выдаёт ошибку? Это важно.

Horror 15.05.2007 00:20

Re: BlitzXML.bb
 
Вроде понял как исправить ! домой приду попробую

а ошибки... он в либу переключается
вообщем
при сохранение
он сохраняет,
не так , как я написал ,
а так
Код:

<Level>
 <Wall/>
...

т.е. сразу закрывающий тег (если пусто)
и видимо он найти не может Wall

как сказал приеду отпишусь...

Horror 21.05.2007 18:34

Re: BlitzXML.bb
 
НЕ не выходит! ошибка тута:
http://savepic.ru/5278.jpg
ну естественно не там а гдето в моем коде вот снова он:
СОХРАНЕНИЕ
Код:

Function SaveLevel(Lev%)
 XLevSave=xmlNodeAdd(XLevSave,"Level")
 
  XglSave=xmlNodeAdd(XLevSave,"Globals")
  // Xcol=xmlNodeAdd(XglSave,"int")
  // xmlNodeAttributeValueSet(Xcol,"AmbientLight",Al)
XenSave=xmlNodeAdd(XLevSave,"Entitys")
 ;Стены
 XLevWall=xmlNodeAdd(XenSave,"Wall")
 For o.TWallObject=Each TWallObject
  Node=xmlNodeAdd(XLevWall,"Object")
  xmlNodeAttributeValueSet(Node,"type",o\typ)
  xmlNodeAttributeValueSet(Node,"X",EntityX(o\ent))
  xmlNodeAttributeValueSet(Node,"Y",EntityY(o\ent))
  xmlNodeAttributeValueSet(Node,"Z",EntityZ(o\ent))
  ;NodeP=xmlNodeAdd(Node,"Rotation")
  xmlNodeAttributeValueSet(Node,"Yaw",EntityYaw(o\ent))
 Next
xmlSave("Maps\Level"+Lev+".xml",XLevSave)
End Function

ЗАГРУЗКА
Код:

Function LoadLevel(Lev%)
rootnode = xmlLoad("Maps\Level"+Lev+".xml")
levelnode= xmlNodeFind("Level", rootnode)
worldnode = xmlNodeFind("Entitys", levelnode)
 
 ;  Стены
LoadLevWall=xmlNodeFind("Wall",worldnode)
WCnt%=xmlNodeChildCount(LoadLevWall)
For w=1 To WCnt
 Node=xmlNodeChild(LoadLevWall,w)
  If xmlNodeNameGet(node) = "Object" Then 
  wtyp=    xmlNodeAttributeValueGet(node, "type")
  wX=    xmlNodeAttributeValueGet(node, "X")
  wY=    xmlNodeAttributeValueGet(node, "Y")
  wZ=    xmlNodeAttributeValueGet(node, "Z")
          wYaw=xmlNodeAttributeValueGet(node, "Yaw")
  CreateModel(wX,wY,wZ,wYaw,wtyp) //Моя функция объект создает где надо
  End If
Next
End Function

и все таже проблема
если ни одного объекта не сохранил
то при загруки ошибка...

moka 23.05.2007 23:32

Re: BlitzXML.bb
 
Угу.
Тогда выход: при сохранении проверять на колличество сохраняемых нод, если их 0, то сохранять ноду просто "Empty", и затем при считывании проверять на ChildName если он "Empty", то пропускать.

Horror 24.05.2007 23:14

Re: BlitzXML.bb
 
MoKa
я так уже думал
но как определить колво элементов в типе?
Сначало сделал переменную и при создание каждого эл.типа
прибовлял к ней 1 и следовательно если ни один тип не создан
перемення остается 0 и тогда при сохранение этот тип он не сохраняет

НО так как типов уже придостаточно то это ни очень удобно))
[всмысле не элементов типа , а разных типов]

или ты предлогаешь всегда записывать
пустой элемент

мм надо попробывать

А как ты делал в своем редакторе? там вроде есть пустые поля (

moka 24.05.2007 23:44

Re: BlitzXML.bb
 
Как в редакторе, уже и не помню, больше пол года прошло.
Нет зачем делать глобальную и прибовлять, всё проще =).
В цикле когда сохраняешь эллементы:
Count%=0
For n.N=Each N
Count=Count+1
Next
If Count=0
Пишем пустую ноду.
Endif

Всё просто ;)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot