我试图实现从一个空间量到另一个空间量的转换,这类似于加速和减速,但我失败了,我从中得到的唯一一件事就是这堆乱七八糟的东西,下面是一个屏幕截图,显示了这一点:
你可以在这里看到一个非常黑的圆圈,实际上是100或200个圆圈叠加在一起
我用这段代码得出了这个结果:
def Place_circles(curve, circle_space, cs, draw=True, screen=None):
curve_acceleration = []
if type(curve) == tuple:
curve_acceleration = curve[1][0]
curve_intensity = curve[1][1]
curve = curve[0]
#print(curve_intensity)
#print(curve_acceleration)
Circle_list = []
idx = [0,0]
for c in reversed(range(0,len(curve))):
for p in reversed(range(0,len(curve[c]))):
user_dist = circle_space[curve_intensity[c]] + curve_acceleration[c] * p
dist = math.sqrt(math.pow(curve[c][p][0] - curve[idx[0]][idx[1]][0],2)+math.pow(curve [c][p][1] - curve[idx[0]][idx[1]][1],2))
if dist > user_dist:
idx = [c,p]
Circle_list.append(circles.circles(round(curve[c][p][0]), round(curve[c][p][1]), cs, draw, screen))
该位置根据当前曲线的强度(0和2之间的数字,随机)旋转,该强度等于空间量(这里假设20和30之间,20是索引0,30是索引2,2之间的数字是索引1)
这创建了你在上面看到的堆栈,这不是我想要的,我还得出结论,我不能使用加速度,因为在两个点之间移动的时间取决于我需要单击的圆圈数量,知道每个点之间有多个圆圈,但无法确定有多少导致我无法使用经典加速度公式
所以我在这里已经没有选择了,也没有关于如何从一个空间量过渡到另一个空间量的想法了。 有什么想法吗
PS:我放弃了上面的想法,切换回了我的主分支,但是我在这里创建的分支中仍然可以使用这个分支的代码https://github.com/Mrcubix/Osu-StreamGenerator/tree/acceleration。 所以现在我回到了我的正常代码中,它没有加速或减速
TL:DR我不能使用加速度,因为我不知道将在两点之间放置的圆圈数量,这会使旅行时间发生变化(例如,我需要以每0.333s一个圆圈180 bpm的速度单击圆圈),所以我正在寻找另一种方法来生成逐渐变化的空间
首先,我使用函数生成[0;2]中每条曲线的强度 然后我放弃了加速度公式,因为它不可用。 现在我使用一个基本算法来确定我能在曲线上放置的最大圈数
现在,我的脚本的工作方式如下: 我首先生成一个流(需要在高bpm时单击多个圆圈) 通过这种方式,我可以获得多段线的每条曲线(或线段)的长度。 我使用以下函数为每条曲线生成一个强度:
通过这个,我得到了2个列表,一个具有我指定的间距,第二个是随机生成的强度列表。 从这里,我调用另一个函数,考虑多段线、先前指定的间距和生成的强度:
通过这个,我得到了一个列表,其中每个圆圈之间的空间将被放置, 从那里,我可以再次调用Place_circles(),并获得新的流:
结果是一个在圆圈之间有不同间距的流(如此加速或减速),唯一需要解决的问题是pygame在调用Place_circles()后没有用新的圆圈集更新屏幕,但这是一个问题,我将尝试自己解决,或者在另一篇文章中提出
此功能的最终代码可以在my repo上找到:https://github.com/Mrcubix/Osu-StreamGenerator/tree/Acceleration_v02
相关问题 更多 >
编程相关推荐