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=4420)

Crystal 12.09.2007 07:01

Здравствуйте!
Столкнулся с проблемой не решаемой на моём уровне знаний блитца )
Даж незнаю как объяснить...

Ну короче например у меня 2 функции. Первая создаёт объект и камеру которую привязывает к нему. Вторая функция реализует управление объектом с клавиш.

Если они у меня одновременно запущенны гденибудь под
Код:

While Not KeyDown(1)
функция1()
функция2()

то всё нештяк объект есть всё управляется всё зашибись.
Но вдруг решил я что объекта не должно быть при старте игры и что он должен вызываться ну например на клавишу.
И вот значит так клавишей вызывается функция создающая объект и камеру.
Код:

If KeyHit(16) Then
функция()
End If

Но проблема при например такой системе
Код:

While Not KeyDown(1)
If KeyHit(16) Then
функция()
End If
функция2()

Будет сразу вылазить ошибка ибо функция с управлением объекта запускается и грит чувак а чем я буду управлять? нету такого объекта нафиг! усё ошибка клосед виндо =)
Знач пробую решить это запуском обоих функций с клавиши
Код:

While Not KeyDown(1)
If KeyHit(16) Then
 функция()
 функция2()
 End If

Итак объект с камерой загрузился, ошибок не вылазиет. НО!
Управление объектом именнуемое функция2 непашет ибо чтобы создать объект достаточно один раз вызвать функцию, но чтобы управлять объектом с помощю другой функции нужно чтобы эта функция не на миллисикунду вызвалась а работала постоянно!

Так вот суть вопроса:
Надо мне чтобы оби функции вызывались с 1 клавиши и чтобы первая функция сработала 1 раз а не плодила мне новые объекты с новыми камерами убивая блитц а вторая функция наоборот постоянно должна работать чтобы обеспечить объект управлением.

Подскажите пожалуйста как реализовать?
Я уверен что это очень просто но я незнаю как...:wallbash:

Кстати сам объект в моей подписи =)

О вот ещё забыл спросить. И как потом после остановить эту функцию с управлением? выключить нафиг.
И как можно удалить объекты созданные функцией?


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


Вопщем жду помощи товарисчи! ::o"

johnk 12.09.2007 07:35

Re: Функции (
 
Вызываешь функцию №1, и перед вызовом второй проверяешь, есть ли объект, и еще, зачем создавать каждый раз новую камеру? Создай одну, а потом привязывай. Функцию тебе нужно сделать чтоб, создавался объект, к нему привязывать камеру, и если надо камеру передвинуть в его положение.

Crystal 12.09.2007 07:39

Re: Функции (
 
Нуу там камеру ещё на разное расстояние отдалять надо у каждого объекта...

Можно пример по проверке есть ли объект?

jimon 12.09.2007 08:46

Re: Функции (
 
if Blablabla = Null then обьекта нету

Raiter 12.09.2007 12:37

Re: Функции (
 
player_est = 0

While Not KeyDown(1)
If KeyHit(16) Then
функция()
player_est = 1
End If
if player_est = 1 then функция2()

IGR 12.09.2007 12:48

Re: Функции (
 
или каждой функции свою клавишу, или постав счётчик на одну клавишу и тогда функции будут поочереди заменять друг друга когда будеш нажимать на эту клавишу !!

LD 12.09.2007 14:49

Re: Функции (
 
Итак:
в начале создаешь камеру
и событие, по которому должна выполняться функция обработки, в функции обработки пишешь: if твое событие истино then
if твой обьект <> 0
здесь работа над объдктом
ендиф
ендиф
потом в цикле вызываешь эту функцию, не забудь когда надо присвоить значение твоего усковия выполнения обработки когда тебе надо, если обьекра нет то функция не выполняеться

Raiter 12.09.2007 15:36

Re: Функции (
 

Не в обиду, но ты ещё собирался ММОРПГ писать? :-)

Crystal 12.09.2007 17:18

Re: Функции (
 
Цитата:

Сообщение от Raiter

Не в обиду, но ты ещё собирался ММОРПГ писать? :-)

Я?

Я предложил команде рпгешников с той темы ммо писать.

Crystal 12.09.2007 17:25

Re: Функции (
 
Цитата:

Сообщение от Raiter
player_est = 0

While Not KeyDown(1)
If KeyHit(16) Then
функция()
player_est = 1
End If
if player_est = 1 then функция2()

чёто неработает (
вторая функйия не может найти объект ибо объект не в глобале. а в глобал я его из функции поставить немогу...

походу надо както делать и создане объекта и его управление в одной функции

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

Ниже предоставлю части кода которые мы щас обсуждаем

Код:

Global speedk1#=0
Global mXSp#
Global mYSp#
;тот объект (щас не в функции)
Global k1 = LoadMesh("Data\object\ships\k1\k1.b3d")
ScaleEntity k1,1,1,1
PositionEntity k1,0,0,0
RotateEntity k1, 0, 0, 0
;камера его
Camera = CreateCamera(k1)
PositionEntity Camera,3,60,-320
RotateEntity Camera, 0, 0, 0
CameraRange Camera,1.0,100000000
;функция управление
Function k1u()
Zkrenk1#=0.5
XYkrenk1#=0.5
TSpeed#=0.010
    TurnEntity k1,mYSp*TSpeed,0,0
    TurnEntity k1,0,-mXSp*TSpeed,0
    MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
    MoveEntity k1,0,0,+speedk1#
If KeyDown(30) Then TurnEntity k1,0,0,+Zkrenk1#
If KeyDown(32) Then TurnEntity k1,0,0,-Zkrenk1#
If KeyDown(200) Then TurnEntity k1,+XYkrenk1#,0,0
If KeyDown(208) Then TurnEntity k1,-XYkrenk1#,0,0
If KeyDown(203) Then TurnEntity k1,0,+XYkrenk1#,0
If KeyDown(205) Then TurnEntity k1,0,-XYkrenk1#,0
If KeyHit(17) Then
speedk1#=speedk1#+15
End If
If KeyHit(31) Then
speedk1#=speedk1#-15
End If
If speedk1#=60 Then
speedk1#=45
EndIf
If speedk1#=-15 Then
speedk1#=0
EndIf
End Function
While Not KeyDown(1)
; вызываю функцию управление
k1u()
mXSp=MouseXSpeed()
mYSp=MouseYSpeed()
UpdateWorld
RenderWorld
Flip
Wend
End

В таком виде работает. Но мне надо сделать както чтобы не сразу работало а по какомуто событию, нарпимер нажатие Q как писал выше.


Скрин

Raiter 12.09.2007 17:27

Re: Функции (
 
не может такого быть. опять что-ьл не правильно делаеш

Crystal 12.09.2007 17:50

Re: Функции (
 
Цитата:

Сообщение от Raiter
не может такого быть. опять что-ьл не правильно делаеш

Посмотри части кода сверху.

Raiter 12.09.2007 18:07

Re: Функции (
 
Ща посмотрю :)

Цитата:

вторая функйия не может найти объект ибо объект не в глобале. а в глобал я его из функции поставить немогу...
ты можеш объявить его глобальным в начале програмы ;)

Вообще всё елеметарно. Выложи код с медией - сделаю всё :)

ЗЫЖ первый скрин напоминает мне разукрашеного пингвина, который приложил "крылья" к телу и пригнул вперед.... :-)

dimanche13 12.09.2007 18:45

Re: Функции (
 
Господа, а не проще ли в аське пообщаться?

Crystal 12.09.2007 20:12

Re: Функции (
 
Цитата:

Сообщение от dimanche13
Господа, а не проще ли в аське пообщаться?

Мистер диманче
Вообщето мы пишем по теме в нужном разделе.
Почему это мы должны через асю? форум для чего?
Быть может вообще не будем заходить на форум а будем все в асях общяться?

Crystal 12.09.2007 20:15

Re: Функции (
 
Цитата:

Сообщение от Raiter
Ща посмотрю :)



ты можеш объявить его глобальным в начале програмы ;)

Вообще всё елеметарно. Выложи код с медией - сделаю всё :)

ЗЫЖ первый скрин напоминает мне разукрашеного пингвина, который приложил "крылья" к телу и пригнул вперед.... :-)

це дизайн корабля хлопец =) я решил что сзади должен выглядеть он так )

насчёт глобала ты имел ввиду Global k1 и всё?

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

dimanche13 12.09.2007 20:18

Re: Функции (
 
Ну во-первых в аське быстрее, во-вторых в 4 посте уже прозвучал ответ и в третьих проблема ИМХО не стоит и выеденого яйца, проблема в подходу к структуре кода.
С уважением.

Crystal 12.09.2007 20:26

Re: Функции (
 
Если ты имееш ввиду

Код:

if Blablabla = Null then обьекта нету
То я незнаю что такое блаблабла
и что писать вместо "Объекта нету"


Поставил вначале Global k1
запускаю всю эту байду и функция управления пишет что незнает такого объекта как k1 ентити доес нот ексист фак ю спилберг пишет.
Значит то что я сделал объект глобальным мне не помогло.

Код:

Global speedk1#=0
Global mXSp#
Global mYSp#
Global k1
Function k1()
k1 = LoadMesh("Data\object\ships\k1\k1.b3d")
ScaleEntity k1,1,1,1
PositionEntity k1,0,0,0
RotateEntity k1, 0, 0, 0
;---------------------------------------------------KAMEPA:
Include "Data\object\camera.txt"
End Function
 
Function k1u()
Zkrenk1#=0.5
XYkrenk1#=0.5
TSpeed#=0.010
TurnEntity k1,mYSp*TSpeed,0,0
TurnEntity k1,0,-mXSp*TSpeed,0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
MoveEntity k1,0,0,+speedk1#
If KeyDown(30) Then TurnEntity k1,0,0,+Zkrenk1#
If KeyDown(32) Then TurnEntity k1,0,0,-Zkrenk1#
If KeyDown(200) Then TurnEntity k1,+XYkrenk1#,0,0
If KeyDown(208) Then TurnEntity k1,-XYkrenk1#,0,0
If KeyDown(203) Then TurnEntity k1,0,+XYkrenk1#,0
If KeyDown(205) Then TurnEntity k1,0,-XYkrenk1#,0
If KeyHit(17) Then
speedk1#=speedk1#+15
End If
If KeyHit(31) Then
speedk1#=speedk1#-15
End If
If speedk1#=60 Then
speedk1#=45
EndIf
If speedk1#=-15 Then
speedk1#=0
EndIf
End Function
 
player_est = 0
While Not KeyDown(1)
If KeyHit(16) Then
k1()
player_est = 1
End If
If player_est = 1 Then k1u()
mXSp=MouseXSpeed()
mYSp=MouseYSpeed()
UpdateWorld
RenderWorld
Flip
Wend
End


Crystal 12.09.2007 20:59

Re: Функции (
 
Фуф слава тебе госпади заработало!
Я ещё до совета раитера системку делал с увеличением переменной при нажатии клавиш но неработало, постоянно ентити даос нот ексист было.
Оказывается неработало потому что я не спал 2 дня и туплю ))
Нечайно в одной из строчек кода лишний раз вызвал Функцию2
от туда и все проблемы ))

Код:

Global k1u#=0
If KeyHit(16) Then
k1()
k1u#=k1u#+1
End If
If k1u#=1 Then k1u()

Был вот такой косяк у меня:
Код:

If k1u#=1 Then k1u()
k1u()

Щас всё работает как хотел но вышла новая проблема, управление с клавиш работает, а с мышки работать перестало ))
но исправил быстро, перинёс

Код:

mXSp=MouseXSpeed()
mYSp=MouseYSpeed()

В функцию 2 =)

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

Raiter 12.09.2007 21:01

Re: Функции (
 
Бляблябля - это твой корабль :)

If blablabla <> null then объект есть...

Цитата:

Теперь меня интерисует как можно удалить объект и камеру, и выключить функцию управленния ну например тоже на кнопку?
If KeyDown(key) Then
FreeEntity Camera
FreeEntity Object
Upravl = 0
End If
...
If Upravl <> 0 Then UpdutePlayer()

Crystal 12.09.2007 21:25

Попробовал но выдаёт ентити даес нот ексист.
Вродибы камера и корабль в глобале но ета функция их невидет почемуто

Попробовал вот так удалить корабль

Код:

Global k1u2#=0
 
If KeyHit(18) Then
k1u2#=k1u2+1
End If
If k1u2#=1 Then
FreeEntity k1
End If

Пишет ентити доес нот ексист k1

Мож я опять гоню? FreeEntity точно объекты удаляет?

Или наерно скорее всего объекты то удаляются а функция с управлением остаётся,
а так как нету корабля функции упралять нечем вылазиет ошибка.

Как убить функцию?

работает например в цикле BOO()

вот чтоб её убрать удалить нафиг.

Jet 12.09.2007 23:22

Re: Функции (
 
Цитата:

Как убить функцию?

работает например в цикле BOO()

вот чтоб её убрать удалить нафиг.
функции не убиваются)
ты их просто перестаешь вызывать.. по какому-либо условию.

Crystal 12.09.2007 23:58

Re: Функции (
 
Канешно я перестаю их вызывать!
Вопрос в том как?

Я вот непонял, что это должно делать?

Цитата:

Upravl = 0
If Upravl <> 0 Then UpdutePlayer()

Crystal 13.09.2007 00:18

Re: Функции (
 
Ухаха =)
Разобрался.
Функцию то перестать вызывать легко просто была проблема.
Персатю вызывать функцию значит удаляю корабль и камеру.
А мне пишет мол фак ю спилберк ентити доес нот ексист Camerak1
Это я понял получилось из-за последовательности удаления объектов
у меня сначало удалялся корабль а потом камера. И мне писало камеры типа нету.

Если я удаляю объект то камера привязанная кнему автоматом удаляется чтоли?????

Вопщем если я удаляю сначало камеру а потом корабль то никаких ошибок у меня нету всё замечательно работает!

Код:

If KeyHit(16) Then
k1()
k1u#=1
End If
If k1u#=1 Then k1u()
 
If KeyHit(18) Then
k1u#=0
FreeEntity Camerak1
FreeEntity k1
End If


Crystal 13.09.2007 16:42

Re: Функции (
 
Цытата

Цитата:

Если я удаляю объект то камера привязанная кнему автоматом удаляется чтоли?????

H@NON 13.09.2007 17:06

Re: Функции (
 
При удалении объекта удалаются автоматически все его чилды. Поэтому , если ты хочешь этого избежать, то тебе надо распарентить нужные чилды от объекта перед его удалением.

ЗЫЖ всю тему не читал...

Crystal 13.09.2007 17:16

Re: Функции (
 
Всё ясно )
Просто если я сначало удалял объект а потом пытался удалить его камеру то писало что камеры нету ошибка.
А если удалял сначал окамеру потом объект всё зашибись )
Вот и подумал наверно он вместе с камерой удаляется.
Ты подтвердил мои доводы, спасибо!


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

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