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
Господа, а не проще ли в аське пообщаться?

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


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

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