Here is an example how you can use MovieClip in Gideros as physics object and change it's images on collision. Of course you can extend it easily to much longer and complex animations.

--create bitmaps for movie clip
local start = Bitmap.new(Texture.new("images/crate.png"))
start:setAnchorPoint(0.5, 0.5)
local endAnim = Bitmap.new(Texture.new("images/broken_crate.png"))
endAnim:setAnchorPoint(0.5, 0.5)

--create movie clip with 2 frames
--with normal crate and broken crate
local crate = MovieClip.new{
	{1, 1, start}, 
	{2, 2, endAnim}
}
--go to first frame or else movie clip will played automatically
crate:gotoAndStop(1)

--create physics bocy
local body = world:createBody{type = b2.DYNAMIC_BODY, position = {x = 10, y = 10}}

--store name for future reference
body.name = "crate"

--create physics shape
local shape = b2.PolygonShape.new()
shape:setAsBox(40, 40)
body:createFixture{shape = shape, density = 1, restitution = 0.2, friction = 0.3}

--keep body reference in movieclip
crate.body = body

--keep movieclip reference in body
body.movieclip = crate

--add movieclip to stage
stage:addChild(crate)

--define collision handler
local function onBeginContact(e)
    --getting contact bodies
    local fixtureA = e.fixtureA
    local fixtureB = e.fixtureB
    local bodyA = fixtureA:getBody()
    local bodyB = fixtureB:getBody()
    
	--checking body names
	--if it is crate, then change image to second frame
    if bodyA.name == "crate" then
		bodyA.movieclip:gotoAndStop(2)
	end
	if bodyA.name == "crate" then
		bodyB.movieclip:gotoAndStop(2)
	end
end

world:addEventListener(Event.BEGIN_CONTACT, onBeginContact)

--for world movement
local function onEnterFrame()
	world:step(1/60, 8, 3)
	
	for i = 1, stage:getNumChildren() do
		local sprite = stage:getChildAt(i)
		local body = sprite.body
		
		sprite:setPosition(body:getPosition())
		sprite:setRotation(body:getAngle() * 180 / math.pi)
	end
end

stage:addEventListener(Event.ENTER_FRAME, onEnterFrame)