2013-11-24 3 views
1

У меня есть тип света в моей игре, который должен проникнуть во все препятствия, как я могу это достичь?Box2D Свет, чтобы игнорировать все тела

Я попытался это:

final short IGNORED = 0x001; 

FixtureDef fd = new FixtureDef(); 
fd.filter.categoryBits = IGNORED; 
fd.filter.groupIndex = IGNORED; 
fd.filter.maskBits = IGNORED; 

new PointLight(rayHandler, 1000, Color.CYAN, 1000, 200, 400); 

PointLight.setContactFilter(IGNORED,IGNORED,IGNORED); 

, но я все еще получаю тени от этого света.

Другое дело, что мои тени черные и продолжаются вечно, есть ли способ создать тени, которые arent настолько темные и длинные?

В основном это то, что я получаю: enter image description here

, но это то, что я хочу: enter image description here

+1

Звучит скорее как графический вопрос, чем box2d или вопрос физики –

ответ

0

Я не знаком с libgdx, в частности, но box2d позволяет создать тело как датчик.

Из инструкции:

Иногда игра логика должна знать, когда два светильников перекрывались еще там не должно быть никакого ответа столкновения. Это делается с помощью датчиков. Датчик - это прибор, который обнаруживает столкновение, но не вызывает ответ .

Вы можете отметить любое приспособление как датчик. Датчики могут быть статическими или динамическими. Помните, что у вас может быть несколько светильников на тело, и у вас может быть любое сочетание датчиков и крепких светильников.

Датчики не создают контактные точки. Есть два способа получить состояния датчика:

b2Contact :: IsTouching b2ContactListener :: BeginContact и EndContact

Таким образом, вы должны быть в состоянии использовать свой контактный слушатель, чтобы обнаружить, если он сталкиваясь, но не получить ответ на столкновение из физической системы.

Было ли это полезно?

0

Если вы хотите, чтобы to penetrate all obstacles в вашей игре, то make them sensor true. Если вы хотите проверить столкновения, то вы должны check collision in the BeginContact or end contact.

Как

fd.isSensor = true; 
1

«игнорировать все тела» вы можете просто использовать XRay и вам не нужны фильтры, но в вашей теме я вижу другой вопрос. Во всяком случае:

PointLight pointLight = new PointLight(...); 
pointLight.setXray(true); 
2

Если вы хотите, чтобы все стало ярче, вы можете попробовать использовать окружающий свет. Например:

rayHandler.setAmbientLight(0.5f); 

делает все на 50% ярче, что может обеспечить желаемый эффект. Вы также можете добавить цвета к этому (например, для достижения эффекта sunset-ish vibe).

+1

Это гораздо лучший ответ, чем первый. – Connorelsea

Смежные вопросы