2 votes

Modifie automatiquement la physique d'un objet après un changement de sa taille

Je suis nouveau dans Corona et Lua. J'ai la question suivante :

J'ai un objet cake avec ces paramètres physiques (qui n'ont pas vraiment d'importance) :

["cake1"] = {

                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -21, 62.5  ,  -36, 62.5  ,  -50, 55.5  ,  -58.5, 46  ,  -36, -38.5  ,  57, -40.5  ,  57.5, 34  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -7.5, -63  ,  -13, -61.5  ,  -12, -64.5  ,  -8, -64.5  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -12, -64.5  ,  -13, -61.5  ,  -17.5, -56  ,  -21, -52.5  ,  -18.5, -60  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -47, -37.5  ,  -58.5, 46  ,  -58.5, -33  ,  -53, -37.5  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -26, -52.5  ,  -21, -52.5  ,  -18.5, -52  ,  -9, -47.5  ,  -6.5, -41  ,  -36, -38.5  ,  -34.5, -46  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -36, -38.5  ,  -58.5, 46  ,  -47, -37.5  ,  -42, -39.5  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -6.5, -41  ,  -9, -47.5  ,  -6.5, -44  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   25, -40.5  ,  7, -40.5  ,  17, -42.5  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   48, -42.5  ,  57, -40.5  ,  25, -40.5  ,  32, -42.5  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   -18.5, -52  ,  -21, -52.5  ,  -17.5, -56  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   7, -40.5  ,  -36, -38.5  ,  -6.5, -41  }
                    }
                     ,
                    {
                    pe_fixture_id = "", densité = 2, friction = 0, rebondir = 0, 
                    filtre = { categoryBits = 1, masqueBits = 65535, groupIndex = 0 },
                    forme = {   25, -40.5  ,  -36, -38.5  ,  7, -40.5  }
                    }

        }

et lorsque je l'insère dans la scène, j'obtiens le résultat suivant :

enter image description here

Le cake est trop grand, alors j'utilise cake1:scale(0.5,0.5) pour changer sa taille. Le problème est que la physique ne s'adapte pas automatiquement à sa nouvelle taille et le résultat est le suivant :

enter image description here

Y a-t-il un moyen facile de changer la taille d'un objet et que la physique s'adapte automatiquement à la nouvelle taille ou dois-je les réécrire ?

11voto

Krishna Raj Salim Points 3786

Utilisez-vous un éditeur de physique à cette fin..?

Ensuite, il y a scaleFactor fourni. Vous pouvez assigner la physique à l'objet avec ce facteur d'échelle, comme ci-dessous:

local scaleFactor = 1.0
local physicsData = (require "shapedefs").physicsData(scaleFactor)
local shape = display.newImage("objectname.png")
physics.addBody( shape, physicsData:get("objectname") )

Et lorsque vous modifiez le scaleFactor, la taille de la zone de physique changera automatiquement.

Pour plus de détails, visitez : http://velluminteractive.com/advanced-physics-bodies-with-physics-editor-and-corona-sdk/

0voto

111WARLOCK111 Points 123

Vous avez changé d'échelle de 0.5 plus petit, ce qui signifie que vous devez réduire toutes les objets physiques de 0.5, utilisez une calculatrice pour diviser vos nombres normaux par 2 et pour les nombres inférieurs à 0, divisez-les par 2 et ajoutez votre nombre avec le nombre résultant, voici un exemple :

24 = 12

-24 = -36

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X