This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Um componente de colisão pode usar várias formas primitivas ou uma única forma complexa.
As formas primitivas são box, sphere e capsule. Você adiciona uma forma primitiva clicando com o botão direito no objeto de colisão e selecionando Add Shape:

Uma box tem posição, rotação e dimensões (largura, altura e profundidade):

Uma sphere tem posição, rotação e diâmetro:

Uma capsule tem posição, rotação, diâmetro e altura:

Formas capsule são suportadas apenas ao usar física 3D (configurada na seção Physics do arquivo game.project).
Uma forma complexa pode ser criada a partir de um componente tilemap ou de uma forma de casco convexo.
O Defold inclui um recurso que permite gerar facilmente formas de física para o tile source usado por um tile map. O manual de Tilesource explica como adicionar grupos de colisão a um tile source e atribuir tiles a grupos de colisão (exemplo).
Para adicionar colisão a um tile map:

Observe que a propriedade Group não é usada aqui, pois os grupos de colisão são definidos no tile source do tile map.
O Defold inclui um recurso que permite criar uma forma de casco convexo a partir de três ou mais pontos.
.convexshape) usando um editor externo.O formato de arquivo de casco convexo usa o mesmo formato de dados de todos os outros arquivos Defold, ou seja, o formato de texto protobuf. Uma forma de casco convexo define os pontos do casco. Em física 2D, os pontos devem ser fornecidos em sentido anti-horário. Uma nuvem abstrata de pontos é usada no modo de física 3D. Exemplo 2D:
shape_type: TYPE_HULL
data: 200.000
data: 100.000
data: 0.0
data: 400.000
data: 100.000
data: 0.0
data: 400.000
data: 300.000
data: 0.0
data: 200.000
data: 300.000
data: 0.0
O exemplo acima define os quatro cantos de um retângulo:
200x300 400x300
4---------3
| |
| |
| |
| |
1---------2
200x100 400x100
Há várias ferramentas externas diferentes que podem ser usadas para criar formas de colisão:
O objeto de colisão e suas formas herdam a escala do objeto de jogo. Para desabilitar esse comportamento, desmarque a caixa de seleção Allow Dynamic Transforms na seção Physics de game.project. Observe que apenas escala uniforme é suportada e que o menor valor de escala será usado se a escala não for uniforme.
As formas de um objeto de colisão podem ser redimensionadas em tempo de execução usando physics.set_shape(). Exemplo:
-- define dados da forma capsule
local capsule_data = {
type = physics.SHAPE_TYPE_CAPSULE,
diameter = 10,
height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)
-- define dados da forma sphere
local sphere_data = {
type = physics.SHAPE_TYPE_SPHERE,
diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)
-- define dados da forma box
local box_data = {
type = physics.SHAPE_TYPE_BOX,
dimensions = vmath.vector3(10, 10, 5),
}
physics.set_shape("#collisionobject", "my_box_shape", box_data)
Uma forma do tipo correto com o id especificado já deve existir no objeto de colisão.
Formas de colisão em física 3D podem ser rotacionadas ao redor de todos os eixos.
Formas de colisão em física 2D só podem ser rotacionadas ao redor do eixo z. Rotação ao redor do eixo x ou y produzirá resultados incorretos e deve ser evitada, mesmo ao rotacionar 180 graus para essencialmente inverter a forma ao longo do eixo x ou y. Para inverter uma forma de física, é recomendado usar physics.set_hflip(url, flip) e physics.set_vflip(url, flip).
Você pode habilitar a depuração de Física para ver as formas de colisão em tempo de execução.