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<>and c\model<>0 then 
if EntityDistanceb\modelc\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:43.

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