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 08:28

Смена локаций
 
Допустим у меня есть 2 функции. Каждая создаёт свою камеру свой свет свою плоскость. Тобиш 2 функции это 1 и 2 локации. Есть у меня например переменная location изменяя которую я заставляю работать функции. например если переменная равна одному работает первая функция, если двум то работает вторая.
А вот суть вопроса.
Например заработала у меня эта первая функция создались в ней камера свет плоскоать, и я вдруг меняю переменную функция перестаёт работать включается другая функция где грузятся новые камера свет плоскость.
Вопрос в том если я перестал выполнять первую функцию исчезнут ли объяекты которые она создавала? тобиш камера свет плоскость первой локации. Или мне их придётся при смене переменной удалять командой фри ентити?

jimon 25.09.2007 08:38

Re: Смена локаций
 
прийдется удалять ручками
у тебя же в памяти хранятся только ссылки на обьекты (указатели)
поетому даже если ты их затрешь то из памяти они никуда не денутся

Crystal 25.09.2007 08:54

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


jimon 25.09.2007 08:59

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 :)

Crystal 25.09.2007 09:08

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

Зачем удаление в функцию пихать? Так работать быстрее будет?

Damp 25.09.2007 09:16

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
...

Crystal 25.09.2007 09:18

Re: Смена локаций
 
Чёто я загрузив мир вообще долговато не могу закрыть окно программы.
Моя система с 3 поста случаем не плодит триллион миров??? Вроди ток по 1 каждого элемента загрузиться должно.

Crystal 25.09.2007 09:25

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 останется. Да а может и создастся второй мирок с второй камерой. Но я же в игре не буду себе локации грузить клавишами )
Я пока примерную систему загрузки уровней делаю, а дальше будет грузиться новая локация при коллизии юзера с концом локации, а старая сразуже удаляться. Там я уже не смогу второй раз проколлизиться ибо буду уже во второй локации.

Damp 25.09.2007 09:27

Re: Смена локаций
 
:) так не ставь создание мира в цикл.

Crystal 25.09.2007 09:36

Re: Смена локаций
 
Я не понял что значит не ставить создание мира в цикл.
Ты мне скопируй с моего кода то что я не должен ставить и скажи куда недолжен и почему?

Damp 25.09.2007 09:51

Re: Смена локаций
 
Функции Location1, Location2 лучше вызывать ДО While Not KeyDown(1) (тоесть цикла).
Можно еще посоветовать юзать стандартную функцию FreeWorld , почитай в хэлпе она облегчит удаление.
---
Незнаю поможет ли, там есть смена локации (какраз с Goto), но пример не самый простой.
http://damp.ucoz.ru/GAME.rar - 500Кб

Crystal 25.09.2007 09:56

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 понятия не имею ) Свою же систему загрузки делаю.

HolyDel 25.09.2007 10:01

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 - ом и загружать локацию в зависимости от значения.

Crystal 25.09.2007 10:11

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

эк, Вы, батенька жжоте.
Гы )
Да хрен его знает я решил что смогу обозначить этим то что если переменная меньше или больше единици то удаляем мир нахрен.

Цитата:

ЗЫ.
Так в новой локации новые мобы новые деревья.
Я вообще хочу в новой локации и юзера по новой создать, а всякое барахло что юзер с собой таскает всё равно в переменных храниться будет.

HolyDel 25.09.2007 10:14

Re: Смена локаций
 
значит так if variable<>1 надо


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

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