In the bottom of the fourth, extra outfielder candidate Roger Bernadina hit a 1-0 pitch off of the batter's eye in center field for a solo homer, his second.
Reds starter Brett Marshall, who could make the pitching staff because of injuries, gave up two runs and two hits over four innings, with three walks and four strikeouts. Marshall allowed only one hit over his first three scoreless innings before running into trouble.
The Royals drew three walks from Marshall to load the bases with one out in the fourth. One run scored on Lorenzo Cain's sacrifice fly and another crossed on Jimmy Paredes' single to second base.
"I was cruising for three innings and kind of just took it for granted, I guess, instead of pounding the zone and acting like I have the rest of the game to go," Marshall said. "I kind of got away from command and the ball was coming out all over the place. I buckled down and threw some strikes there at the end."
Against reliever J.J. Hoover in the sixth, Cain hit a double to center field and scored a run when Pedro Ciriaco reached on a throwing error by third baseman Neftali Soto.
In the sixth with one out, Heisey homered to center field for a 5-3 Reds lead. Soto hit a 3-1 pitch from Donnie Joseph for a three-run homer to left-center field with one out in the eighth.
Shields allowed five runs and six hits, including three homers, with no walks and six strikeouts over his six innings.
"I felt really good actually. It was kind of one of those days when you feel too good and you start overthrowing," Shields said. "I think the ball was up in the zone for the most part, thoughout the game. I felt I made some quality pitches that they hit as well, but I got my 97 pitches in, almost 100, and it was nice to work today. They made me work, they worked the count and I got behind in the count quite a bit today. I got it done and, unfortunately, gave up a few homers, but that's part of the game."
Up next: The Royals meet their Surprise complex neighbors, the Rangers, for the fourth and final time at 3:05 p.m. CT on Saturday, live on MLB.TV and Gameday Audio. The Royals won two of the first three meetings. Left-hander Jason Vargas will start with Kelvin Herrera coming on in relief. Tommy Hanson is the Rangers' probable starter.