|
3D-программирование Вопросы, касающиеся программирования 3D мира |
18.12.2005, 20:32
|
#1
|
Элита
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений (для 252 пользователей)
|
Может кто-нить раскажет как мона сделать систему триггеров т.е.
игрок пересекает триггер происходит дейтсвие.
|
(Offline)
|
|
18.12.2005, 21:03
|
#2
|
|
Первое, что приходит на ум:
if entitydistance(obj, trigger)<1
;...
;...
end if
|
|
|
19.12.2005, 12:21
|
#3
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ага, только дистанцию побольше надо.
Смотря какой масштаб ты выбрал, т.е. если у тебя размеры объектов измеряются десятками, то дистанция нужна этак единиц в 20-50. Вобщем, в разы больше самого объекта.
Но это не обязательно - от конкретного случая зависит.
|
(Offline)
|
|
20.12.2005, 20:50
|
#4
|
Элита
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений (для 252 пользователей)
|
Напишите мне пожалуйста, ну нет времени писать самому, учителя завалили работами :'((
|
(Offline)
|
|
20.12.2005, 21:00
|
#5
|
|
Дык... написали ж уже.
|
|
|
20.12.2005, 22:13
|
#6
|
Элита
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений (для 252 пользователей)
|
Originally posted by alcoSHoLiK@Dec 20 2005, 08:00 PM
Дык... написали ж уже.
|
Ну всмысле саму функцию триггера, ну и т.д.
чтобы можно было их уже только расставить и усё.
p.s.ну ваще я наглый
|
(Offline)
|
|
20.12.2005, 23:00
|
#7
|
|
function trigers ()
;...
if entitydistance(obj, trigger)<1
;...
;...
end if
;...
end function
мы тоже
|
|
|
21.12.2005, 20:36
|
#8
|
|
Лучше уже тогда так:
function check_trigger (obj, trigger, dist=1)
;...
if entitydistance(obj, trigger)<dist
;...
;...
end if
;...
end function
Применение:
player=createcube()
trigger1=createpivot()
positionentity trigger1, 100, 0, 50
trigger2=createpivot()
positionentity trigger2, 0, 0, 100
while not keyhit(1)
;...
check_trigger (player, trigger1)
check_trigger (player, trigger2, 10)
;...
wend
|
|
|
21.12.2005, 20:49
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Чтоб не вводить в заблуждение - триггеры должны бть реализоаны типами.
+ предыдущие высказывания
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.12.2005, 13:41
|
#10
|
Элита
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений (для 252 пользователей)
|
Originally posted by alcoSHoLiK@Dec 21 2005, 07:36 PM
Лучше уже тогда так:
function check_trigger (obj, trigger, dist=1)
;...
if entitydistance(obj, trigger)<dist
;...
;...
end if
;...
end function
Применение:
player=createcube()
trigger1=createpivot()
positionentity trigger1, 100, 0, 50
trigger2=createpivot()
positionentity trigger2, 0, 0, 100
while not keyhit(1)
;...
check_trigger (player, trigger1)
check_trigger (player, trigger2, 10)
;...
wend
|
memory acces violation
|
(Offline)
|
|
22.12.2005, 20:18
|
#11
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Graphics3D 800,600,0,2
player=CreateCube()
camera = CreateCamera (player)
MoveEntity camera,0,5,-10
PointEntity camera,player
RotateEntity CreateLight (),90,0,0
pl = CreatePlane ()
TranslateEntity pl,0,-1,0
tex = CreateTexture (64,64)
SetBuffer TextureBuffer (tex)
For k=1 To 100
Plot Rand(64),Rand(64)
Next
EntityTexture pl,tex
FreeTexture tex
trigger1=CreatePivot()
PositionEntity trigger1, 100, 0, 50
trigger2=CreatePivot()
PositionEntity trigger2, 0, 0, 100
SetBuffer BackBuffer ()
FlushKeys ()
timer = CreateTimer (60)
While Not KeyHit(1)
;...
WaitTimer (timer)
TurnEntity player,0,1,0
MoveEntity player,0,0,0.05
check_trigger (player, trigger1)
check_trigger (player, trigger2, 10)
RenderWorld ()
Flip ()
;...
Wend
End
Function check_trigger (obj, trigger, dist=1)
;...
If EntityDistance(obj, trigger)<dist
;...
;...
End If
;...
End Function
|
(Offline)
|
|
23.12.2005, 14:21
|
#12
|
Бывалый
Регистрация: 22.10.2005
Сообщений: 701
Написано 7 полезных сообщений (для 5 пользователей)
|
А чо нельзя колизией пользоваться , делаеш тип Игрок=1 метка1=2
и определяеш если коллизия то...
|
(Offline)
|
|
23.12.2005, 14:27
|
#13
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Можно, но проблемы лишние нам не нужны (а они будут).
|
(Offline)
|
|
23.12.2005, 14:30
|
#14
|
Бывалый
Регистрация: 22.10.2005
Сообщений: 701
Написано 7 полезных сообщений (для 5 пользователей)
|
что за проблемы?
|
(Offline)
|
|
23.12.2005, 23:52
|
#15
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
Originally posted by Akima@Dec 23 2005, 01:30 PM
что за проблемы?
|
проблемы будут следующие:
1. это будет тормозить, поскольку на проверку коллизии уходит намного больше компьютерного времени, чем на проверку дистанции (неуверен про коллизию сферы со сферой... надо протестить)
2. на сколько я знаю нельзя сделать так, чтоб была коллизия и в то-же время объекты могли безпрепятственно проходить сквозь друг друга
3. это сложнее в реализации
PS смотрю на код... код хороший, но надо еще сделать переменную, типа флага, чтоб триггер срабатывал только один раз...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:07.
|