我试图让我的乌龟物体在与边界接触时转180度,但这不会发生。而不是我想使用if if语句说明x和y cor是高于还是低于某个数量,它们将导致对象向后移动。这是下面的代码。
from turtle import *
import turtle
title("Pokemon: Fire Red")
t = turtle.Turtle()
screen = t.getscreen()
t.penup()
t.left(90)
border = turtle.Turtle()
border.up()
border.setposition(-240, 160)
border.down()
border.pensize(3)
for side in range(2):
border.forward(480)
border.right(90)
border.forward(320)
border.right(90)
tx, ty = t.pos()
if tx < -240 or tx > 240 or ty < -160 or ty > 160:
t.hide()
Screen()
showturtle()
def k1():
t.forward(50)
def k2():
t.left(90)
t.forward(50)
t.right(90)
def k3():
t.right(90)
t.forward(50)
t.left(90)
def k4():
t.forward(-50)
onkey(k1, "Up")
onkey(k2, "Left")
onkey(k3, "Right")
onkey(k4, "Down")
listen()
mainloop()
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:0)
您是否在hide()
下创建了一个功能class turtle
?我找了它,但turtle module
没有提供这样的功能。我会在假设您的代码
tx, ty = t.pos()
if tx < -240 or tx > 240 or ty < -160 or ty > 160:
t.hide()
旨在检查碰撞。在此代码中,您只检查与边界的碰撞一次。每次龟移动时都应该调用你期望的性能。也就是说,在每个k#
函数下。所以改变就是这样:
def collision_check (t):
tx,ty = t.pos()
if tx < -240 or tx > 240 or ty < -160 or ty > 160:
t.right(180)
t.forward(50)
t.right(180)
def k1():
t.forward(50)
collision_check(t)
def k2():
t.left(90)
t.forward(50)
collision_check(t)
t.right(90)
def k4():
t.right(180)
t.forward(50)
collision.check(t)
t.right(180)
与k3
相同。 k4已经调整,因为这个collision_check
函数适用于乌龟的方向。
答案 1 :(得分:0)
你已经为你的乌龟定义了一个独特的运动序列,它始终偏向 向上 方向,这样我就不相信通用的碰撞检测逻辑会起作用。我还相信,绝对 标题 设置对您来说比相对left()
和from turtle import Turtle, Screen
WIDTH, HEIGHT = 480, 320
def move_turtle(distance, heading):
ahead = min(50, distance)
if ahead:
if heading != yertle.heading():
yertle.setheading(heading)
yertle.forward(ahead)
behind = 50 - ahead
if behind:
heading -= 180
if heading != yertle.heading():
yertle.setheading(heading)
yertle.forward(behind)
if yertle.heading() != 0:
yertle.setheading(0)
def k1():
screen.onkey(None, "Up")
move_turtle(HEIGHT/2 - yertle.ycor(), 0)
screen.onkey(k1, "Up")
def k2():
screen.onkey(None, "Left")
move_turtle(yertle.xcor() + WIDTH/2, 270)
screen.onkey(k2, "Left")
def k3():
screen.onkey(None, "Right")
move_turtle(WIDTH/2 - yertle.xcor(), 90)
screen.onkey(k3, "Right")
def k4():
screen.onkey(None, "Down")
move_turtle(HEIGHT/2 + yertle.ycor(), 180)
screen.onkey(k4, "Down")
screen = Screen()
screen.mode('logo') # since 'up' is crucial, make it 0 degrees
yertle = Turtle()
yertle.penup()
border = Turtle(visible=False)
border.speed("fastest") # because I have no patience
border.pensize(3)
border.penup()
border.setposition(-WIDTH/2, -HEIGHT/2)
border.pendown()
for _ in range(2):
border.forward(HEIGHT)
border.right(90)
border.forward(WIDTH)
border.right(90)
screen.onkey(k1, "Up")
screen.onkey(k2, "Left")
screen.onkey(k3, "Right")
screen.onkey(k4, "Down")
screen.listen()
screen.mainloop()
转弯效果更好。因此,我使用标题和 徽标 模式重新设计了代码,因为它将 向上 设置为0度:
baseUrl