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

JZ184 02.10.2013 20:21

условие дистанции для типов
 
Всем привет!
Подскажите пожалуйста, как бы это исправить чтобы объект сразу двигался, а не ждал пока дистанция станет больше 8? И чтобы действие происходило только один раз..Спасибо.
For a.Zona=Each Zona
If EntityDistance(cam,a\entity)<8 Then
ShowEntity v\alien
PositionEntity v\alien, a\x, a\y+1, a\z
EndIf
PointEntity v\alien ,cam
MoveEntity v\alien ,0,0,.004
Next

Colossus 02.10.2013 22:42

Ответ: условие дистанции для типов
 
Код:

If EntityDistance(cam,a\entity)<=8

JZ184 02.10.2013 23:38

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от Colossus (Сообщение 268064)
Код:

If EntityDistance(cam,a\entity)<=8

Ну дык... всё равно же ждёт. а хотелось бы чтобы сразу бежал:(

dsd 03.10.2013 00:29

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от JZ184 (Сообщение 268071)
Ну дык... всё равно же ждёт. а хотелось бы чтобы сразу бежал:(

добавь к v поле pobejal и на старте сделай его всем v равным нулю, и потом проверять вместо дистанции это поле и если оно ноль то выполнять код и в поле pobejal писать какоенить число не равное 0

JZ184 03.10.2013 04:15

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от dsd (Сообщение 268085)
добавь к v поле pobejal и на старте сделай его всем v равным нулю, и потом проверять вместо дистанции это поле и если оно ноль то выполнять код и в поле pobejal писать какоенить число не равное 0

Чёта я не понял. Добавить поле v\pobejal=0 а в цикле проверять вместо дистанции? Но я спецом создал кубики чтобы проверять дистанцию до них:4to: Мож я тут чёто не то нагородил?
Type Zona
Field entity
Field name
Field x#
Field y#
Field z#
End Type
Type Monstr
Field alien
End Type

Zcub=CreateCube()
HideEntity Zcub
For i=1 To 5
a.Zona=New Zona
a\entity=CopyEntity(Zcub)
a\name=1
a\x=-10
a\y=0
a\z=25
PositionEntity a\entity, a\x, a\y, a\z
...............................
..........................
a.Zona=New Zona
a\entity=CopyEntity(Zcub)
a\name=5
a\x=10
a\y=0
a\z=5
PositionEntity a\entity, a\x, a\y, a\z
Next

Vrag=CreateCube()
HideEntity Vrag
v.Monstr=New Monstr
v\alien=CopyEntity(Vrag)
HideEntity v\alien

Repeat

For a.Zona=Each Zona
If EntityDistance(cam,a\entity)<8 Then
ShowEntity v\alien
PositionEntity v\alien, a\x, a\y+1, a\z
EndIf
PointEntity v\alien ,cam
MoveEntity v\alien ,0,0,.004
Next

dsd 03.10.2013 17:39

Ответ: условие дистанции для типов
 
значит тебе просто нужно для выполнения кода проверить два условия дистанцию и значение которое скажет запущен этот v или нет.

tormoz 03.10.2013 17:48

Ответ: условие дистанции для типов
 
Проблема в неправильной организации логики ИИ.
Советую разбить на 2 блока:
1 блок принятия решений - переключение состояний (сплю, стреляю, преследую и тп и тд)
2 блок исполнения - реализуем состояние в действие - двигаемся, стреляем, и тд и тп

ABTOMAT 03.10.2013 17:52

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от JZ184 (Сообщение 268097)
Цитата:

Сообщение от dsd (Сообщение 268085)
добавь к v поле pobejal и на старте сделай его всем v равным нулю, и потом проверять вместо дистанции это поле и если оно ноль то выполнять код и в поле pobejal писать какоенить число не равное 0

Чёта я не понял. Добавить поле v\pobejal=0 а в цикле проверять вместо дистанции? Но я спецом создал кубики чтобы проверять дистанцию до них:4to: Мож я тут чёто не то нагородил?

Но вначале ты написал:

Цитата:

чтобы объект сразу двигался, а не ждал пока дистанция станет больше 8
Так что же ты в итоге хочешь?

JZ184 03.10.2013 19:05

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от ABTOMAT (Сообщение 268130)
Но вначале ты написал:
Так что же ты в итоге хочешь?

Вообще то мне надо как здесь для одного.Появляется и гоняется даже если камера в зоне. Обычная вобщем игровая ситуация
Zona=CreateCube()
PositionEntity Zona,0,0,20
Vrag=CreateCube()
PositionEntity Vrag,0,1,20
HideEntity Vrag

While Not KeyHit(1)
If EntityDistance(cam,Zona)<10 Then g=1
If g
ShowEntity Vrag
PointEntity Vrag ,cam
MoveEntity Vrag ,0,0,.1
EndIf
Для одного работает норм
Но для типов у меня не получается правильно написать. Может потому что для одного позиция указывается до цикла, а в типах в цикле...а если указываю позицию при заполнении типа, работает не правильно:(
Подскажите как исправить, а то с типами такая путаница....

tormoz 03.10.2013 19:25

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от JZ184 (Сообщение 268132)
а то с типами такая путаница....

Вот с этого и надо начинать.
Разобраться как юзать типы.
В помощь: http://blitzetc.ru/

JZ184 03.10.2013 19:57

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от tormoz (Сообщение 268133)
Вот с этого и надо начинать.
Разобраться как юзать типы.
В помощь: http://blitzetc.ru/

Спасибо. я читал, про типы. там позиция везде рандомно, а мне надо адресно. У меня обьявление и заполнение типов правильно написано? А проверка?

tormoz 03.10.2013 20:40

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от JZ184 (Сообщение 268134)
Спасибо. я читал, про типы. там позиция везде рандомно, а мне надо адресно. У меня обьявление и заполнение типов правильно написано? А проверка?

конечно нет.

Код:

For a.Zona=Each Zona
If EntityDistance(cam,a\entity)<8 Then
ShowEntity v\alien
PositionEntity v\alien, a\x, a\y+1, a\z
EndIf
PointEntity v\alien ,cam
MoveEntity v\alien ,0,0,.004
Next

откуда взялся v\alien? Ты почему-то решил что в переборе типа Zona будет доступен тип Monstr?
С логикой проблема.
Я ваще не понял чего ты хотел добиться.
Кто за кем должен бежать? по какому условию?

JZ184 03.10.2013 21:18

Ответ: условие дистанции для типов
 
Цитата:

Сообщение от tormoz (Сообщение 268135)
конечно нет.

Код:

For a.Zona=Each Zona
If EntityDistance(cam,a\entity)<8 Then
ShowEntity v\alien
PositionEntity v\alien, a\x, a\y+1, a\z
EndIf
PointEntity v\alien ,cam
MoveEntity v\alien ,0,0,.004
Next

откуда взялся v\alien? Ты почему-то решил что в переборе типа Zona будет доступен тип Monstr?
С логикой проблема.
Я ваще не понял чего ты хотел добиться.
Кто за кем должен бежать? по какому условию?

v\alien это поле в Type Monstr(пост#5)....эээ Так что надо делать тип в типе? Да, сплошные проблемы.
Мысль такая. Создаём тип пивотов и раскидываем их в лабиринте(пока это кубики в типе Zona, поскольку пивотов не видно) в цикле Проверяем дистанцию между камерой и пивотом, если меньше указанной, создаём в позиции пивота копию монстра который сразу атакует.:super: А может их всех прописать в один тип?

tormoz 03.10.2013 22:10

Ответ: условие дистанции для типов
 
Так и делай КАК ты написал:
Перебирай пивоты, если пора - создавай монстра, ставь в координаты пивота и "выключай" пивот (чтобы монстры не создавались в цикле каждый проход)
А уже в отдельном цикле перебора монстров командуй ими.
И лучше разбей все на функции (создание, перебор и тд) и вызывай когда надо


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

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