一种根据角色位置缩放游戏世界的算法

时间:2013-09-26 19:10:18

标签: algorithm math 2d-games

我正在构建一个2人游戏,此刻滚动位置由2个角色位置的中点决定。但我有一个问题。当角色走得很远时,屏幕的滚动位置位于这些角色的中间,因为它们移出视野,所以没有人可见。

所以我正在寻找一种算法来确定世界应该在视野中的角色的比例。

你的时间很宝贵。

2 个答案:

答案 0 :(得分:1)

假设您的屏幕(或窗口)是固定大小,(Screen_Width, Screen_Height)

现在计算两个玩家之间的X和Y距离。

xdist = abs(Player2.x - Player1.x);
ydist = abs(Player2.y - Player1.y);

计算x和y比例因子:

xscale = Screen_Width / xdist;
yscale = Screen_Height / ydist;

取较小的值。

scale = min(xscale, yscale);

现在,如果scale >= 1,则播放器将适合屏幕。您不必进行任何缩放。你可以找到中点并画画。

如果scale < 1,则必须按scale缩放所有坐标。

答案 1 :(得分:1)

没有任何关于您在这里使用的单位,IDE或语言类型的信息是一种可能的解决方案:

function object calcScale(screen, player1, player2, midpoint):
   width = abs(player1.x-player2.x)
   height = abs(player1.y-player2.y)
   width = max(width,height)
   height = width
   x = min(player1.x, player2.x, midpoint.x-width/2)
   y = max(player1.y, player2.y, midpoint.y+height/2)
   s = (screen.width*screen.height) / (width*height)

   newscreen= {startx:x, starty:y, scale:s}

   return newscreen

这假设一个方形视口,玩家始终居中。