"When he's making his jump shots, he's almost unbeatable," said Roy, who had 19 points and 10 rebounds in the Blazers' 94-76 victory over the road-weary Cavaliers on Wednesday night.
"Tonight he wasn't making those shots," Roy added.
James scored 23 points for Cleveland, which is 2-3 on its seven-game road trip. The Cavaliers were coming off a 101-96 loss to the Seattle SuperSonics on Tuesday night.
The Blazers, who had lost eight of their last 10 games, led by as many as 25 points.
Zach Randolph led the Blazers with 26 points and 12 rebounds, his 22nd double-double of the season.
Randolph, who was averaging a career-high 23.4 points but scored just four in a loss to Denver on Sunday, was back in form. His running layup gave the Blazers an 90-66 lead.
"Tonight we had to follow Zach," Roy said. "He did a great job of pounding inside, pounding those guys inside, and leading with energy and not just scoring."
Roy also had six steals, a season-high for a Blazer. Rookie LaMarcus Aldridge scored 14 points.
Cleveland has won five of the last seven overall games against the Blazers, but has lost seven of its last eight at the Rose Garden.
Larry Hughes added 17 points for the sluggish Cavaliers. Cleveland's seven assists for the game tied an all-time opponent low against the Trail Blazers.
James, who was averaging 26.9 points going into the game, was 8-of-21 from the floor and 6-of-13 on free throws. He retreated to the bench late in the fourth quarter when it was clear the game was out of reach.
"My legs weren't under my jump shot," James said. "For some reason, I just couldn't get under it. I started to attack late in the game but it was too late."
It was Portland's largest margin of victory at home this season.
"They looked like they were a little tired," Randolph said of the Cavs.
Portland was without forward Travis Outlaw, who missed his seventh straight game with an ankle sprain. Teammate Jarrett Jack missed his third straight because of a concussion he sustained in an auto accident last week.
The Blazers got off to a fast start, outscoring the Cavaliers 9-2 through the first eight minutes of the game. The first field goal scored by Cleveland was a 3-pointer made by James with 3:51 left in the first quarter.
The Cavaliers trailed 18-9 after the first quarter, their lowest offensive output for the opening quarter this season. James played the entire first period, but spent the first half of the second on the bench donned in a long-sleeved shirt.
James moved the Cavaliers within 40-33 on a turnaround jumper he made from mid-air with his back turned to the net.
The Blazers, who led by as many as 11 points early, held a 41-37 lead at the half. Although the Cavaliers threatened briefly after the break, coming within two points, the rally was short-lived. Dan Dickau's 3-pointer extended it to 54-42.
"We ought to feel embarrassed with our performance," Cleveland coach Mike Brown said. "There was no effort whatsoever on our part. They kicked our behinds in every single category.
The Cavaliers are just 3-8 this season when playing the second half of a back-to-back. ... James had 32 points in Cleveland's last meeting with Portland, a 100-87 victory on Nov. 15. ... Fans at the Rose Garden booed Mohawked Cavalier Scot Pollard when he entered the game in the fourth quarter. ... Portland 33 personal fouls was a season-high. The Cavaliers' 28 made free throws were a season high against the Blazers.