forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Чтение записи после перезагрузки приложения (http://forum.boolean.name/showthread.php?t=20400)

CRASHER 12.09.2016 17:15

Чтение записи после перезагрузки приложения
 
Здраствуй Булка!!! Живали еще ты?!)))
Вот код. Закоментите текстуру если лень добавлять свою пжлст.

Код:

Graphics3D 800,600,16
SetBuffer BackBuffer()

font=LoadFont("Blitz",14,True)
SetFont font
Camera=CreateCamera()
PositionEntity Camera,0,2,-2

plan=CreatePlane()
Texture=LoadTexture("text.jpg")
ScaleTexture(Texture,3,3)
EntityTexture(plan,Texture)

Global xm=3,zm=5
Global Newz,ner,Select1

Type Neur
        Field x#,y#,z#
        Field mass
        Field func
        Field Ent
        Field Child[99],CountChld
End Type

Type Buton
        Field x,y
        Field Status
End Type

Save=CreateCube();save
ScaleEntity Save,0.51,0.1,0.51
EntityPickMode Save,2
PositionEntity Save,-2,0,5
Load=CreateCube();load
ScaleEntity Load,0.51,0.1,0.51
EntityPickMode Load,2
PositionEntity Load,-4,0,5

Light=CreateLight()
RotateEntity Light,90,0,0

For i=0 To xm
For i2=0 To zm
        NewNeur.Neur=New Neur
        NewNeur\Ent=CreateCube()
        ScaleEntity NewNeur\Ent,0.3,0.1,0.3
        NameEntity(NewNeur\Ent, Handle(NewNeur)) ;"Neur"+Str( i )+","+Str(i2))
        NewNeur\x=(i2)
        NewNeur\y=0
        NewNeur\z=i
        PositionEntity(NewNeur\Ent,NewNeur\x,NewNeur\y,NewNeur\z)
        EntityPickMode NewNeur\Ent,2
Next
Next

While Not KeyDown(1)

CameraProject(camera,EntityX(Save),EntityY(Save),EntityZ(Save))
x1b=ProjectedX()
y1b=ProjectedY()
CameraProject(camera,EntityX(Load),EntityY(Load),EntityZ(Load))
x2b=ProjectedX()
y2b=ProjectedY()
select1=0
If MouseHit(1)
        CameraPick(camera,MouseX(),MouseY())
        If PickedEntity()=Save
                File=WriteFile("save01.dat")
                WriteInt(File,xm)
                WriteInt(File,zm)
               
                For NewNeur.Neur=Each Neur
                        WriteInt(File,NewNeur\CountChld)
                        For i=1 To NewNeur\CountChld
                                WriteInt(File,NewNeur\Child[i])
                               
                        Next
                Next
                CloseFile(File)
        ElseIf PickedEntity()=Load
                File=OpenFile("save01.dat")
                If File<>0
                        xm=ReadInt(File)
                        zm=ReadInt(File)
                        For NewNeur.Neur=Each Neur
                                NewNeur\CountChld=ReadInt(File)
                                For i=1 To NewNeur\CountChld
                                       
                                        NewNeur\Child[i]=ReadInt(File)
                                       
                                Next
                        Next
                        CloseFile(File)
                EndIf
               
        Else
                select1=1
        EndIf
ElseIf MouseHit(2)
        CameraPick(camera,MouseX(),MouseY())
        If PickedEntity()=Save
               
        ElseIf PickedEntity()=Load
               
        Else
                select1=2
        EndIf
Else
        EntityPick(Save,0)
EndIf

If PickedEntity()<>0
ext=0
If select1=1
        If LastEnt=0
               
                LastEnt=PickedEntity()
                EntityColor(LastEnt,250,50,50)
        Else
                If LastEnt<>PickedEntity()
                        NewNeur.Neur=Object.Neur(EntityName(LastEnt))
                        mem=0
                        For i=1 To NewNeur\CountChld
                                If NewNeur\Child[i]=PickedEntity()
                                        ext=1
                                        Exit
                                Else
                                        ext=0
                                       
                                EndIf
                        Next
                        If ext=0
                        ;Stop()
                                NewNeur\CountChld=NewNeur\CountChld+1
                                NewNeur\Child[NewNeur\CountChld]=PickedEntity()
                        EndIf
                Else
                        EntityColor(LastEnt,250,250,250)
                        LastEnt=0
                EndIf
        EndIf
EndIf
If select1=2
        If LastEnt<>PickedEntity() And LastEnt<>0
                NewNeur.Neur=Object.Neur(EntityName(LastEnt))
                ext=0
                For i=1 To NewNeur\CountChld
                        If NewNeur\Child[i]=PickedEntity()
                                ext=1
                                Exit
                        EndIf
                Next
                If ext=1
                        NewNeur\Child[i]=NewNeur\Child[NewNeur\CountChld]
                        NewNeur\CountChld=NewNeur\CountChld-1
                EndIf
        EndIf
EndIf
EndIf

mxspd#=MouseXSpeed()*0.25
myspd#=MouseYSpeed()*0.25
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2       
campitch#=EntityPitch(Camera)+myspd#
If campitch#<-85 Then campitch#=-85
If campitch#>85 Then campitch#=85
RotateEntity Camera,campitch#,EntityYaw(Camera)-mxspd#,EntityRoll(Camera)

If KeyDown(17) MoveEntity Camera,0,0,.2
If KeyDown(31) MoveEntity Camera,0,0,-.2
If KeyDown(32) MoveEntity Camera,.2,0,0
If KeyDown(30) MoveEntity Camera,-.2,0,0

RenderWorld
UpdateWorld
If KeyHit(57) Then w=1-w
WireFrame w
Text 10,10,"----------TESTING----------"
For NewNeur.Neur=Each Neur

        CameraProject(camera,EntityX(NewNeur\Ent),EntityY(NewNeur\Ent),EntityZ(NewNeur\Ent))
        xb=ProjectedX()
        yb=ProjectedY()
        Text xb,yb,EntityName(NewNeur\Ent)
        For i=1 To NewNeur\CountChld
                CameraProject(camera,EntityX(NewNeur\Child[i]),EntityY(NewNeur\Child[i]),EntityZ(NewNeur\Child[i]))
                Line(xb,yb,ProjectedX(),ProjectedY())
                Text(10,30,NewNeur\CountChld)
        Next
Next
Color(250,50,50)
Text(x1b,y1b-30,"Save")
Text(x2b,y2b-30,"Load")
Flip
Wend
End

Function UpdateNeurs()
       
End Function

;__________________________________________________________________
        EntityColor(PickedEntity(),10,210,10)
        If LastEnt<>0
                EntityColor(LastEnt,250,250,250)               
        EndIf
        If Select1<1 Select1=Select1+1
        If Select1=2
                If LastEnt<>PickedEntity()
                        NewNeur.Neur=Object.Neur(EntityName(LastEnt))

                        NewNeur\CountChld=NewNeur\CountChld+1
                        NewNeur\Child[NewNeur\CountChld]=PickedEntity()                       
                Else
                        Select1=0
                        LastEnt=        0
                EndIf
        Else
                ;Stop()
                If  LastEnt=0  LastEnt=PickedEntity()
        EndIf
       
;ElseIf LastEnt<>0
        If Select1=0
                EntityColor(LastEnt,250,250,250)
        ElseIf Select1=1
                EntityColor(LastEnt,250,50,50)
        EndIf

Вопрос в следующем. Если сохранять и загружать сохранения в запущенной программе то никаких проблем. Но перезагрузив программу уже считать то что было сохранено в последний раз не выходит. Подскажите нюанс, чего не доделал?
Цитата:

Сохраняю чилды объектов. Чтобы добавить чилд к объекту надо щелкнуть по нему, и после щелкнуть по объекту который нужно к нему подцепить. закончить добавление щелчком по объекту к которому добавляли чилды.

ABTOMAT 12.09.2016 17:35

Ответ: Чтение записи после перезагрузки приложения
 
Ты жива ещё моя булочка? Жив и я. Привет тебе, привет!
Код не запускал. Архив бы приложил, сырец+текстуры, чтоб можно было распаковать и запустить.


Что значит не выходит считать?
Ошибки какие-то вылетают или просто ничего не происходит (происходит то, чего не надо)?

Ты хендлы ентитей что ли пишешь в файл? Тогда понятно в чём дело: хендлы (адреса в памяти) при каждом запуске будут другие. Придумай другой способ идентификации.

CRASHER 12.09.2016 17:53

Ответ: Чтение записи после перезагрузки приложения
 
ABTOMAT, даров "сторожил" булочки)) там текстура и не нужна впрынцыпе)

CRASHER 12.09.2016 18:47

Ответ: Чтение записи после перезагрузки приложения
 
Как раз через хендлы все заработало. У меня привязка чилда к родителю идет по ссылке на объект который привязан к типу. Стал записывать имя объекта в котором записан хендл. Теперь все работает чисто.

ABTOMAT 12.09.2016 18:55

Ответ: Чтение записи после перезагрузки приложения
 
Цитата:

Сообщение от CRASHER (Сообщение 308456)
ABTOMAT, даров "сторожил" булочки)) там текстура и не нужна впрынцыпе)

Ну да, ещё искать, где там её использование в коде убрать.
Короче, блин, вопросы в таком виде (просто простыня кода, которую надо копировать куда-то в файл, чтобы запустить, папку ему создавать и т.д.) имеют низкие шансы на то, что кто-то захочет помогать. У меня вот Блиц не запускался уже сто лет на компе. Я думал сначала, если б был bb-файл, я бы его двойным кликом открыл, может, в недрах системы на это расширение Блиц и откликнется. А спецом его искать... Это не просьба. Просто информация к размышлению.


Я уже это запускать не буду, т.к. мне кажется, что проблема в том, что ты записываешь хендлы ентитей, что бессмысленно, т.к. они являют собой адреса в памяти, которые при каждом запуске игры новые, никак не связанные с теми, что ты записал в файл.

Вот что именно ты записываешь в файл? Ответь сам себе на этот вопрос и, возможно, поймёшь, почему у тебя не работает.

CRASHER 12.09.2016 19:10

Ответ: Чтение записи после перезагрузки приложения
 
ABTOMAT, ды нет работает. Хендл записываю в имя энтити, после пробегаюсь по чилдам и считываю имя энтити, где записан хендл. До этого просто энтити писал, не работало. Ну я бы сформировалб ланчер, но теперь уже проблема решена. смотреть нечего))


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

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