【问题标题】:Is there a way to make the turtles movement smoother有没有办法让海龟运动更顺畅
【发布时间】:2020-02-08 19:53:56
【问题描述】:

我正在制作一个游戏,你可以控制一艘太空船,目前,它的运动很难观察,因为它很笨拙。有没有命令可以让动作更流畅自然?我正在使用 在 repl.it 上带有海龟的 python,并且 onrelease 似乎不起作用。任何答案表示赞赏!

import turtle
you = turtle.Turtle()
keycoms = turtle.Screen()

you.penup()

def w():
  you.fd(5)
def s():
  you.bk(3)
def a():
  you.lt(5)
def d():
  you.rt(5)

keycoms.onkey(w,"w")
keycoms.onkey(s,"s")
keycoms.onkey(a,"a")
keycoms.onkey(d,"d")
keycoms.listen()

【问题讨论】:

  • 我尝试了一些平滑标准 Python 海龟运动的方法,但它们对 Repl.it 没有任何影响,看起来相当平滑。但是,看起来您依赖的是 key repeat,这是您的计算机操作系统的一个功能,而不是海龟,所以 janky 运动可能源于此。 (看看你是否可以调整它。)我还推荐更大的步骤,例如fd(10) 而不是 fd(5)。

标签: python optimization turtle-graphics


【解决方案1】:

解决这个问题的一种方法是进行更多、更小的动作,每次动作之间有一点时间延迟。这给出了流动运动而不是跳跃的错觉 - 如下所示(可能有更好的实际编码方法,但这给了你一个想法):

def w():
  for _ in range(5):
    you.fd(1)
    sleep(0.1)

【讨论】:

  • 感谢您的想法,但我一直在寻找一种比您的代码允许的速度更快的方法,并且虽然您的代码更流畅,但它非常慢。不过还是谢谢!
  • 睡眠间隔只是一个例子——也许试试 0.01 或 0.005?
【解决方案2】:

只需将您的 onkey(...) 更改为 onkeypress(...):

import turtle
you = turtle.Turtle()
keycoms = turtle.Screen()

you.penup()

def w():
  you.fd(5)
def s():
  you.bk(3)
def a():
  you.lt(5)
def d():
  you.rt(5)

keycoms.onkeypress(w,"w")
keycoms.onkeypress(s,"s")
keycoms.onkeypress(a,"a")
keycoms.onkeypress(d,"d")
keycoms.listen()

keycoms.mainloop()

Scrren.onkey() 方法将允许用户按下特定键,只要用户愿意,对指定操作的功能命令将只执行一次。

另一方面,Screen.onkeypress() 将执行命令的次数与用户按住键的次数相同。

【讨论】:

  • onkey() 是 onkeyrelease(),而onkeypress() 不需要释放。
  • @cdlane 我不明白,我什至尝试了你概述的测试。如果我想用onkey() 走得更远,我需要不断地按下一个键,而onkeypress() 将允许我简单地按住一个键。你的电脑不是这样吗?
  • 您可能会在系统上看到不同的行为。了解按下与释放的第一步是在操作系统(例如键盘控制面板)上关闭自动键重复。不幸的是,在我的 Mac 上,无论是否关闭它,某些键都会重复(与带有重音或重音的键有关)其他替代形式,'a','n'等)一旦你这样做了,我的下一条评论有一个重新格式化和运行的程序。
  • import turtle as t def p(): print("pressed") def r(): print("released") t.onkeypress(p, '') t.onkeyrelease(r, ' ') t.listen() t.mainloop()
  • import turtle as t def p(): t.forward(5) def r(): t.forward(5) t.onkeypress(p, 'p') t.onkeyrelease(r, 'r') t.listen() t.mainloop()
猜你喜欢
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 2012-07-10
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多