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

Fant 23.06.2007 15:20

Проверка на наличие впереди объекта
 
Сделали за меня в свое время проверку и я, думая что разберусь, пустил это дело на самотек. Теперь пытаюсь исключить объек из коллизии, но, увы, попадалово. Я не знаю как.

Вот функция:
Код:

Function fnWhatVperedi(obj,obj_ygol=0)

;îïðåäåëåíèå ÷åðåç îáû÷íûå êîîðäèíàòû ïðîòèâíèêà åãî êîîðäèíàò â ìàññèâå masPrep
                        Local obj_x = Int((EntityX (obj)/10))
                        Local obj_z = Int ((EntityZ (obj)/10))

                        ;ñìåùåíèÿ ïî x è z äëÿ ìàññèâà masPrep â çàâèñèìîñòè îò óãëà,
                        ;êîòîðûé ïîêàçûâàåò êóäà "ñìîòðèò" îáúåêò
                        If obj_ygol=0
                                dx=0
                                dz=-1
                        EndIf
                       
                        If obj_ygol=90
                                dx=-1
                                dz=0
                        EndIf

                        If obj_ygol=-90
                                dx=1
                                dz=0
                        EndIf

                        If Abs(obj_ygol)=180
                                dx=0
                                dz=1
                        EndIf

                        ;ïðîâåðêè íóæíû äëÿ òîãî, ÷òîáû èíäåêñ ìàññèâà íå âûøåë çà ãðàíèöû
                        If ((obj_x+dx>=0) And (obj_x+dx<31) And (obj_z-dz>=0) And (obj_z-dz<31))
                                ;â ïåðåìåííóþ vperedi çàíîñèì çíà÷åíèå èç masPrep òîé êëåòêè
                                ;êîòîðàÿ íàõîäèòñÿ âïåðåäè ïðîòèâíèêà
                                Return PlayField(obj_x+dx,obj_z-dz)
                        EndIf

End Function

Что бы проверить, если в впереди объект стоило писать:
en1\retval = fnWhatVperedi(en1\obj,Int(EntityYaw (en1\obj)))

только ранее, вместо
Int(EntityYaw (en1\obj)))
можно было писать циферки, соответсвующие массиву
1 - стенка
2 - кубик
3 - игрок
4 - бомба
5 - ИИ
Я проверял, если retval>0 то "занято" ...

Теперь мне нужно исклюсить 5. То есть что бы ии не коллиделись с ИИ но в коде уже разобраться не могу! Помогите пожалуйста, кто сможет понять этот принцип

p.s.
это не работает:
en1\retval = fnWhatVperedi(en1\obj,Int(EntityYaw (en1\obj)) And en1\retval<>5)

HolyDel 23.06.2007 16:38

Re: Проверка на наличие впереди объекта
 
ent1\retval=fnWhatVperedi(en1\obj,Int(EntityYaw (en1\obj)))
if ent1\retval=5 then ent1\retval=0
самый простой выход, так еще могеш
ent1\retval=fnWhatVperedi(en1\obj,Int(EntityYaw (en1\obj))) xor 5

Fant 23.06.2007 16:43

Re: Проверка на наличие впереди объекта
 
Цитата:

Сообщение от HolyDel
ent1\retval=fnWhatVperedi(en1\obj,Int(EntityYaw (en1\obj)))
if ent1\retval=5 then ent1\retval=0
самый простой выход, так еще могеш
ent1\retval=fnWhatVperedi(en1\obj,Int(EntityYaw (en1\obj))) xor 5

не...что-то не сработало! Где-то что-то "проверяется"...

ИИ точно под номером 5 в списке

HolyDel 24.06.2007 01:27

Re: Проверка на наличие впереди объекта
 
Цитата:

только ранее, вместо
Int(EntityYaw (en1\obj)))
можно было писать циферки, соответсвующие массиву
1 - стенка
2 - кубик
3 - игрок
4 - бомба
5 - ИИ
как так, в ф-ию же должен угол передаваться? и что она возвращает?

Fant 24.06.2007 01:48

Re: Проверка на наличие впереди объекта
 
Все! Я разобрался! Спасибо за помощь!


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

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