2014-01-04 2 views
0

У меня есть спрайт, как это, инстанс внутри класса, который включает в себя файл, созданный с texture packer, со всеми спрайтами:Corona SDK, получить прямоугольник спрайта, чтобы генерировать Физику тела

local sheetInfo = require("db.sprites." .. self.element["name"]) 
self.sheet = graphics.newImageSheet("db/sprites/" .. self.element["name"] .. ".png", sheetInfo:getSheet()) 
self.sprite = display.newSprite(self.sheet , element["animations"]) 
self.sprite.xScale, self.sprite.yScale = 0.3, 0.3 

сейчас , моя цель состоит в том, чтобы генерировать динамически физический прямоугольник, который соответствует спрайту. В нормальном случае это довольно просто. Мой код:

function defineBody(sprite) 
    if (sprite.xScale == 1 and sprite.yScale == 1) then return nil end 
    local shape = {} 
    local wx, wy = sprite.width * sprite.xScale/2, sprite.height * sprite.yScale/2 
    local nwx, nwy = sprite.width * sprite.xScale/-2, sprite.height * sprite.yScale/-2 
    shape[1],shape[2] = nwx, nwy 
    shape[3],shape[4] = wx, nwy 
    shape[5],shape[6] = wx, wy 
    shape[7],shape[8] = nwx, wy 
    return shape 
end 

Тогда я называю эту функцию следующим образом:

physics.addBody(self.sprite, self.element["physics"], { friction=0.5, bounce=0.3, shape=defineBody(sprite)}) 

Результат: result

Мой вопрос:

Как изменить эту функцию, чтобы хорошо работать когда меняется и точка привязки изображения? Пример:

self.sprite.anchorX, self.sprite.anchorY = 0.5, 1 

Я пробовал много, но я не нашел простой способ добраться до него.

ответ

1

Вы когда-нибудь проверяли физический редактор? Вы можете создавать объекты phyics внутри других физических объектов, как вы описываете, что вы хотели бы сделать.

http://www.codeandweb.com/physicseditor

Я знаю, что это старое видео, но это помогло мне тонну, когда я был первым, начиная с Corona:

https://www.youtube.com/watch?v=DL_or4XKTfU

Надеется, что это помогает!

+0

Я знаю редактор физики, но я искал способ программно создать «тело по умолчанию» для спрайтов, поэтому мне не нужно вручную определять его для каждого спрайта ... но ... +1 для ответа меня: P – ProGM

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