Brewers left fielder Khris Davis had a two-run double in the first inning and an RBI double in the fifth.
Five of Davis' seven hits this spring were doubles.
Brewers starter Wily Peralta, the No. 3 starter, worked 3 1/3 innings, giving up four hits and one run. He walked one and struck out four.
Peralta had to work out of some jams.
"You always want to get, like, 1-2-3 and get out of there," he said. "But those situations come up and just like during the season, you have to step up and make some pitches. I was able to do that today. … I'm happy. The things I've been working on have been there, so I'm happy with that."
One of the hits off Peralta was a tremendous blast by Royals third baseman Mike Moustakas, who sent a fastball to right field and out of the stadium. It was Moustakas' first homer of the spring.
Moustakas also had an RBI single in the fifth.
But Peralta had plenty of offensive support.
Royals starter Edinson Volquez struggled, giving up eight hits and six runs in four innings. He threw 68 pitches, 44 for strikes.
"Guys came out of the chute swinging hard, man," Peralta said. "Volquez left some pitches up in the zone, and they took advantage of that."
Volquez has given up nine earned runs in 8 1/3 innings this spring.
Up next for Brewers: Ryan Braun and Aramis Ramirez will be back in the Brewers' lineup when the team hosts a sellout crowd and the world champion Giants at Maryvale Baseball Park on Thursday. Mike Fiers gets the start for Milwaukee against Ryan Vogelsong in a 3:05 p.m. CT game set for broadcast on Gameday Audio and MLB.TV.
Jeffrey Flanagan is a reporter for MLB.com. Follow him on Twitter at @jflanagankc. This story was not subject to the approval of Major League Baseball or its clubs.