最近我们也做了一个跳一跳的小游戏。
我们的跳一跳是多人联网一同比赛的。
这个跳的过程我们是由服务器来做的。

如图,我们的平台大小各不同。我们知道玩家当前的位置和玩家要跳跃的距离,根据这个我们要求出玩家的目标点。为了尽可能的跳到下一个平台上,所以我们需要朝着下一个平台的中心点跳,这里用到了方向向量的概念。
如果我们把玩家的位置坐标表示为{x0, y0},下一个平台的中心坐标为{x1,y1}。玩家跳跃距离为Len
那么我们计算玩家的的目标位置:
get_e(X0, Y0, X1, Y1) ->
X2 = X0 - X1,
Y2 = Y0 - Y1,
math:sqrt(X2 * X2 + Y2 * Y2).
get_e_x_y(X0, Y0, X1, Y1) ->
E = get_e(X0, Y0, X1, Y1) ,
XX = X1 - X0,
YY = Y1 - Y0,
case E =:= 0 of
true -> {0, 0};
_ -> {XX / E, YY / E}
end.
get_x_y(Len, X0, Y0, X1, Y1) ->
{X2, Y2} = get_e_x_y(X0, Y0, X1, Y1),
X = X0 + Len * X2,
Y = Y0 + Len * Y2,
{X, Y}.
计算出玩家跳跃后的目标点,我们要判断玩家是否有落在下一个平台上或者是落在当前平台上,这个就比较简单了。直接计算出玩家跳跃后的点与两个平台中心点的距离,如果小于两个平台的半径,表示它落在了平台上,反之没有在平台上。
这个应该还算是简单。
架构
这个有点类似LOL。不过我只有两个进程
匹配进程 -> 比赛进程。
玩家首选进入到匹配进程,由匹配进程进行匹配,挑选出合适的玩家,然后新起一个比赛进程,以后这些玩家都和这个比赛进程通讯。由比赛进程完成当场比赛的所有工作,比赛结束,这个比赛进程当然也就被回收掉啦。
最后,我觉得这个游戏不好玩啊......好无聊
网友评论