[英]make bouncing turtle with python
我是 python 的初學者,我寫了這段代碼來制作帶有 python 龜的彈跳球它可以工作,但有一些錯誤,比如球消失
import turtle
turtle.shape("circle")
xdir = 1
x = 1
y = 1
ydir = 1
while True:
x = x + 3 * xdir
y = y + 3 * ydir
turtle.goto(x , y)
if x >= turtle.window_width():
xdir = -1
if x <= -turtle.window_width():
xdir = 1
if y >= turtle.window_height():
ydir = -1
if y <= -turtle.window_height():
ydir = 1
turtle.penup()
turtle.mainloop()
盡管您解決問題的方法有效(我的返工):
import turtle
turtle.shape("circle")
turtle.penup()
x, y = 0, 0
xdir, ydir = 3, 3
xlimit, ylimit = turtle.window_width() / 2, turtle.window_height() / 2
while True:
x = x + xdir
y = y + ydir
if not -xlimit < x < xlimit:
xdir = -xdir
if not -ylimit < y < ylimit:
ydir = -ydir
turtle.goto(x, y)
turtle.mainloop()
從長遠來看,這是錯誤的方法。 在這種情況下,由於無限循環while True
, mainloop()
方法永遠不會被調用,因此沒有其他海龜事件處理程序處於活動狀態。 例如,如果我們想使用exitonclick()
而不是mainloop()
,它就行不通。 而是考慮:
import turtle
turtle.shape("circle")
turtle.penup()
x, y = 0, 0
xdir, ydir = 3, 3
xlimit, ylimit = turtle.window_width() / 2, turtle.window_height() / 2
def move():
global x, y, xdir, ydir
x = x + xdir
y = y + ydir
if not -xlimit < x < xlimit:
xdir = -xdir
if not -ylimit < y < ylimit:
ydir = -ydir
turtle.goto(x, y)
turtle.ontimer(move, 5)
turtle.ontimer(move, 5)
turtle.exitonclick()
在這里,我們已將控制權轉回主循環,並且運動在事件計時器上。 可以執行其他海龜事件,以便exitonclick()
起作用。 在您將自己和您的烏龜編入一個角落之前,請考慮一下前進的方向。
您需要window_width()/2
和window_height()/2
才能保持在窗口內。
IE。
if x >= turtle.window_width()/2:
xdir = -1
if x <= -turtle.window_width()/2:
xdir = 1
if y >= turtle.window_height()/2:
ydir = -1
if y <= -turtle.window_height()/2:
ydir = 1
您應該將turtle.penup() 放在while 循環之前,以使您的代碼更好更快。 這幾乎是一個錯誤!
你可以反彈你的牆,如果你想從上牆反彈,屏幕寬度為800,長度為600
from turtle import turtle
turtle=Turtle()
def move(self)://This will move your ball in diagonal direction
x_dir=self.xcor()+self.x
y_dir=self.ycor()+self.y
self.goto(x_dir,y_dir)
def bounce(self)://This will bounce back
self.y *=-1
turtle.bounce()
這段代碼正在運行,因為我是通過繼承來完成的。 您需要創建一個類,然后繼承所有屬性,然后在那里創建兩個方法,然后在主類中調用這些函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.