forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Ещё одна непонятка... (http://forum.boolean.name/showthread.php?t=12610)

Ganociy 04.06.2010 09:59

Ещё одна непонятка...
 
Через типы создаю мины. Делаю проверку на дистанцию между ботом и миной.

For b.Enemy=Each Enemy
For c.Mine=Each Mine

if EntityDistance( b\model, c\model)<=20 then
FreeEntity b\model
FreeEntity c\model
Delete b
Delete c
EndIf

Next
Next

...И когда уже эти два объекта пресеклись то MAV. А при дебаге Object
Does Not Exist и указывает на строку проверки дистанции. Что надо сделать так, что бы эти два объекта удалялись при пересечении...:dontknow:

is.SarCasm 04.06.2010 10:05

Ответ: Ещё одна непонятка...
 
Блин, как то лень сейчас думать, но мне почему то кажеться что за 1
Цитата:

For c.Mine=Each Mine
ты удаляешь или все мины или всех врагов...

Ganociy 04.06.2010 10:22

Ответ: Ещё одна непонятка...
 
Ты знаешь, Igroian, тут ещё вот какая фигня. Ставлю одну мину, бот натыкается - удаляется вместе с миной. Ставлю возле этой же мины ещё одну мину, MAV... Да, и я заметил (помойму), убрать строки
FreeEntity b\model Delete b , то всё нормально , но только удаляет мину...

is.SarCasm 04.06.2010 11:25

Ответ: Ещё одна непонятка...
 
Блин прийдется подумать!
Так если рассуждать по логической цепочке то:
Допустим бот - 1, Допустим мин - 2

Цитата:

Каждый бот (1)
Каждая мина(2)

Если бла бла бла то
удалить бота
удалить мина


конец
конец
Когда проходить второй повтор
Цитата:

Каждая мина(2)
у нас бота нету, следовательно проверять нечего, объекта нет, MAV

Решение может быть таким хотя бы:

Цитата:

For b.Enemy=Each Enemy
For c.Mine=Each Mine

If b\model<>0 and c\model<>0 then
if EntityDistance( b\model, c\model)<=20 then
FreeEntity b\model
FreeEntity c\model
Delete b
Delete c
EndIf
endif

Next
Next

Dream 04.06.2010 13:30

Ответ: Ещё одна непонятка...
 
WTF??? чё вы делаете??
PHP код:

For b.Enemy=Each Enemy
For c.Mine=Each Mine

If b\model<>0 and c\model<>0 then 
if EntityDistance( b\model, c\model)<=20 then
FreeEntity b
\model;<---убери это! или сделай
FreeEntity c
\model
Delete b
Delete c
<----тут выход из этого цикла. не помню правда уже как выходить из циклов, но вроде есть такая штука. Exit возможно
EndIf
endif

Next
Next 

ты удаляешь бота при первом же столкновении с миной! и если мины две, то будет MAV. сделай, если бот попадает на мину, то выходить из перебора мин для даного бота! break; или както так

tormoz 04.06.2010 16:36

Ответ: Ещё одна непонятка...
 
For b.Enemy=Each Enemy
For c.Mine=Each Mine

if EntityDistance( b\model, c\model)<=20 then
FreeEntity b\model
FreeEntity c\model
Delete b
Delete c
Exit
EndIf

Next
Next

LLI.T.A.L.K.E.R. 07.06.2010 19:12

Ответ: Ещё одна непонятка...
 
Exit из какого цикла вынесет?
Из For b.Enemy или For c.Mine или сразу обоих?
А что если, допустим, цикл нужно продолжить для проверки следующих врагов или мин?

St_AnGer 07.06.2010 19:17

Ответ: Ещё одна непонятка...
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 149428)
Exit из какого цикла вынесет?
Из For b.Enemy или For c.Mine или сразу обоих?
А что если, допустим, цикл нужно продолжить для проверки следующих врагов или мин?

Из того цикла, который был запущен последним, на сколько я помню.

Hurrit 07.06.2010 19:20

Ответ: Ещё одна непонятка...
 
В данном случае, при использовании Exit, закроется цикл For c.mine=each mine

Ganociy 16.06.2010 09:01

Ответ: Ещё одна непонятка...
 
Вай бlяяяяяяяяяяяяяяяя!!! Как же я забыл про EXIT!!!. НУ спасибо! А я та думаю...
Ну правильно... У меня были экзамены! Только и делал, что сидел и учил. Спасибо.


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

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