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

Kingston 11.02.2011 15:24

Создание задания и выполнение события
 
Помогите пожалуйста реализовать! Я в блитз совсем новичок!

Вот к примеру:
Есть задание,
Например, открыть дверь с помощью рычага,
При зажатии кнопки TAB появляется инфо-меню, где располагаются задания.
Это задание «открытие двери с помощью рычага» есть в инфо-меню,
Цвет текста активного задания светлый.
Если опустить кнопку TAB, инфо-меню исчезнет.
После того как я дернул рычаг и дверь открылась.
В инфо-меню, задание, «открыть дверь с помощью рычага» текст стал темным.
Последующие задания это светлый текст.

Помогите пожалуйста реализовать, и возможно ли так сделать? Дело в том что на локации может быть много таких заданий, просто есть сомнение, что оно будет работать не правильно. Это получается как тригер действие:

Заданий 3,
Задание 1: открыть с дверь с помощью рычага. текст светлый
Дернул, дверь открылась.
Задание 1 стало темным,
Задание 2, бла бла бла, светлый текст
выполнил бла бла бла и т.д....
Задание 2 выполнено, текст темный!

За помощь огромное спасибо!!! :super:

RBK 12.02.2011 00:55

Ответ: Создание задания и выполнение события
 
Да так сделать возможно, используй типы.
Код:

Type jobs
  ; Номер задания
  Field id
  ; Состояние ( 1-выполнено\0-нет )
  Field performed
  ; Текст задания
  Field job_text$
End Type

Создаёшь запись с первым заданием, нажимаешь рычаг получаешь ключ=1(номер задания будет ключом), ставишь a\performed=1 и создаёшь второе задание, и тд.
Чтобы вывести список заданий перебираем тип jobs (For a.jobs = Each jobs)
Цвет текста определяет a\performed : 0-светлый(Color 255, 255, 255), 1-темный(Color 100, 100, 100)

Kingston 12.02.2011 01:42

Ответ: Создание задания и выполнение события
 
Ого! Спасибо большое! С удовольствием разберусь, но я бы не додумался сам об этом... Была только идея о создании Типа задания... не более:)

Kingston 12.02.2011 01:53

Ответ: Создание задания и выполнение события
 
Ещё 1 момент, мне всё же интересно, как создаются триггеры.
Нужна информация!

К примеру, я иду по коридору, зашел в триггер зону и проигрывается видео заставка( OpenMovie("video.wmv") )...

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

За ответ огромное спасибо!

RegIon 12.02.2011 12:14

Ответ: Создание задания и выполнение события
 
PositionEntity hero,X#,Y#,Z#;.......Полезно внизу

Kingston 12.02.2011 12:25

Ответ: Создание задания и выполнение события
 
Ну на счет Position это я знаю, а вот что перед ним...

RegIon 12.02.2011 12:54

Ответ: Создание задания и выполнение события
 
КАК ПОНЯТЬ ЧТО ПЕРЕД...капс забыл выр..пример:
n=0;1 вверху-1 внизу
if n=1
n=0
if n=0 positionentity hero,X,Y,Z:n=-1;-вниз
endif
if n=-1
n=0
if n=0 positionentity hero,X,Y,Z:n=1;вверх
endif

так что ли...хочешь..проверять внизу или вверху??

RBK 12.02.2011 13:04

Ответ: Создание задания и выполнение события
 
Цитата:

И ещё, у меня есть на локации лифт, который спускается под землю, но я хотел бы пропустить этот момент. Хочу сделать так, подхожу к лифту, нажимаю кнопку и мгновенно появляюсь уже внизу и таким же макаром обратно на верх!
Это реализовать проще всего(потому что обычный телепорт)
Код:

Function teleport(x#, y#, z#)
  ; Убераем столкновение
  EntityType player, 0
  ; Перемещаем
  PositionEntity player, x#, y#, z#
  ; Возвращаем столкновения
  EntityType player, player_type
End Function

Нажимаешь кнопку, получаешь координаты. Вызываешь teleport(x#, y#, z#)

RegIon 12.02.2011 13:14

Ответ: Создание задания и выполнение события
 
Цитата:

Сообщение от RBK (Сообщение 178684)
Это реализовать проще всего(потому что обычный телепорт)
Код:

Function teleport(x#, y#, z#)
  ; Убераем столкновение
  EntityType player, 0
  ; Перемещаем
  PositionEntity player, x#, y#, z#
  ; Возвращаем столкновения
  EntityType player, player_type
End Function

Нажимаешь кнопку, получаешь координаты. Вызываешь teleport(x#, y#, z#)

я понял он хочет тестит где находится... а так делать совсем необязательно..ведь positionentity не использует Тупаки колизии..и может быть баг когда обратно тупак цепляешь(провал через стену пример)

RBK 12.02.2011 13:50

Ответ: Создание задания и выполнение события
 
Цитата:

я понял он хочет тестит где находится...
Нет, прочти цитату внимательней, у него два этажа на уровне, кнопка переносит игрока на другой этаж.
Цитата:

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

to Kingston
Цитата:

К примеру, я иду по коридору, зашел в триггер зону и проигрывается видео заставка( OpenMovie("video.wmv") )...
Я использую столкновения объектов.
Для триггера: создадим куб(CreateCube()), сделаем его прозрачным(EntityAlpha ...),установим тип триггер(EntityType ...),запишем в имя номер действия(NameEntity ...).
Теперь активатор: создаем пивот с родителем(CreatePivot(player)), установим тип активатор, указываем радиус проверки(EntityRadius...), создаем столкновение между типами(Collisions активатор, триггер, 2, 1)
Вызываем обновление активатора
Код:

. . .
act=CreatePivot(player)
; и тд по списку, см. активатор выше
. . .

Function triger_update()
  Local ent
  ; проверяем столкновение с триггером
  ent = EntityCollided(act, тип триггер)
  ; если произошло - обрабатываем
  If ent > 0
    ; отключаем триггер
    EntityType ent, 0
    ; столкновение сдвинуло активатор - возвращаем на место
    PositionEntity act, 0, 0, 0
    ; функция возвращает имя триггера(номер действия)
    Return EntityName$( ent )
  Else
    ; если столкновение нет возвращаем 0
    Return 0
  End If
End Function

А по возвращённому номеру действия определяешь что произойдёт("video.wmv" или на голову что-нибудь упадёт)

Kingston 12.02.2011 18:10

Ответ: Создание задания и выполнение события
 
Всех благодарю! Спасибо за помощь!
Что то не получается с триггером...
Что тут не так?
Function trigger()
cube=CreateCube()
ent=CreateCube()
PositionEntity cube,20,2,-25
EntityAlpha ent,0
PositionEntity ent,20,1,-25
EntityType ent,activ
NameEntity ent,1
activ=CreatePivot(myhero)
EntityRadius activ,2

End Function

Function update_trigger()
Local ent
ent = EntityCollided(activ,tcube)
If ent > 0
EntityType ent, 0
PositionEntity activ, 0, 0, 0
Return EntityName$( ent )
Else
Return 0
End If
End Function

В главный цикл добавил, trigger, update_triger

RBK 12.02.2011 21:09

Ответ: Создание задания и выполнение события
 
Код:

Const activ_type = 10
Const tcube = 20
Global activ
. . .
;Это надо написать там где создаёшь игрока myhero
activ=CreatePivot(myhero)
EntityRadius activ,2
EntityType activ, activ_type

. . .
Function trigger()
  cube=CreateCube();Создаем куб
  ;Работаем с ним
  PositionEntity cube,20,2,-25
  EntityAlpha cube,0
  EntityType cube, tcube
  NameEntity cube,1
End Function

Функцию trigger() нужно вызвать один раз, до главного цикла.
В главном цикле вызываем a=update_trigger(), если столкнёшься с триггером в a будет 1 (но только один цикл, потом триггер отключится)
Не забудь перед главным циклом Collisions activ_type, tcube, 2, 1 написать, а в цикле вызывать UpdateWorld.

Kingston 12.02.2011 21:36

Ответ: Создание задания и выполнение события
 
Спасибо, все получилось! :)

Kingston 12.02.2011 21:45

Ответ: Создание задания и выполнение события
 
RBK, а как ты так хорошо в этом разбираешься, Во всех этих?
Мне например сложно реализовать свои идеи, просто наверно я не правильно строю наверно...
Но всё же как? Поделись опытом пожалуйста!

RBK 12.02.2011 22:06

Ответ: Создание задания и выполнение события
 
Я почти два года пользуюсь blitz3d, опыт наверное:dontknow: . Всё идеи надо делать постепенно, комментировать свой код.
Лист бумаги и карандаш тоже хорошо помогают. Но главное, хоть раз прочитать справку(желательно на понятном языке) полностью.


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

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