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

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

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

Ответ
 
Опции темы
Старый 12.09.2016, 17:15   #1
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Чтение записи после перезагрузки приложения

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

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
Вопрос в следующем. Если сохранять и загружать сохранения в запущенной программе то никаких проблем. Но перезагрузив программу уже считать то что было сохранено в последний раз не выходит. Подскажите нюанс, чего не доделал?
Сохраняю чилды объектов. Чтобы добавить чилд к объекту надо щелкнуть по нему, и после щелкнуть по объекту который нужно к нему подцепить. закончить добавление щелчком по объекту к которому добавляли чилды.
(Offline)
 
Ответить с цитированием
Старый 12.09.2016, 17:35   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Чтение записи после перезагрузки приложения

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


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

Ты хендлы ентитей что ли пишешь в файл? Тогда понятно в чём дело: хендлы (адреса в памяти) при каждом запуске будут другие. Придумай другой способ идентификации.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 12.09.2016, 17:53   #3
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Чтение записи после перезагрузки приложения

ABTOMAT, даров "сторожил" булочки)) там текстура и не нужна впрынцыпе)
(Offline)
 
Ответить с цитированием
Старый 12.09.2016, 18:47   #4
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Чтение записи после перезагрузки приложения

Как раз через хендлы все заработало. У меня привязка чилда к родителю идет по ссылке на объект который привязан к типу. Стал записывать имя объекта в котором записан хендл. Теперь все работает чисто.
(Offline)
 
Ответить с цитированием
Старый 12.09.2016, 18:55   #5
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Чтение записи после перезагрузки приложения

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


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

Вот что именно ты записываешь в файл? Ответь сам себе на этот вопрос и, возможно, поймёшь, почему у тебя не работает.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 12.09.2016, 19:10   #6
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Чтение записи после перезагрузки приложения

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

Последний раз редактировалось CRASHER, 19.09.2016 в 22:21.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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