|
3D-программирование Вопросы, касающиеся программирования 3D мира |
11.02.2011, 15:24
|
#1
|
AnyKey`щик
Регистрация: 11.02.2011
Сообщений: 10
Написано одно полезное сообщение (для 3 участников)
|
Создание задания и выполнение события
Помогите пожалуйста реализовать! Я в блитз совсем новичок!
Вот к примеру:
Есть задание,
Например, открыть дверь с помощью рычага,
При зажатии кнопки TAB появляется инфо-меню, где располагаются задания.
Это задание «открытие двери с помощью рычага» есть в инфо-меню,
Цвет текста активного задания светлый.
Если опустить кнопку TAB, инфо-меню исчезнет.
После того как я дернул рычаг и дверь открылась.
В инфо-меню, задание, «открыть дверь с помощью рычага» текст стал темным.
Последующие задания это светлый текст.
Помогите пожалуйста реализовать, и возможно ли так сделать? Дело в том что на локации может быть много таких заданий, просто есть сомнение, что оно будет работать не правильно. Это получается как тригер действие:
Заданий 3,
Задание 1: открыть с дверь с помощью рычага. текст светлый
Дернул, дверь открылась.
Задание 1 стало темным,
Задание 2, бла бла бла, светлый текст
выполнил бла бла бла и т.д....
Задание 2 выполнено, текст темный!
За помощь огромное спасибо!!!
|
(Offline)
|
|
12.02.2011, 00:55
|
#2
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Создание задания и выполнение события
Да так сделать возможно, используй типы.
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)
|
(Offline)
|
|
12.02.2011, 01:42
|
#3
|
AnyKey`щик
Регистрация: 11.02.2011
Сообщений: 10
Написано одно полезное сообщение (для 3 участников)
|
Ответ: Создание задания и выполнение события
Ого! Спасибо большое! С удовольствием разберусь, но я бы не додумался сам об этом... Была только идея о создании Типа задания... не более
|
(Offline)
|
|
12.02.2011, 01:53
|
#4
|
AnyKey`щик
Регистрация: 11.02.2011
Сообщений: 10
Написано одно полезное сообщение (для 3 участников)
|
Ответ: Создание задания и выполнение события
Ещё 1 момент, мне всё же интересно, как создаются триггеры.
Нужна информация!
К примеру, я иду по коридору, зашел в триггер зону и проигрывается видео заставка( OpenMovie("video.wmv") )...
И ещё, у меня есть на локации лифт, который спускается под землю, но я хотел бы пропустить этот момент. Хочу сделать так, подхожу к лифту, нажимаю кнопку и мгновенно появляюсь уже внизу и таким же макаром обратно на верх!
Мне очень интересно как это реализовать....
За ответ огромное спасибо!
|
(Offline)
|
|
12.02.2011, 12:14
|
#5
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Создание задания и выполнение события
PositionEntity hero,X#,Y#,Z#;.......Полезно внизу
|
(Offline)
|
|
12.02.2011, 12:25
|
#6
|
AnyKey`щик
Регистрация: 11.02.2011
Сообщений: 10
Написано одно полезное сообщение (для 3 участников)
|
Ответ: Создание задания и выполнение события
Ну на счет Position это я знаю, а вот что перед ним...
|
(Offline)
|
|
12.02.2011, 12:54
|
#7
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Создание задания и выполнение события
КАК ПОНЯТЬ ЧТО ПЕРЕД...капс забыл выр..пример:
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
так что ли...хочешь..проверять внизу или вверху??
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.02.2011, 13:04
|
#8
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Создание задания и выполнение события
И ещё, у меня есть на локации лифт, который спускается под землю, но я хотел бы пропустить этот момент. Хочу сделать так, подхожу к лифту, нажимаю кнопку и мгновенно появляюсь уже внизу и таким же макаром обратно на верх!
|
Это реализовать проще всего(потому что обычный телепорт)
Function teleport(x#, y#, z#)
; Убераем столкновение
EntityType player, 0
; Перемещаем
PositionEntity player, x#, y#, z#
; Возвращаем столкновения
EntityType player, player_type
End Function
Нажимаешь кнопку, получаешь координаты. Вызываешь teleport(x#, y#, z#)
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо RBK за это полезное сообщение:
|
|
12.02.2011, 13:14
|
#9
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Создание задания и выполнение события
Сообщение от RBK
Это реализовать проще всего(потому что обычный телепорт)
Function teleport(x#, y#, z#)
; Убераем столкновение
EntityType player, 0
; Перемещаем
PositionEntity player, x#, y#, z#
; Возвращаем столкновения
EntityType player, player_type
End Function
Нажимаешь кнопку, получаешь координаты. Вызываешь teleport(x#, y#, z#)
|
я понял он хочет тестит где находится... а так делать совсем необязательно..ведь positionentity не использует Тупаки колизии..и может быть баг когда обратно тупак цепляешь(провал через стену пример)
|
(Offline)
|
|
12.02.2011, 13:50
|
#10
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Создание задания и выполнение события
я понял он хочет тестит где находится...
|
Нет, прочти цитату внимательней, у него два этажа на уровне, кнопка переносит игрока на другой этаж.
ведь 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" или на голову что-нибудь упадёт)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.02.2011, 18:10
|
#11
|
AnyKey`щик
Регистрация: 11.02.2011
Сообщений: 10
Написано одно полезное сообщение (для 3 участников)
|
Ответ: Создание задания и выполнение события
Всех благодарю! Спасибо за помощь!
Что то не получается с триггером...
Что тут не так?
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
|
(Offline)
|
|
12.02.2011, 21:09
|
#12
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Создание задания и выполнение события
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.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.02.2011, 21:36
|
#13
|
AnyKey`щик
Регистрация: 11.02.2011
Сообщений: 10
Написано одно полезное сообщение (для 3 участников)
|
Ответ: Создание задания и выполнение события
Спасибо, все получилось!
|
(Offline)
|
|
12.02.2011, 21:45
|
#14
|
AnyKey`щик
Регистрация: 11.02.2011
Сообщений: 10
Написано одно полезное сообщение (для 3 участников)
|
Ответ: Создание задания и выполнение события
RBK, а как ты так хорошо в этом разбираешься, Во всех этих?
Мне например сложно реализовать свои идеи, просто наверно я не правильно строю наверно...
Но всё же как? Поделись опытом пожалуйста!
|
(Offline)
|
|
12.02.2011, 22:06
|
#15
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Создание задания и выполнение события
Я почти два года пользуюсь blitz3d, опыт наверное . Всё идеи надо делать постепенно, комментировать свой код.
Лист бумаги и карандаш тоже хорошо помогают. Но главное, хоть раз прочитать справку(желательно на понятном языке) полностью.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:45.
|