Ajuda com Joints

No replies
tunnelstudios
User offline. Last seen 1 year 23 weeks ago. Offline
Joined: 5 Jun 2012

Olá pessoal.
Estou começando no universo do corona e logicamente tendo algumas dificuldades.
Estou tentando criar um carro mas as rodas estão girando em torno do eixo do carro.

Foi inserido a imagens do carro e das rodas separadas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
local body = display.newImageRect("van.png",100,50)
body.x = 100
body.y = 200
body.myName = "van"
physics.addBody( body, physicsDataCarro:get("van") )
 
 
local roda1 = display.newImageRect("roda.png",30,30)
roda1.x = 130
roda1.y = 235
physics.addBody( roda1,"dynamic", { density = 1.0, friction = 5, bounce = 0.2, radius = 15} )
 
local roda2 = display.newImageRect("roda.png",30,30)
roda2.x = 70
roda2.y = 235
physics.addBody( roda2,"dynamic", { density = 1.0, friction = 5, bounce = 0.2, radius = 15} )

Foi criado os suportes do carro:

1
2
3
4
5
6
7
-----------------------------------------------------
--suportes do carro
-----------------------------------------------------
quadradoDireita = display.newRect(122,210,10,5)
physics.addBody( quadradoDireita, { density = 0.05, friction = 0.3, bounce = 0.2} )
quadradoEsquerda = display.newRect(60,210,10,5)
physics.addBody( quadradoEsquerda, { density = 0.05, friction = 0.3, bounce = 0.2} )

Os amortecedores

1
2
3
4
RetanguloDireita = display.newRect(115,210,15,15)
physics.addBody( RetanguloDireita, { density = 0.05, friction = 0.3, bounce = 0.2} )
RetanguloEsquerda = display.newRect(60,210,15,15)
physics.addBody( RetanguloEsquerda, { density = 0.05, friction = 0.3, bounce = 0.2} )

Inserindo as partes em um grupo

1
2
3
4
5
6
7
8
9
CarroQuadrados:insert(trilha)
CarroQuadrados:insert(roda1)
CarroQuadrados:insert(roda2)
CarroQuadrados:insert(quadradoDireita)
CarroQuadrados:insert(quadradoEsquerda)
CarroQuadrados:insert(body)
CarroQuadrados:insert(RetanguloDireita)
CarroQuadrados:insert(RetanguloEsquerda)
CarroQuadrados.y = 0

e os joints

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
local juntaQuadradoEsquerdoCarro = physics.newJoint ("weld", body, 
                quadradoEsquerda, quadradoEsquerda.x, quadradoEsquerda.y)
local juntaQuadradoDireitoCarro = physics.newJoint ("weld", body, 
                quadradoDireita, quadradoDireita.x, quadradoDireita.y)
                                
local juntaRetanguloEsquerdoQuadrado = physics.newJoint ("weld", quadradoEsquerda, 
                RetanguloEsquerda, RetanguloEsquerda.x, RetanguloEsquerda.y)
local juntaRetanguloDireitoQuadrado = physics.newJoint ("weld", quadradoDireita, 
                RetanguloDireita, RetanguloDireita.x, RetanguloDireita.y)
                                
local piston_joint_Esquerda = physics.newJoint("piston", RetanguloEsquerda, quadradoEsquerda, RetanguloEsquerda.x, RetanguloEsquerda.y , 0, -1)
      piston_joint_Esquerda.isLimitEnabled = true
      piston_joint_Esquerda:setLimits(100,900)
 
 
 
local distanceRodaEcarro = physics.newJoint("distance", roda2, body, roda2.x,roda2.y,body.x,body.y)
      
--distanceRodaEcarro.frequency = 15
--distanceRodaEcarro.dampingRatio = 20
 
local distanceRodaDcarro = physics.newJoint("distance", roda1, body, roda1.x,roda1.y,body.x,body.y)
      --distanceRodaDcarro.isLimitEnabled = true
      
      
--Joint:getRotationLimits()
--distanceRodaDcarro.frequency = 15
--distanceRodaDcarro.dampingRatio = 20
 
local distanceRodaE2 = physics.newJoint("distance", quadradoDireita, RetanguloEsquerda, quadradoDireita.x,quadradoDireita.y,RetanguloEsquerda.x,RetanguloEsquerda.y)
local distanceRodaD2 = physics.newJoint("distance", quadradoEsquerda, RetanguloDireita, quadradoEsquerda.x,quadradoEsquerda.y,RetanguloDireita.x,RetanguloDireita.y)
 
        -- o motor for�a o objeto para fora
piston_joint_Esquerda.isMotorEnabled = true
piston_joint_Esquerda.motorSpeed = 300
piston_joint_Esquerda.maxMotorForce = 10
 
local piston_joint_Direita = physics.newJoint("piston", RetanguloDireita, quadradoDireita, RetanguloDireita.x, RetanguloDireita.y , 0, -1)
        -- o motor for�a o objeto para fora
piston_joint_Direita.isMotorEnabled = true
piston_joint_Direita.motorSpeed = 300
piston_joint_Direita.maxMotorForce = 10
-------------------------------------------------------------------------------
--mant�m fixa a dist�ncia entre as rodas
-------------------------------------------------------------------------------
local distanceRodas = physics.newJoint("distance", roda1, roda2, roda1.x,roda1.y,roda2.x,roda2.y)
-------------------------------------------------------------------------------
--sistema de molas para manter as rodas juntas das suspen��es
-------------------------------------------------------------------------------
local distanceRodaE = physics.newJoint("distance", roda1, RetanguloEsquerda, roda1.x,roda1.y,RetanguloEsquerda.x,RetanguloEsquerda.y)
local distanceRodaD = physics.newJoint("distance", roda2, RetanguloDireita, roda2.x,roda2.y,RetanguloDireita.x,RetanguloDireita.y)
 
local distanceRodaE = physics.newJoint("distance", roda2, RetanguloEsquerda, roda2.x,roda2.y,RetanguloEsquerda.x,RetanguloEsquerda.y)
local distanceRodaD = physics.newJoint("distance", roda1, RetanguloDireita, roda1.x,roda1.y,RetanguloDireita.x,RetanguloDireita.y)

Este código fez com que o carro esteja com o comportamento da imagem abaixo:

Carro - https://dl.dropbox.com/u/11765686/carro.png

Não sei se há algo errado na criação dos joints mas gostaria de um resiltado parecido como estes

abaixo:

https://www.youtube.com/watch?feature=player_embedded&v=Owu-8D662M8

https://www.youtube.com/watch?v=rwczaOP0-LI