|
3D-программирование Вопросы, касающиеся программирования 3D мира |
25.09.2007, 08:28
|
#1
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Смена локаций
Допустим у меня есть 2 функции. Каждая создаёт свою камеру свой свет свою плоскость. Тобиш 2 функции это 1 и 2 локации. Есть у меня например переменная location изменяя которую я заставляю работать функции. например если переменная равна одному работает первая функция, если двум то работает вторая.
А вот суть вопроса.
Например заработала у меня эта первая функция создались в ней камера свет плоскоать, и я вдруг меняю переменную функция перестаёт работать включается другая функция где грузятся новые камера свет плоскость.
Вопрос в том если я перестал выполнять первую функцию исчезнут ли объяекты которые она создавала? тобиш камера свет плоскость первой локации. Или мне их придётся при смене переменной удалять командой фри ентити?
|
(Offline)
|
|
25.09.2007, 08:38
|
#2
|
|
Re: Смена локаций
прийдется удалять ручками
у тебя же в памяти хранятся только ссылки на обьекты (указатели)
поетому даже если ты их затрешь то из памяти они никуда не денутся
|
|
|
25.09.2007, 08:54
|
#3
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Смена локаций
Посмотри так пойдёт? Вроди всё работает как надо на Q грузится первая локация, на W вторая локация. Ток чёто медленно грузится почемуто.
;--------------------------------------------------------------------------------------- WORLD:
Graphics3D 1024, 768, 32
SetBuffer BackBuffer()
HidePointer
Global Location=0
Global Camera1
Global Svet
Global Ploskost
Global Zemla
Global Camera2
Global Svet2
Global Ploskost2
Global Zemla2
Function Location1()
Camera1 = CreateCamera()
PositionEntity Camera1,0,20,0
RotateEntity Camera1, 0, 0, 0
CameraRange Camera1,0.01,100000000
Svet = CreateLight()
TurnEntity Svet,30,20,0
Ploskost= CreatePlane()
Zemla=LoadTexture("Data\textures\15820652.jpg")
ScaleTexture Zemla,150,150
EntityTexture Ploskost,Zemla
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
While Not KeyDown(1)
If KeyHit(16) Then Location=1
If Location=1 Then
Location1()
End If
If KeyHit(17) Then
Location=2
End If
If Location=<1>1 Then
FreeEntity Camera1
FreeEntity Svet
FreeEntity Ploskost
FreeEntity Zemla
End If
If Location=<2>2 Then
FreeEntity Camera2
FreeEntity Svet2
FreeEntity Ploskost2
FreeEntity Zemla2
End If
If Location=2 Then
Location2()
End If
UpdateWorld
RenderWorld
Flip
Wend
End
|
(Offline)
|
|
25.09.2007, 08:59
|
#4
|
|
Re: Смена локаций
oiiii
zdelay prosto cthobi bilo :
function CreateLocation1()
...
end function
function FreeLocation1()
...
end function
ps. ya v fluxbox v linux'e , tut poka russkogo netu
|
|
|
25.09.2007, 09:08
|
#5
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Смена локаций
Чёт я смысла непонял. ты имееш ввиду так? :
function CreateLocation1()
Camera1 = CreateCamera()
PositionEntity Camera1,0,20,0
RotateEntity Camera1, 0, 0, 0
CameraRange Camera1,0.01,100000000
Svet = CreateLight()
TurnEntity Svet,30,20,0
Ploskost= CreatePlane()
Zemla=LoadTexture("Data\textures\15820652.jpg")
ScaleTexture Zemla,150,150
EntityTexture Ploskost,Zemla
end function
function FreeLocation1()
FreeEntity Camera1
FreeEntity Svet
FreeEntity Ploskost
FreeEntity Zemla
end function
While Not KeyDown(1)
If Location=<1>1 Then
FreeLocation1()
End If
Зачем удаление в функцию пихать? Так работать быстрее будет?
|
(Offline)
|
|
25.09.2007, 09:16
|
#6
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Re: Смена локаций
Кажется не совсем пойдет...
Походу какмера у тебя оздается в цикле и есть возможность создавать одну и ту же много раз.
Сколько раз нажмешь KeyHit(16) столько камер будет...
Эти инициализации имхо лучше делать перед циклом образно говоря типа так:
InitGraphicMode
InitGlobalVar&Constant
.start
Select level
Case 1
InitCamera1
CreateWorld1
Case 2
InitCamera2
CreateWorld1
...
End Select
цикл
While Not KeyDown(1)
if KeyHit(16)
level=level+1;на следующий левел
free_all_world; там прописать убой всех энтити, света и камеры
Goto start
End If
...
|
(Offline)
|
|
25.09.2007, 09:18
|
#7
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Смена локаций
Чёто я загрузив мир вообще долговато не могу закрыть окно программы.
Моя система с 3 поста случаем не плодит триллион миров??? Вроди ток по 1 каждого элемента загрузиться должно.
|
(Offline)
|
|
25.09.2007, 09:25
|
#8
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Смена локаций
Сообщение от Damp
Кажется не совсем пойдет...
Походу какмера у тебя оздается в цикле и есть возможность создавать одну и ту же много раз.
Сколько раз нажмешь KeyHit(16) столько камер будет...
Эти инициализации имхо лучше делать перед циклом образно говоря типа так:
InitGraphicMode
InitGlobalVar&Constant
.start
Select level
Case 1
InitCamera1
CreateWorld1
Case 2
InitCamera2
CreateWorld1
...
End Select
цикл
While Not KeyDown(1)
if KeyHit(16)
level=level+1;на следующий левел
free_all_world; там прописать убой всех энтити, света и камеры
Goto start
End If
...
|
Хз. Если я W нажму второй раз переменная же всё равно равная 1 останется. Да а может и создастся второй мирок с второй камерой. Но я же в игре не буду себе локации грузить клавишами )
Я пока примерную систему загрузки уровней делаю, а дальше будет грузиться новая локация при коллизии юзера с концом локации, а старая сразуже удаляться. Там я уже не смогу второй раз проколлизиться ибо буду уже во второй локации.
|
(Offline)
|
|
25.09.2007, 09:27
|
#9
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Re: Смена локаций
так не ставь создание мира в цикл.
|
(Offline)
|
|
25.09.2007, 09:36
|
#10
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Смена локаций
Я не понял что значит не ставить создание мира в цикл.
Ты мне скопируй с моего кода то что я не должен ставить и скажи куда недолжен и почему?
|
(Offline)
|
|
25.09.2007, 09:51
|
#11
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Re: Смена локаций
Функции Location1, Location2 лучше вызывать ДО While Not KeyDown(1) (тоесть цикла).
Можно еще посоветовать юзать стандартную функцию FreeWorld , почитай в хэлпе она облегчит удаление.
---
Незнаю поможет ли, там есть смена локации (какраз с Goto), но пример не самый простой.
http://damp.ucoz.ru/GAME.rar - 500Кб
|
(Offline)
|
|
25.09.2007, 09:56
|
#12
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Смена локаций
Если я
If KeyHit(16) Then Location=1
If Location=1 Then
Location1()
End If
If KeyHit(17) Then Location=2
If Location=2 Then
Location2()
End If
пропишу до While Not KeyDown(1)
то у меня нихрена работать не будет
А вот шо есть Goto понятия не имею ) Свою же систему загрузки делаю.
|
(Offline)
|
|
25.09.2007, 10:01
|
#13
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Смена локаций
эк, Вы, батенька жжоте.
If Location=<1>1 Then ....
If Location=<2>2 Then .....
сие что означает, сэр?
а всего лиеш это
if location <=(2>2)
или
if location<=(false)
оно же
if location<=(0)
собсно с еденицетй таже проблема.
ЗЫ. Чо то ненравится мне твоя идея, Crystal, таким макаром грузить локации. Имхо надо выделить общую часть (камера, свет, скайбокс, оружие, враги, деревья) / которые ниезменны от уровня к уровню и нетрогать при загрузке локации их вообще.
а в ф-ию передавать параметр, например LoadLocation(2)
а в самой функции уже парсить это select - ом и загружать локацию в зависимости от значения.
|
(Offline)
|
|
25.09.2007, 10:11
|
#14
|
Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Смена локаций
Гы )
Да хрен его знает я решил что смогу обозначить этим то что если переменная меньше или больше единици то удаляем мир нахрен.
Так в новой локации новые мобы новые деревья.
Я вообще хочу в новой локации и юзера по новой создать, а всякое барахло что юзер с собой таскает всё равно в переменных храниться будет.
|
(Offline)
|
|
25.09.2007, 10:14
|
#15
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Смена локаций
значит так if variable<>1 надо
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:51.
|