【问题标题】:How does this algorithm make the character jump in pygame?这个算法是如何让pygame中的角色跳跃的?
【发布时间】:2021-01-24 17:38:43
【问题描述】:

我一直在看 Pygame 教程来学习这个模块,它来到了教练向你展示如何让你的角色跳跃的部分。但是,我发现他们写的代码无法理解,而且他们没有很好地解释。

谁能为我分解下面的代码,以便我准确了解发生了什么?有没有更简单的方法来编码一个字符的跳转?请记住,我已经将代码设置为按空格键激活此代码的位置。

Isjump = False
Jumpcount = 10

#code for spacebar activation here, turns Isjump to True# 

if Jumpcount >= -10:
    Neg = 1
    if Jumpcount < 0:
        Neg = -1
    y -= (Jumpcount ** 2) * 0.5 * Neg
    Jumpcount -= 1
else:
    Isjump = False
    Jumpcount = 10

【问题讨论】:

  • 为了使跳跃可信,您必须对加速/减速进行建模,否则它不会“看起来正确”。因此,虽然您可以通过线性过渡更简单地对其进行建模,但它看起来真的很奇怪。
  • @JaredSmith 这是几乎每个初学者都会使用的 YouTube 教程的代码。当然,这在物理上是不正确的。但这对于学习 Python 来说效果不错,也不错。
  • @Rabbid76 我并没有批评代码,我试图解释明显的复杂性是(以有限的方式)建模加速和减速。你当然解释得更好了。
  • @JaredSmith 我很抱歉。我不是故意批评你的。只是想意识到代码需要从一个想要学习 Python 的初学者的角度来阅读。

标签: python pygame


【解决方案1】:

一开始Jumpcount设置为10。

Jumpcount = 10

跳转一直运行到Jumpcount 小于或等于-10。因此,一次跳转恰好需要 21 个周期:

if Jumpcount >= -10:

NegJumpcount 的“符号”。如果Jumpcount 大于或等于 0,则为 1,否则为 -1:

Neg = 1
if Jumpcount < 0:
    Neg = -1

在每一帧中,玩家的y坐标被二次函数(Jumpcount ** 2) * 0.5改变。

y -= (Jumpcount ** 2) * 0.5 * Neg

由于该项乘以Neg,所以Jumpcount大于0为正,Jumpcount为0则为0,否则小于0。
Jumpcount 的数量较大时,y 坐标的变化大于数量较小时。查看 21 个周期中 (Jumpcount ** 2) * 0.5 * Neg 的值:

50.0, 40.5, 32.0, 24.5, 18.0, 12.5, 8.0, 4.5, 2.0, 0.5, 0.0, 
-0.5, -2.0, -4.5, -8.0, -12.5, -18.0, -24.5, -32.0, -40.5, -50.0

一开始数值是正数,玩家会跳跃。最后值是负数,玩家摔倒了。
这些值的总和为 0。因此,y-坐标在末尾与开头具有相同的值。

另见How to make a character jump in Pygame?

【讨论】:

  • 非常感谢!这更有意义!
猜你喜欢
  • 1970-01-01
  • 2023-01-28
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多