Wow, I made it 
display.setDefault( "anchorX", 0 ) display.setDefault( "anchorY", 0 ) local world = display.newGroup( ) function scroll(event) if event.phase == "began" then world.xStart = world.x world.yStart = world.y world.xBegan = event.x world.yBegan = event.y elseif ( "moved" == event.phase ) then local dx = event.x - world.xBegan local dy = event.y - world.yBegan local x = dx + world.xStart local y = dy + world.yStart world.x = x world.y = y end end local background = display.newImageRect( "Icon-60@3x.png", 4098, 3096 ) world:insert (background) function tap(event) local square = display.newRect( event.x-world.x, event.y-world.y, 2, 2) square:setFillColor( 1 ) world:insert (square) local sqCenterX, sqCenterY = square:localToContent( -world.x, -world.y ) print( "White square's center position in screen coordinates: ", sqCenterX, sqCenterY ) end display.currentStage:addEventListener( "touch", scroll ) Runtime:addEventListener( "tap", tap )
- First of all, you need set defaultAnchorX and Y to 0. In centralization system I was be more confused. But you can make it without nulling defaultAnchor, just divide in half
- Create new object in tap function end set coordinates: event.x - world.x, event.y - world.y. World it’s our group with objects which scrolled. Then add helper object to this group
- Then, use method localToContent with this ccordinates: -world.x, -world.y