【问题标题】:Entire screen not moving with the turtle整个屏幕不随乌龟移动
【发布时间】:2021-04-24 15:43:49
【问题描述】:

我正在使用 python 中的turtle 模块在 python 中制作游戏。 我希望屏幕与乌龟一起移动。有什么办法吗?谢谢

【问题讨论】:

  • Canvas.yview_moveto() 方法需要一个 0.0 → 1.0 范围内的参数,但您传递给它的是 ball 海龟的 y 坐标。考虑到您的屏幕尺寸,我认为它可能应该类似于 ts.yview_moveto(ball.ycor() / 10000)
  • 我尝试使用它,但它只是错误的。
  • 是的,我相信您的代码还有其他问题。
  • 这是我的问题!
  • 我知道……这就是我没有发布答案的原因。 Stack Overflow 不是免费的调试服务。我建议你创建一个可运行的minimal reproducible example

标签: python python-3.x turtle-graphics python-turtle


【解决方案1】:

问题是屏幕没有随着海龟一起移动...... 有人知道为什么吗?

我知道为什么。首先,@martineau 是正确的,像往常一样 +1,关于将错误的值范围传递给 yview_moveto()。但是这个难题还有另一部分:tkinter 和 turtle 不使用相同的坐标系!您需要校正坐标系差异,然后将值转换为百分比。

这是一个基于您的代码和所需行为的精简示例。它将球保持在窗口的中间,但您可以从数字和垂直滚动条中看出它正在下降。点击向上箭头以减慢速度 - 再次点击它以停止运动。再次点击它开始上升。或者使用向下箭头再次反转您的移动:

from turtle import Screen, Turtle

WIDTH, DEPTH = 300, 10_000
CURSOR_SIZE = 20

vy = -10

def rise():
    global vy
    vy += 5

def fall():
    global vy
    vy -= 5

def move():
    global vy

    if abs(ball.ycor()) < DEPTH/2:
        ball.forward(vy)

        canvas.yview_moveto((DEPTH/2 - ball.ycor() - WIDTH/2 + CURSOR_SIZE) / DEPTH)

        screen.update()
        screen.ontimer(move)

screen = Screen()
screen.setup(WIDTH, WIDTH)  # visible window
screen.screensize(WIDTH, DEPTH)  # area window peeps into
screen.tracer(False)

canvas = screen.getcanvas()

marker = Turtle()
marker.hideturtle()
marker.penup()
marker.setx(-WIDTH/4)  # so we can see we're moving

for y in range(-DEPTH//2, DEPTH//2, 100):
    marker.sety(y)
    marker.write(y, align='right')

ball = Turtle('circle')
ball.speed('fastest')
ball.setheading(90)
ball.penup()

screen.onkey(rise, 'Up')
screen.onkey(fall, 'Down')
screen.listen()

move()

screen.mainloop()

【讨论】:

  • 这一切都很好,但你需要解释更多,因为目前我不明白什么意思。
  • 你能解释更多,因为代码有效吗?
  • @JonathanDrukker,当然。你想解释哪几行?
  • 里面有画面移动的。
  • 还有计算
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2018-04-25
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多