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

ZanoZa 18.12.2005 20:32

Может кто-нить раскажет как мона сделать систему триггеров т.е.
игрок пересекает триггер происходит дейтсвие. :SOS:

alcosholik 18.12.2005 21:03

Первое, что приходит на ум:
Код:

if entitydistance(obj, trigger)<1
 ;...
 ;...
end if


Жека 19.12.2005 12:21

Ага, только дистанцию побольше надо.
Смотря какой масштаб ты выбрал, т.е. если у тебя размеры объектов измеряются десятками, то дистанция нужна этак единиц в 20-50. Вобщем, в разы больше самого объекта.
Но это не обязательно - от конкретного случая зависит.

ZanoZa 20.12.2005 20:50

Напишите мне пожалуйста, ну нет времени писать самому, учителя завалили работами :'((

alcosholik 20.12.2005 21:00

Дык... написали ж уже.

ZanoZa 20.12.2005 22:13

Цитата:

Originally posted by alcoSHoLiK@Dec 20 2005, 08:00 PM
Дык... написали ж уже.
Ну всмысле саму функцию триггера, ну и т.д.
чтобы можно было их уже только расставить и усё.
p.s.ну ваще я наглый

jimon 20.12.2005 23:00

Код:

function trigers ()
;...
if entitydistance(obj, trigger)<1
;...
;...
end if
;...
end function

Цитата:

p.s.ну ваще я наглый

мы тоже

alcosholik 21.12.2005 20:36

Лучше уже тогда так:
Код:

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


impersonalis 21.12.2005 20:49

Чтоб не вводить в заблуждение - триггеры должны бть реализоаны типами.
+ предыдущие высказывания

ZanoZa 22.12.2005 13:41

Цитата:

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

Жека 22.12.2005 20:18

Код:

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


Akima 23.12.2005 14:21

А чо нельзя колизией пользоваться , делаеш тип Игрок=1 метка1=2
и определяеш если коллизия то...

Жека 23.12.2005 14:27

Можно, но проблемы лишние нам не нужны (а они будут).

Akima 23.12.2005 14:30

что за проблемы?

SubZer0 23.12.2005 23:52

Цитата:

Originally posted by Akima@Dec 23 2005, 01:30 PM
что за проблемы?
проблемы будут следующие:

1. это будет тормозить, поскольку на проверку коллизии уходит намного больше компьютерного времени, чем на проверку дистанции (неуверен про коллизию сферы со сферой... надо протестить)

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

3. это сложнее в реализации



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

:)


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

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