forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Смена локаций (http://forum.boolean.name/showthread.php?t=4566)

Crystal 25.09.2007 10:31

Re: Смена локаций
 
Незнаю правильно ли сделал

Код:

If Location<>1 Then
FreeEntity Camera1
FreeEntity Svet
FreeEntity Ploskost
FreeEntity Zemla
End If

If Location<>2 Then
FreeEntity Camera2
FreeEntity Svet2
FreeEntity Ploskost2
FreeEntity Zemla2
End If

Но теперь когда переменная Location равняется двум - вылазиет ошибка
пишет что нету такого обьекта Camera1 которая была гружена функцией которая в свою очередь работает при переменной Location равной одному.

В итоге я думаю что етот чёртов If Location<>1 Then удалил объекты и сразуже хочет их сново удалить, а раз удалять уже нечего то ругается насчёт этого....

Мде... С этой загрузкой локаций придётся покапаться дольше чем я думал...

Crystal 25.09.2007 11:25

Re: Смена локаций
 
Фуф понял чё тормозило, и вправду миры клонировало.
Сделал пока тупую простенькую системку а потом переделаю )

Код:

Global Camera1
Global Svet1
Global Ploskost1

Global Camera2
Global Svet2
Global Ploskost2

Global Camera3
Global Svet3
Global Ploskost3


Function Location1()
Camera1 = CreateCamera()
PositionEntity Camera1,0,20,0
RotateEntity Camera1, 0, 0, 0
CameraRange Camera1,0.01,100000000

Svet1 = CreateLight()
TurnEntity Svet1,30,20,0

Ploskost1= CreatePlane()
Zemla1=LoadTexture("Data\textures\15820652.jpg")
ScaleTexture Zemla1,150,150
EntityTexture Ploskost1,Zemla1
End Function

Function Location2()
Camera2 = CreateCamera()
PositionEntity Camera2,0,20,0
RotateEntity Camera2, 0, 0, 0
CameraRange Camera2,0.01,100000000

Svet2 = CreateLight()
TurnEntity Svet2,30,20,0

Ploskost2= CreatePlane()
Zemla2=LoadTexture("Data\textures\SAND.JPG")
ScaleTexture Zemla2,150,150
EntityTexture Ploskost2,Zemla2
End Function

Function Location3()
Camera3 = CreateCamera()
PositionEntity Camera3,0,20,0
RotateEntity Camera3, 0, 0, 0
CameraRange Camera3,0.01,100000000

Svet3 = CreateLight()
TurnEntity Svet3,30,20,0

Ploskost3= CreatePlane()
Zemla3=LoadTexture("Data\textures\TEX37.BMP")
ScaleTexture Zemla3,150,150
EntityTexture Ploskost3,Zemla3
End Function

While Not KeyDown(1)

If KeyHit(16) Then
Location1()
End If

If KeyHit(17) Then
FreeEntity Camera1
FreeEntity Svet1
FreeEntity Ploskost1
Location2()
End If

If KeyHit(18) Then
FreeEntity Camera2
FreeEntity Svet2
FreeEntity Ploskost2
Location3()
End If

If KeyHit(19) Then
FreeEntity Camera3
FreeEntity Svet3
FreeEntity Ploskost3
Location1()
End If


Тут вроди пока кажется системка не очень. Но все If KeyHit будут заменены на коллизию. В зависимости в какой локации юзер и с переходом в какую локацию коллизится то, и будет удаляться данная локация и грузиться нужная.
Ток тут получится что все мобы заново создадутся и все валяющиеся предметы, но если их хранить в переменных отдельно в глобале то если убиты или подняты не загрузятся. Вроди норм система локаций получается.
Системка то простая и работать будет замечательно.

Но эт всё моя теория. Мож я и не прав.

IGR 25.09.2007 11:40

Re: Смена локаций
 
у тебя в цикле переменная была равна 1 и по этому всё время когда она была равна 1 создавался новай мир (и это каждый цикл) !!

Crystal 25.09.2007 11:47

Re: Смена локаций
 
Да конечно я это понял. Функция создания работала непрерывно. А щас я ток 1 раз вызываю.

Crystal 25.09.2007 12:49

Re: Смена локаций
 
Щас делаю пробную версию смены локаций.
Подскажите как скай бокс удалить? FreeEntity не удаляет нифига!

IGR 25.09.2007 12:51

Re: Смена локаций
 
если он один для обоих локаций, то ненадо его удалять !!

Crystal 25.09.2007 13:17

Re: Смена локаций
 
Он для одной локации, в новой новый скай бокс.

Crystal 25.09.2007 13:29

Re: Смена локаций
 
Так как удалить чёртов бокс? ФриЕнтити его не берёт!!!
Щас доделаю тестовую версию смены локаций по моей системе и выложу сюда ехе на скачивание. Там будет виден баг из-за не возможности мною удалить скай бокс от перемещения с локаций туда сюда боксы перепутываются нахрен.

Damp 25.09.2007 13:30

Re: Смена локаций
 
Наверно ты его составлял из трианглов типа m=CreateMesh итд
Если да то удалять надо FreeEntity m
Goto start - это переход на строку .start , посути как начать прогу заново (так выходить из цикла конечно не красиво, но если локаций меньше... 10000-100000 штук :) то стак оверфлоу не выскочит)
И всетаки не создавай мир в цикле, чтоб небыло даж намека на ошибку.

Crystal 25.09.2007 13:34

Re: Смена локаций
 
Гы во я гоню
всё удаляется
просто в глобал забыл прописать боксы )

ещё 5 мин и демка закончена )

IGR 25.09.2007 13:36

Re: Смена локаций
 
не удаляй !!
перемести его и поменяй брашы т.е. текстуры которые на него натянуты !! и будет тебе новый скай-бокс !!

Crystal 25.09.2007 13:56

Re: Смена локаций
 
Хе. А если размеры второго бокса должны быть меньше первого.
Уж проще удалить всё к чёртовой матери и создать новое.

Так через 40% загрузки выложу свою демку

IGR 25.09.2007 14:00

Re: Смена локаций
 
scaleentity старыйбокс, 0.1,0.1,0.1 и получиш размеры нового !! :)
не удаляй, поскольку скайбокс это не цельный entity, ты его командой freeentity не удалиш, а удалять каждий триангл это хуже чем поменять размер бокса !!

Crystal 25.09.2007 14:03

Re: Смена локаций
 
Короче вот ссылка на скачивание:
http://ifolder.ru/3478416
3 с чемто метра (медиа весомая)

Вопщем запустите файл вылезет чёрный экран с разрешением 1024-768
Почему чёрный? Дык ведь ни мира ни вас нет! Его надо сотварить!
Тварим нажав кнопку Q (ток я вас прошу ради бога не жмите её второй раз. иначе вылезет параллельный мир с вашим клоном)

Далее видем корабль и планету. Летим к планете.
Ах да как лететь? Тыкая клавишу W увеличиваем скорость тыкая S понижаем. A D крен корабля. Стрелки вниз и вверх это лететь вверх и вниз. Стрелки влево вправо лететь влево вправо. Ещё рулить мышкой можно но тут кому как нравится.
Вопщем летим на планету и залетаем в неё. Если надо вернуться в космос летим в небо.
Вопщем помоему получилась неплохая система смены локаций по моему методу.
Тестируйте )

Crystal 25.09.2007 14:04

Re: Смена локаций
 
Цитата:

Сообщение от IGR
scaleentity старыйбокс, 0.1,0.1,0.1 и получиш размеры нового !! :)
не удаляй, поскольку скайбокс это не цельный entity, ты его командой freeentity не удалиш, а удалять каждий триангл это хуже чем поменять размер бокса !!

Да уже испытал. удаляется он фриентити.


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

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