Pessoal, estou desenvolvendo um jogo RPG isométrico onde a física é com o Box2D, porém, quando um personagem colide com outro esse outro é empurrado e quero que ele fique parado e o body dele tem que ser dynamic.
Obrigado.
Pessoal, estou desenvolvendo um jogo RPG isométrico onde a física é com o Box2D, porém, quando um personagem colide com outro esse outro é empurrado e quero que ele fique parado e o body dele tem que ser dynamic.
Obrigado.
Por que o body dele tem que ser Dynamic? Não pode ser Kinematic?
na verdade seria o ideal pois, não preciso da gravidade, forças e etc… somente colisão mesmo. Porém se os kinematic não colidem?
Os kinematic bodies colidem normalmente, igual ao dynamic body. A única diferença é que eles não serão movimentados pelo motor de física.
São o tipo de corpo ideal para deixar em locais do cenário que se movem e que objetos físicos podem colidir.
Coloquei o personagem como DYNAMIC e um inimigo como KINEMATIC só que quando o personagem colide continua empurrando o kinematic.
Estranho, poste seu código. E veja o que diz a documentação oficial da box2d:
Se seu kinematic body está se movendo em resposta a força, é porque tem coisa errada no seu código.
[code]function createPhysics(object)
local physics = {}
local body = world:addBody(MOAIBox2DBody.DYNAMIC)
if object.name == ‘enemy’ then //COLOQUEI ESSA VERIFICAÇÃO SOMENTE PARA VERIFICAR SE É O PERSONAGEM OU O INIMIGO E DEFINIR O TIPO DE BODY
local body = world:addBody(MOAIBox2DBody.KINEMATIC)
end
local prop = object.renderer
local x,y = object:getPos()
local width, height = prop:getSize()
local xMin, yMin, xMax, yMax = -width / 2, -height / 2, width / 2, height / 2
prop:setPos(xMin, yMin)
prop:setParent(body)
prop.body = body
body.prop = prop
body:setTransform(x+32, y-16)
physics.body = body
poly = {
0, -16,
32, 0,
0, 16,
-32, 0,
}
physics.fixture = body:addPolygon (poly)
physics.fixture:setCollisionHandler ( onCollide, MOAIBox2DArbiter.ALL)
physics.fixture:setRestitution(0)
body:setFixedRotation(0)
body:resetMassData()
return physics
end
function onCollide (event, fixtureA, fixtureB, arbiter)
if event == MOAIBox2DArbiter.BEGIN then
print ( 'begin!')
end
if event == MOAIBox2DArbiter.END then
print ( 'end!')
end
if event == MOAIBox2DArbiter.PRE_SOLVE then
print ( 'pre!' )
end
if event == MOAIBox2DArbiter.POST_SOLVE then
print ( 'post!' )
end
end
[/code]
Que linguagem é essa? Isso certamente não é java.
Tópico movido para o fórum de outras linguagens. Por que abriu em Java Básico?
É difícil dizer qual é o problema. O MoaiSDK parece ter alterado bastante coisa do funcionamento básico da Box2D.
Na Box2D original, não existe esse método addBody, nem esses Arbiter de colisões.
Você seria obrigado a chamar createBody passando um BodyDef. E teria mais alguns passos na criação de um corpo físico. Você também teria que usar um listener de colisão no mundo.
Só lendo a documentação e entendendo direito o que as camadas inseridas na sua API fazem para saber se não é ela mesmo que está aplicando a força no kinematic body sem que você peça.