首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择跟随速度防止超车

选择跟随速度防止超车
EN

Stack Overflow用户
提问于 2014-07-02 04:50:12
回答 2查看 68关注 0票数 0

在我的游戏中,角色会从屏幕的低端游到设备屏幕的顶端。

将有四条或更多泳道,里面有多个字符。每个角色都有各自的行进速度,我不希望角色重叠或超车。

我附上了一个草图,以显示粗略的游戏布局。

我正在为如何计算新产生的角色(O1)的速度而苦苦挣扎,以便它不会在同一泳道中重叠或超越前一个角色(O2)。

代码语言:javascript
运行
复制
# variables available to calculate the character speed
- O2 = origin of the previous character
- O1 = origin of the new character
- D  = distance between character 1 and 2
- S2 = the speed of the previous character

# unknown values
- S1 = the speed new character?

# example
O2 = 10, 100
O1 = 10, 10  
D = O2.height - O1.height
S2 = 10 (10 pixels per frame)  


S1 = ?????
EN

回答 2

Stack Overflow用户

发布于 2014-07-02 05:29:08

正如我在评论中提到的,由于距离不同,考虑它的一个简单方法是使用时间。

Swimmer0将花费time0 = distance0/speed0秒游到终点。

当Swimmer1开始时,Swimmer0将完成其旅程的partial0秒,因此Swimmer0将有(distance0/speed0)-partial0秒剩余。

这是Swimmer1必须花费的最短时间。所以我们希望Swimmer1的速率是:

代码语言:javascript
运行
复制
speed1 < distance1 / ((distance0/speed0)-partial0)

确保Swimmer1在Swimmer0之后完成

票数 0
EN

Stack Overflow用户

发布于 2014-07-02 05:29:17

为了找到追随者在不超过领先者的情况下到达终点的最大速度,你必须知道两人将行驶的距离。如果D2是O2在O1启动时要走的距离,那么T2就是它需要的时间,T2 = D2/S2。

O1到终点线有自己的距离,D1。其时间T1必须小于T2: T1 < D2/S2。由于S1 = D1/T1,因此必须有S1 < D1 / (D2/S2)。这就是你的计算。

你也可以用一种不同的方式来派生:

T1 < D2/S2

T1 = D1/S1

D1/S1 < D2/S2

其中有三个值: D1、D2和S2。求解S1,然后(因为速度和距离不能为负,所以不等式的方向不会改变):

1/S1 < (D2/S2) / D1

S1 < D1 / (D2/S2)

对于外观,你甚至可能想说T1 < T2 - .5 second,或者类似的东西,以避免“照片完成”。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24519057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档