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

AndruXa 27.11.2007 17:39

И опять она, глючная коллизия
 
Вобщем такая фигня получается. Есть переменная, допустим а=0
Мне надо, чтобы при коллизии 2 объектов при а=0 выполнялось одно действие, а при а=1 другое.:wallbash:
Пробовал так
Код:

If entitycollided (...) and a=0 then b=b-1
If entitycollided (...) and a=1 then c=c-1

Неполучается
И так пробовал
Код:

If entitycollided (...) and a=0
b=b-1
elseif a=1
c=c-1
endif

И так не получается
Помогите разобраться плиз!

johnk 27.11.2007 18:11

Re: И опять она, глючная коллизия
 
Совет: проверяй переменную до проверки объектов на коллизию.

AndruXa 27.11.2007 18:18

Re: И опять она, глючная коллизия
 
Цитата:

Совет: проверяй переменную до проверки объектов на коллизию.
Ты не понял, у меня ситуация: подхожу я к боту,толкаю его он мне пихает речь, типа привет,ты че талкаешься меня зовут.... если я подхожу к нему 2 раз он мне говорит типа ты еще сдесь...(после первого диалога переменная встает в положение1)

Diplomat 27.11.2007 18:23

Re: И опять она, глючная коллизия
 
Это не коллизия глючная, это логическое мышление сбито вольностями Блицевского синтаксиса, допускающими противоречащие духу Бейсиков кошмары типа "IF a b=b+1" вместо "IF a<>0 THEN b=b+1".

Вопрос: что возвращает твой ЁнтитиКоллидед, и как следует это анализировать?
Ответ: ЁнтитиКоллидед возвращает что характерно либо 0, либо хендл ёнтити, с которым собсно коллидед. Поэтому для определения факта коллизии следует проверять возвращаемое значение на неравенство нулю... а лучше делать то же самое, но с функцией CountCollisions - она работает процентов на 20 быстрее.

P.S. Локальную переменную для хранения возвращаемого значения флага коллизии- завести стоит, если ты проводишь проверки неоднократно.

AndruXa 27.11.2007 18:29

Re: И опять она, глючная коллизия
 
Цитата:

IF a<>0 THEN b=b+1
Дык, если так сделать то диалоговая надпись будет выскакивать сразу после первого диалога, а мне нужно, чтобы она выскакивала после толчка бота игроком
Хорошо, задам свой вопрос подругому, как зафиксировать коллизию, чтобы например, когда врезаешься в объект 2 раз, чтобы блиц знал, что это уже 2 раз.

У меня а=0 и а=1 как раз и есть эта переменная, после 1 коллизии она стает равной 1, после 2 она стает равной2... Блин, чет я совсем запутался.....

IGR 27.11.2007 18:32

Re: И опять она, глючная коллизия
 
попробуй так:
If entitycollided (...)
if a=0 then b=b-1
if a=1 then c=c-1
endif

AndruXa 27.11.2007 18:38

Re: И опять она, глючная коллизия
 
Цитата:

If entitycollided (...)
if a=0 then b=b-1
if a=1 then c=c-1
endif
...А это не нарушение синтаксиса блица?

dimanche13 27.11.2007 18:53

Re: И опять она, глючная коллизия
 
Код:

If entitycollided (...) = true
 print("столкнулся")
 if(first = true)
  first = not first
  ' здесь первый контакт
  print("впервые")
 else
  ' здесь все последующие
  print("не в первой уже...")
 end if
endif


Diplomat 27.11.2007 18:54

Re: И опять она, глючная коллизия
 
Цитата:

Дык, если так сделать то диалоговая надпись будет выскакивать сразу после первого диалога,
Прочти пост еще раз, а именно наклонный текст, находящийся после подстроки "Ответ". Подразумевалось нечто класса
Код:

CollFlag=EntityCollided(...)
If CollFlag<>0 And A=1 Then ...
If CollFlag<>0 And A=0 Then ...

Цитата:

...А это не нарушение синтаксиса блица?
Нет, это просто бэссграмотность.

IGR 27.11.2007 18:54

Re: И опять она, глючная коллизия
 
Цитата:

...А это не нарушение синтаксиса блица?
невкоем случае !!
юзай !! :)

IGR 27.11.2007 19:03

Re: И опять она, глючная коллизия
 
Цитата:

Нет, это просто бэссграмотность.
а сорри !!
как же я мог допустить такое !!
вот правельный код:
If entitycollided (...) Then
if a=0 then b=b-1
if a=1 then c=c-1
endif

HolyDel 28.11.2007 01:06

Re: И опять она, глючная коллизия
 
IGR, ты издеваешся?
Андрюха, кой черт дернул тебя юзать коллизии для ТАКОЙ задачи? проверяй расстояние до объекта. дальше - сам знаеш.

Crystal 29.11.2007 17:28

Re: И опять она, глючная коллизия
 
Код:

If EntityDistance(юзер,бот)<расстояние Then что то происходит
вот так делать надо.

Alex_Noc 09.12.2007 03:20

Re: И опять она, глючная коллизия
 
думаю case здесь точно поможет , как им пользоваться надеюсь обьяснять не нужно

AndruXa 09.12.2007 14:27

Re: И опять она, глючная коллизия
 
Цитата:

думаю case здесь точно поможет , как им пользоваться надеюсь обьяснять не нужно
Ну не фига себе вы че мертвых-то будите, я уже давним давно разобрался:)

Halk-DS 07.01.2008 19:54

Ответ: И опять она, глючная коллизия
 
Вот меня ета коллизия уже блин достала!!! Все никак немогу понять почему она у меня когда хочет работает, а когда нехочет то нет! Вот например, наскоко я знаю, сначяла нужно создать кучю обьектов, потом присвоить ЕнтитиРадиус или Бокс, далее в самом главном цикле указать Коллизионс Тра-ля-ля,Бла-бла-ла,2,1 и обязательно УпдатеВолд !!! Но почему у меня колизии не работают? Может я чтото не учитываю?

Strelok3848 07.01.2008 20:09

Ответ: И опять она, глючная коллизия
 
Ну вот пример:
Сначала создаёшь в в константах
Const TypePlayer=1, TypeWall=2
После создания плеера пиши EntityType player,TypePlayer
Потом с каким обьектом нужно сделать колизию пишешь пр.EntityType tarelka,TypeWall .И перед RenderWorld() пиши UpdateWorld ().
В цикле пишешь Collisions TypePlayer, TypeWall, 2, 3
Я лично так делаю!

tormoz 07.01.2008 20:14

Ответ: И опять она, глючная коллизия
 
Цитата:

Сообщение от Halk-DS (Сообщение 73215)
Вот меня ета коллизия уже блин достала!!!

Это не коллизия, это изогнутые руки :-D

Цитата:

Все никак немогу понять почему она у меня когда хочет работает, а когда нехочет то нет!
У коллизии нет собственной воли. Как ты написал код, так он и работает

Цитата:

Вот например, наскоко я знаю, сначяла нужно создать кучю обьектов, потом присвоить ЕнтитиРадиус или Бокс, далее в самом главном цикле указать Коллизионс Тра-ля-ля,Бла-бла-ла,2,1 и обязательно УпдатеВолд !!! Но почему у меня колизии не работают? Может я чтото не учитываю?
"Неправильно ты, дядя Федор, бутерброд ешь..."(с)

1 Назначить объект тип коллизии
2 Выставить радиус
3 Назначить коллизии движку

type_col=1
type_level=2
radius#=2

EntityType entity,type_col
EntityType level,type_level

EntityRadius entity,radius

Collisions type_col,type_level,2,2


Все это делается ВНЕ ЦИКЛА :stop:

HolyDel 07.01.2008 20:34

Ответ: И опять она, глючная коллизия
 
в цикле только UpdateWorld - непосредственно перед RenderWorld()
//всмысле вручную больше объекты не двигать, после update и перед render.

tormoz 07.01.2008 21:46

Ответ: И опять она, глючная коллизия
 
Цитата:

Сообщение от Strelok3848 (Сообщение 73220)
В цикле пишешь Collisions TypePlayer, TypeWall, 2, 3
Я лично так делаю!

Сие есть злостная дезинформация.
НЕЛЬЗЯ писать Collisions в цикле

ABTOMAT 08.01.2008 02:43

Ответ: И опять она, глючная коллизия
 
Цитата:

Сообщение от Halk-DS (Сообщение 73215)
Вот меня ета коллизия уже блин достала!!! Все никак немогу понять почему она у меня когда хочет работает, а когда нехочет то нет! Вот например, наскоко я знаю, сначяла нужно создать кучю обьектов, потом присвоить ЕнтитиРадиус или Бокс, далее в самом главном цикле указать Коллизионс Тра-ля-ля,Бла-бла-ла,2,1 и обязательно УпдатеВолд !!! Но почему у меня колизии не работают? Может я чтото не учитываю?

В прямых руках всё работает...
И даже совсем неплохо: у меня боты спокойно бегают по 3Д ландшафту и ещё и не трясу-у-утся, хотя игра стабилизирована дельтатаймингом, и пришлось хорошо погеморроиться чтобы исправит все баги.

У тебя, я уверен, никакого дельтатайминга и в помине нету (почему-то про него все забывают).
В таком случае правильно устроить коллизию - как два пальца об асфальт, стоит только почитать справку Блитза, которая для товарищей, не знакомых с буржуйским языком, есть в русскоязычном исполнении (качать отсюдова, красными буквами написано как открыть архив).

Хелп в руки, вперёд и с песней!

dector 08.01.2008 03:02

Ответ: И опять она, глючная коллизия
 
У мну тож бегает герой - но не трясется. Но я дельтайминг не юзал. И вообще юзайте ентитидистансе для проверки столкновений и колизии для примитивной физики(чтобы не было эфекта дифузии)).

да, товарищ, напишите ка в цикле еще создание ботов, заргузку мешей, текстурок и т.д. и отправляйте скомпиленую ехешку в НАСА. Если хорошо потрудится - человечество не будет грязнить космос лет эдак 3-4. МОЖЕТ и больше.

Удачи!

Halk-DS 09.01.2008 15:20

Ответ: И опять она, глючная коллизия
 
Цитата:

В прямых руках всё работает...
Цитата:

Это не коллизия, это изогнутые руки :-D
:crazy:

(Гдето я вчера писал тут один пост, Пропал он :dontknow: попробую написать такойже)
Вот помогите еще пожалуйста, у меня опять проблемы с колиззией( или с руками:dontknow:? ) !!! Если взять модель какогото чювака, и пришить к нему автомат EntitiParent'ом или любым другим способом, и заставить двигаться вперёд при нажатии клавиши 200 то когда он упирается лбом в стену, автомат ускользает у него из рук! И вобще все дети, какие были пришиты к чюваку, летять, как не в чём не бывало, а как такое можно исправить?

HolyDel 09.01.2008 15:24

Ответ: И опять она, глючная коллизия
 
увеличь радиус коллизии.

Halk-DS 09.01.2008 16:01

Ответ: И опять она, глючная коллизия
 
Кого? Стени? Чювака? Автомата?

HolyDel 09.01.2008 16:06

Ответ: И опять она, глючная коллизия
 
у автомата тоже есть коллизия?
чувака имеется ввиду.
автомату вообще не нужнна коллизия

Halk-DS 09.01.2008 16:16

Ответ: И опять она, глючная коллизия
 
У автомата небыло колизии, но била идея ее сделать, когда осуществил, УЖОСС!!! Спасибо!!! Помогло кстати!!! А можно ставить коллизию для камери и партиклов (спрайтов) ??? Ато чето пробовал, невыходит! Даже ставил ентити радиус, и всеравно ничё! Ну, скамерой я решил проблему в такой способ!
Sphere=CreateSphere(2)
Cam=CreateCamera(Sphere)
EntityAlpha Sphere,0
EntityType Sphere,1
Collisions Bla,bla,bla,bla

и так далее, но если каждий спрайт в партиклах пихать в сферу, етож жрет ресурсов УЖОС просто!!!!

HolyDel 09.01.2008 16:38

Ответ: И опять она, глючная коллизия
 
смотря какие у тебя партиклы, ежели синглмешевые, то нельзя ставить партиклам коллизии, если же однач часчика - ето объект (спрайт, меш, камера? или еще что нибудь), тогда можно.
почему не получалось - хз.

Raiter 09.01.2008 17:46

Ответ: И опять она, глючная коллизия
 
Цитата:

Sphere=CreateSphere(2)
Cam=CreateCamera(Sphere)
Для этого существуют пивоты ;)

HolyDel 09.01.2008 17:58

Ответ: И опять она, глючная коллизия
 
зачем пивоты?
камера является таким же объектом.
ей также можно назначить коллизию
ей также можно задать радиус коллизии.

tormoz 09.01.2008 20:39

Ответ: И опять она, глючная коллизия
 
Любому объекту Блитца можно назначить сферическую или бокс коллизию
Любому мешу можно назначить полигональную

Артем Валерьевич 11.01.2008 10:57

Re: И опять она, глючная коллизия
 
Дабы не создавать новую тему про коллизии, пишу в эту,
Всем доброго времени суток вот моя трабла:
коллизия персонажа с ботами происходит если бот неподвижен и непроисходит если бот двигается на персонажа.
Вот мой код.
Код:


Type ZombyBot
Field ZombyMesh
Field ZombySphere
Field ZombyHealth
Field ZombyAnim
Field Mass
End Type
 
Function CreateZomby(file$,x ,z ,y ,ZombyAnim,ZombyHealth,Mass)
h. ZombyBot=New ZombyBot
h\ZombySphere=CreateSphere(8)
PositionEntity h\ZombySphere,x,z,y
RotateEntity h\ZombySphere,0,Rnd(-360,360),0
ScaleMesh h\ZombySphere, .4,.9,.4
EntityRadius h\ZombySphere,.4,.8
EntityPickMode h\ZombySphere,1,True
EntityAlpha h\ZombySphere,.5
EntityType h\ZombySphere,Bot
h\ZombyMesh=LoadAnimMesh(file$,h\ZombySphere)
ExtractAnimSeq h\ZombyMesh,1,60; calm rack Zombie
ExtractAnimSeq h\ZombyMesh,60,100; Zombie animation walk
EntityAutoFade h\ZombyMesh,1,70

h\ZombyAnim=1
h\ZombyHealth=10
h\Mass=70
End Function
 
Function UpdateZomby()
L#=.1

For h. ZombyBot=Each ZombyBot
If EntityDistance (round,h\ZombySphere)<6 Then
PointEntity h\ZombySphere,round
RotateEntity h\ZombySphere, 0,EntityYaw ( h\ZombySphere ),0
;MoveEntity h\ZombySphere,0,0,L#
Animate h\ZombyMesh,1,1,2
EntityType h\ZombySphere,Bot
End If

Next
End Function

помогите пожалуйста а то мучаюсь с этим уже неделю или две.

HolyDel 11.01.2008 11:05

Ответ: И опять она, глючная коллизия
 
Артем Валерьевич, доброго времени суток, не используйте коллизии для проверки на пересечение персонажа с ботом.
используйте EntityDistance для проверки расстояния до бота. если оно меньше определенного - то убивайте плеера.

Артем Валерьевич 11.01.2008 11:13

Re: И опять она, глючная коллизия
 
HolyDel vbmenu_register("postmenu_73789", true); понимаеш, хочу чтобы боты обступали игрока и не давали ему пройти, вот

HolyDel 11.01.2008 11:35

Ответ: И опять она, глючная коллизия
 
понимаю. штатными средставми етого сделать нельзя (по карйней мере по человечески). вообще можно двигать объект, который коллидится, но не с которым коллидятся другие объекты.
как вариант - просто замедляете скорость игрока, в зависимости от расстояния ботов. что то похожее может получится.

Артем Валерьевич 11.01.2008 11:38

Ответ: И опять она, глючная коллизия
 
Вложений: 1
Спасибо, а то такбы и бился головой об монитор, супер
:rolleyes:
ведь все с етим сталкиваются!


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

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