fwiw: i sort of do the opposite, and always use anchorChildren. the “trick” for me is to always include a big invisible “bounds” rectangle, so my group will have a known size. then anchorChildren will work in a reasonably sensible way (so long as you never exceed those bounds).
the “crazy” seems a byproduct of “groups have no inherent size, but take on the size of their contents” logic, so if anchorChildren is true then when the group repositions its children it also changes its own “size”, so with a new size that affects the x/y derived from its anchor, so if x/y changed then move children, then affects size, so then move children, then affects size, ad inf… which is just silly.
you can see this behavior just *inserting* into a non-bounded group as it shifts and shimmies all over the place after each addition, growing its content bounds and repositioning itself to its anchor, so good luck “guessing” where to insert the next object!
i banged this out to try to roughly mimic your car using this approach. you probably don’t need ALL those group wrappers, but the fn was there so i used it. really the only thing of note is “bounds”:
-- wrap object in group util fn local function newWrapper(obj,x,y) local grp = display.newGroup() grp.anchorChildren = true if (obj) then grp:insert(obj) end if (x and y) then grp.x,grp.y=x,y end return grp end -- create all parts at origin local bounds = display.newRect(0, 0, 300, 300); bounds:setFillColor(1,1,1,0.1) -- typically bounds.isVisible=false local body = display.newRect(0, 0, 200, 50); body:setFillColor(0.5,0.5,0.8) local cab = display.newRect(0,0,50,50); cab:setFillColor(0.6,0.6,0.9) local tiref = display.newCircle(0,0,30); tiref:setFillColor(0.2,0.2,0.2) local wheelf = display.newCircle(0,0,20); wheelf:setFillColor(0.4,0.7,0.7) local tireb = display.newCircle(0,0,30); tireb:setFillColor(0.2,0.2,0.2) local wheelb = display.newCircle(0,0,20); wheelb:setFillColor(0.4,0.7,0.7) -- wrap into groups and position internally local truck = newWrapper(bounds) local chassis = newWrapper() chassis:insert( newWrapper(body) ) chassis:insert( newWrapper(cab, -25, -50) ) truck:insert( chassis ) local wtiref = newWrapper() wtiref:insert( newWrapper(tiref) ) wtiref:insert( newWrapper(wheelf) ) wtiref.x, wtiref.y = -75, 50 wtiref.xScale = 0.5 truck:insert( wtiref ); local wtireb = newWrapper() wtireb:insert( newWrapper(tireb) ) wtireb:insert( newWrapper(wheelb) ) wtireb.x, wtireb.y = 75, 50 wtireb.xScale = 0.5 truck:insert( wtireb ); -- now position overall truck.x, truck.y = display.contentCenterX, display.contentCenterY -- give a fixed indication of center -- (with animation off, the back corner of cab-at-chassis should occur here) local center = display.newCircle(display.contentCenterX, display.contentCenterY, 5); center:setFillColor(1,0,0,0.5) if (true) then -- animation?? transition.to (wtireb, { time = 500, rotation = -360, iterations=8} ) transition.to (wtiref, { time = 500, rotation = -360, iterations=8} ) transition.to (chassis, { time = 250, y = -50, iterations=16, transition=easing.continuousLoop } ) transition.to (truck, { time = 4000, x = 200 } ) end