|
3D-программирование Вопросы, касающиеся программирования 3D мира |
02.10.2013, 20:21
|
#1
|
AnyKey`щик
Регистрация: 02.10.2013
Сообщений: 6
Написано 0 полезных сообщений (для 0 пользователей)
|
условие дистанции для типов
Всем привет!
Подскажите пожалуйста, как бы это исправить чтобы объект сразу двигался, а не ждал пока дистанция станет больше 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
|
(Offline)
|
|
02.10.2013, 22:42
|
#2
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: условие дистанции для типов
If EntityDistance(cam,a\entity)<=8
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
02.10.2013, 23:38
|
#3
|
AnyKey`щик
Регистрация: 02.10.2013
Сообщений: 6
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от Colossus
If EntityDistance(cam,a\entity)<=8
|
Ну дык... всё равно же ждёт. а хотелось бы чтобы сразу бежал
|
(Offline)
|
|
03.10.2013, 00:29
|
#4
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от JZ184
Ну дык... всё равно же ждёт. а хотелось бы чтобы сразу бежал
|
добавь к v поле pobejal и на старте сделай его всем v равным нулю, и потом проверять вместо дистанции это поле и если оно ноль то выполнять код и в поле pobejal писать какоенить число не равное 0
|
(Offline)
|
|
03.10.2013, 04:15
|
#5
|
AnyKey`щик
Регистрация: 02.10.2013
Сообщений: 6
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от dsd
добавь к v поле pobejal и на старте сделай его всем v равным нулю, и потом проверять вместо дистанции это поле и если оно ноль то выполнять код и в поле pobejal писать какоенить число не равное 0
|
Чёта я не понял. Добавить поле v\pobejal=0 а в цикле проверять вместо дистанции? Но я спецом создал кубики чтобы проверять дистанцию до них Мож я тут чёто не то нагородил?
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
|
(Offline)
|
|
03.10.2013, 17:39
|
#6
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: условие дистанции для типов
значит тебе просто нужно для выполнения кода проверить два условия дистанцию и значение которое скажет запущен этот v или нет.
|
(Offline)
|
|
03.10.2013, 17:48
|
#7
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: условие дистанции для типов
Проблема в неправильной организации логики ИИ.
Советую разбить на 2 блока:
1 блок принятия решений - переключение состояний (сплю, стреляю, преследую и тп и тд)
2 блок исполнения - реализуем состояние в действие - двигаемся, стреляем, и тд и тп
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
03.10.2013, 17:52
|
#8
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от JZ184
Сообщение от dsd
добавь к v поле pobejal и на старте сделай его всем v равным нулю, и потом проверять вместо дистанции это поле и если оно ноль то выполнять код и в поле pobejal писать какоенить число не равное 0
|
Чёта я не понял. Добавить поле v\pobejal=0 а в цикле проверять вместо дистанции? Но я спецом создал кубики чтобы проверять дистанцию до них Мож я тут чёто не то нагородил?
|
Но вначале ты написал:
чтобы объект сразу двигался, а не ждал пока дистанция станет больше 8
|
Так что же ты в итоге хочешь?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
03.10.2013, 19:05
|
#9
|
AnyKey`щик
Регистрация: 02.10.2013
Сообщений: 6
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от ABTOMAT
Но вначале ты написал:
Так что же ты в итоге хочешь?
|
Вообще то мне надо как здесь для одного.Появляется и гоняется даже если камера в зоне. Обычная вобщем игровая ситуация
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
Для одного работает норм
Но для типов у меня не получается правильно написать. Может потому что для одного позиция указывается до цикла, а в типах в цикле...а если указываю позицию при заполнении типа, работает не правильно
Подскажите как исправить, а то с типами такая путаница....
|
(Offline)
|
|
03.10.2013, 19:25
|
#10
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от JZ184
а то с типами такая путаница....
|
Вот с этого и надо начинать.
Разобраться как юзать типы.
В помощь: http://blitzetc.ru/
__________________
|
(Offline)
|
|
03.10.2013, 19:57
|
#11
|
AnyKey`щик
Регистрация: 02.10.2013
Сообщений: 6
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от tormoz
|
Спасибо. я читал, про типы. там позиция везде рандомно, а мне надо адресно. У меня обьявление и заполнение типов правильно написано? А проверка?
|
(Offline)
|
|
03.10.2013, 20:40
|
#12
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от JZ184
Спасибо. я читал, про типы. там позиция везде рандомно, а мне надо адресно. У меня обьявление и заполнение типов правильно написано? А проверка?
|
конечно нет.
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?
С логикой проблема.
Я ваще не понял чего ты хотел добиться.
Кто за кем должен бежать? по какому условию?
__________________
|
(Offline)
|
|
03.10.2013, 21:18
|
#13
|
AnyKey`щик
Регистрация: 02.10.2013
Сообщений: 6
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: условие дистанции для типов
Сообщение от tormoz
конечно нет.
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, поскольку пивотов не видно) в цикле Проверяем дистанцию между камерой и пивотом, если меньше указанной, создаём в позиции пивота копию монстра который сразу атакует. А может их всех прописать в один тип?
|
(Offline)
|
|
03.10.2013, 22:10
|
#14
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: условие дистанции для типов
Так и делай КАК ты написал:
Перебирай пивоты, если пора - создавай монстра, ставь в координаты пивота и "выключай" пивот (чтобы монстры не создавались в цикле каждый проход)
А уже в отдельном цикле перебора монстров командуй ими.
И лучше разбей все на функции (создание, перебор и тд) и вызывай когда надо
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:22.
|