增加物体移动的速度(Tkinter)
Increase the speed of an object as it moves (Tkinter)
我仍在编写我的 Flappy Bird 游戏,我现在开始 "debugging" 部分
为此,我修复了一些问题,比如乐谱文本没有出现,我什至自定义了图标以及 window 的名称(不太注意细节)。
除了我必须纠正一个比较不幸的细节外,鸟坠落的速度太慢了。
因此,玩家无法实现位移,尤其是当小鸟从一对非常高的管道移动到一对非常低的管道时。
不过小鸟的跳跃很完美,我当然不想改!
然后我顺理成章地增加了鸟的下落速度,但无济于事,我用了各种方法来编程这种增加的速度,但他们还没有完成。例如,我试图分解鸟的运动,但它没有改变任何东西。
我知道我没有什么经验,但我认为可以,但我在网上找不到类似的话题
为了让你帮助我,我已经将我的程序减少到严格的最低限度,只有游戏对象的移动,我知道这周我向你求助太多了,我对不起,我答应过,这次调整后你再也见不到我了!
Here is the .zip file of the images of my game!
from tkinter import *
import random
from random import randint
def sauter(event):
canvas.move(image_oiseau, 0, -10*DY)
def deplacement():
global mouvement
global tuyx,tuyx2,h,H,oisx,oisy,solx,sol2x,score,pause
x0, y0, x1, y1 = canvas.bbox(image_oiseau)
canvas.move(image_oiseau, 0, DY)
canvas.coords(image_sol,solx,512)
if solx >= -144:
solx=solx-5
else:
solx=144
canvas.coords(image_sol2,sol2x,512)
if sol2x >= 144:
sol2x=sol2x-5
else:
sol2x=432
canvas.coords(image_tuyau_haut,tuyx,h)
canvas.coords(image_tuyau_bas,tuyx,h-379.8)
if tuyx>=-28:
tuyx=tuyx-5
else:
tuyx=316
h=randint(272,523)
canvas.coords(image_tuyau_haut2,tuyx2,H)
canvas.coords(image_tuyau_bas2,tuyx2,H-379.8)
if tuyx2>=-28:
tuyx2=tuyx2-5
else:
tuyx2=316
H=randint(272,523)
canvas.after(40,deplacement)
LARGEUR = 286
HAUTEUR = 510
DY = 5
tuyx=316
tuyx2=488
h=randint(272,523)
H=randint(272,523)
oisx=67
oisy=244
solx=144
sol2x=432
fenetre = Tk()
canvas = Canvas(fenetre, width=LARGEUR, height=HAUTEUR)
fond = PhotoImage(file="background-day.png")
fond2 = PhotoImage(file="background-night.png")
fond=[fond,fond2]
F= random.choice(fond)
canvas.create_image(144,256, anchor=CENTER,image=F)
tuyau_haut = PhotoImage(file="tuyau_vers_le_haut.png")
image_tuyau_haut = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_haut)
image_tuyau_haut2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_haut)
tuyau_bas = PhotoImage(file="tuyau_vers_le_bas.png")
image_tuyau_bas = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_bas)
image_tuyau_bas2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_bas)
sol = PhotoImage(file="sol-day.png")
image_sol = canvas.create_image(144,512, anchor=S,image=sol)
image_sol2 = canvas.create_image(432,512, anchor=S,image=sol)
oiseau = PhotoImage(file="yellowbird-midflap.png")
oiseau2 = PhotoImage(file="bluebird-midflap.png")
oiseau3 = PhotoImage(file="redbird-midflap.png")
oiseau=[oiseau,oiseau2,oiseau3]
O=random.choice(oiseau)
image_oiseau=canvas.create_image(oisx,oisy, anchor=W,image=O)
canvas.pack()
canvas.focus_set()
deplacement()
canvas.bind("<space>",sauter)
fenetre.mainloop()
要增加下降速度,必须增加DY
,目前固定为5
;但是,您还在 sauter 方法中使用了 DY
,您希望保持原样...
我建议添加一个变量DY_fall
,并将其设置为比当前DY
更大的值;这样,你就不需要修改 sauter
.
您将需要:
用你想要的值初始化DY_fall
。
改变运动中小鸟的运动,使用DY_fall
:
canvas.move(image_oiseau, 0, DY_fall)
[编辑]:
我添加了一个变量 GRAVITY
来增加向下坠落的速度,而不干扰 sauter
函数。
这需要添加另一个变量,dy_fall
,只要鸟掉落,它就会随着 GRAVITY
的加速度而增加。每次鸟 'jumps' 时,这都会重置为默认值 DY_fall
。
您需要调整这些值才能获得流畅的游戏,但我认为它应该会如您所愿。
from tkinter import *
import random
from random import randint
def sauter(event):
global dy_fall
dy_fall = DY_fall
canvas.move(image_oiseau, 0, -10*DY)
def deplacement():
global mouvement, dy_fall
global tuyx,tuyx2,h,H,oisx,oisy,solx,sol2x,score,pause
x0, y0, x1, y1 = canvas.bbox(image_oiseau)
canvas.move(image_oiseau, 0, dy_fall)
dy_fall *= GRAVITY
canvas.coords(image_sol,solx,512)
if solx >= -144:
solx=solx-5
else:
solx=144
canvas.coords(image_sol2,sol2x,512)
if sol2x >= 144:
sol2x=sol2x-5
else:
sol2x=432
canvas.coords(image_tuyau_haut,tuyx,h)
canvas.coords(image_tuyau_bas,tuyx,h-379.8)
if tuyx>=-28:
tuyx=tuyx-5
else:
tuyx=316
h=randint(272,523)
canvas.coords(image_tuyau_haut2,tuyx2,H)
canvas.coords(image_tuyau_bas2,tuyx2,H-379.8)
if tuyx2>=-28:
tuyx2=tuyx2-5
else:
tuyx2=316
H=randint(272,523)
canvas.after(100, deplacement)
LARGEUR = 286
HAUTEUR = 510
DY = 5
dy_fall = DY_fall = 5
GRAVITY = 1.5
tuyx=316
tuyx2=488
h=randint(272,523)
H=randint(272,523)
oisx=67
oisy=244
solx=144
sol2x=432
fenetre = Tk()
canvas = Canvas(fenetre, width=LARGEUR, height=HAUTEUR)
fond = PhotoImage(file="background-day.png")
fond2 = PhotoImage(file="background-night.png")
fond=[fond,fond2]
F= random.choice(fond)
canvas.create_image(144,256, anchor=CENTER,image=F)
tuyau_haut = PhotoImage(file="tuyau_vers_le_haut.png")
image_tuyau_haut = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_haut)
image_tuyau_haut2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_haut)
tuyau_bas = PhotoImage(file="tuyau_vers_le_bas.png")
image_tuyau_bas = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_bas)
image_tuyau_bas2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_bas)
sol = PhotoImage(file="sol-day.png")
image_sol = canvas.create_image(144,512, anchor=S,image=sol)
image_sol2 = canvas.create_image(432,512, anchor=S,image=sol)
oiseau = PhotoImage(file="yellowbird-midflap.png")
oiseau2 = PhotoImage(file="bluebird-midflap.png")
oiseau3 = PhotoImage(file="redbird-midflap.png")
oiseau=[oiseau,oiseau2,oiseau3]
O=random.choice(oiseau)
image_oiseau=canvas.create_image(oisx,oisy, anchor=W,image=O)
canvas.pack()
canvas.focus_set()
deplacement()
canvas.bind("<space>",sauter)
fenetre.mainloop()
我仍在编写我的 Flappy Bird 游戏,我现在开始 "debugging" 部分 为此,我修复了一些问题,比如乐谱文本没有出现,我什至自定义了图标以及 window 的名称(不太注意细节)。 除了我必须纠正一个比较不幸的细节外,鸟坠落的速度太慢了。 因此,玩家无法实现位移,尤其是当小鸟从一对非常高的管道移动到一对非常低的管道时。 不过小鸟的跳跃很完美,我当然不想改!
然后我顺理成章地增加了鸟的下落速度,但无济于事,我用了各种方法来编程这种增加的速度,但他们还没有完成。例如,我试图分解鸟的运动,但它没有改变任何东西。 我知道我没有什么经验,但我认为可以,但我在网上找不到类似的话题
为了让你帮助我,我已经将我的程序减少到严格的最低限度,只有游戏对象的移动,我知道这周我向你求助太多了,我对不起,我答应过,这次调整后你再也见不到我了!
Here is the .zip file of the images of my game!
from tkinter import *
import random
from random import randint
def sauter(event):
canvas.move(image_oiseau, 0, -10*DY)
def deplacement():
global mouvement
global tuyx,tuyx2,h,H,oisx,oisy,solx,sol2x,score,pause
x0, y0, x1, y1 = canvas.bbox(image_oiseau)
canvas.move(image_oiseau, 0, DY)
canvas.coords(image_sol,solx,512)
if solx >= -144:
solx=solx-5
else:
solx=144
canvas.coords(image_sol2,sol2x,512)
if sol2x >= 144:
sol2x=sol2x-5
else:
sol2x=432
canvas.coords(image_tuyau_haut,tuyx,h)
canvas.coords(image_tuyau_bas,tuyx,h-379.8)
if tuyx>=-28:
tuyx=tuyx-5
else:
tuyx=316
h=randint(272,523)
canvas.coords(image_tuyau_haut2,tuyx2,H)
canvas.coords(image_tuyau_bas2,tuyx2,H-379.8)
if tuyx2>=-28:
tuyx2=tuyx2-5
else:
tuyx2=316
H=randint(272,523)
canvas.after(40,deplacement)
LARGEUR = 286
HAUTEUR = 510
DY = 5
tuyx=316
tuyx2=488
h=randint(272,523)
H=randint(272,523)
oisx=67
oisy=244
solx=144
sol2x=432
fenetre = Tk()
canvas = Canvas(fenetre, width=LARGEUR, height=HAUTEUR)
fond = PhotoImage(file="background-day.png")
fond2 = PhotoImage(file="background-night.png")
fond=[fond,fond2]
F= random.choice(fond)
canvas.create_image(144,256, anchor=CENTER,image=F)
tuyau_haut = PhotoImage(file="tuyau_vers_le_haut.png")
image_tuyau_haut = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_haut)
image_tuyau_haut2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_haut)
tuyau_bas = PhotoImage(file="tuyau_vers_le_bas.png")
image_tuyau_bas = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_bas)
image_tuyau_bas2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_bas)
sol = PhotoImage(file="sol-day.png")
image_sol = canvas.create_image(144,512, anchor=S,image=sol)
image_sol2 = canvas.create_image(432,512, anchor=S,image=sol)
oiseau = PhotoImage(file="yellowbird-midflap.png")
oiseau2 = PhotoImage(file="bluebird-midflap.png")
oiseau3 = PhotoImage(file="redbird-midflap.png")
oiseau=[oiseau,oiseau2,oiseau3]
O=random.choice(oiseau)
image_oiseau=canvas.create_image(oisx,oisy, anchor=W,image=O)
canvas.pack()
canvas.focus_set()
deplacement()
canvas.bind("<space>",sauter)
fenetre.mainloop()
要增加下降速度,必须增加DY
,目前固定为5
;但是,您还在 sauter 方法中使用了 DY
,您希望保持原样...
我建议添加一个变量DY_fall
,并将其设置为比当前DY
更大的值;这样,你就不需要修改 sauter
.
您将需要:
用你想要的值初始化DY_fall
。
改变运动中小鸟的运动,使用DY_fall
:
canvas.move(image_oiseau, 0, DY_fall)
[编辑]:
我添加了一个变量 GRAVITY
来增加向下坠落的速度,而不干扰 sauter
函数。
这需要添加另一个变量,dy_fall
,只要鸟掉落,它就会随着 GRAVITY
的加速度而增加。每次鸟 'jumps' 时,这都会重置为默认值 DY_fall
。
您需要调整这些值才能获得流畅的游戏,但我认为它应该会如您所愿。
from tkinter import *
import random
from random import randint
def sauter(event):
global dy_fall
dy_fall = DY_fall
canvas.move(image_oiseau, 0, -10*DY)
def deplacement():
global mouvement, dy_fall
global tuyx,tuyx2,h,H,oisx,oisy,solx,sol2x,score,pause
x0, y0, x1, y1 = canvas.bbox(image_oiseau)
canvas.move(image_oiseau, 0, dy_fall)
dy_fall *= GRAVITY
canvas.coords(image_sol,solx,512)
if solx >= -144:
solx=solx-5
else:
solx=144
canvas.coords(image_sol2,sol2x,512)
if sol2x >= 144:
sol2x=sol2x-5
else:
sol2x=432
canvas.coords(image_tuyau_haut,tuyx,h)
canvas.coords(image_tuyau_bas,tuyx,h-379.8)
if tuyx>=-28:
tuyx=tuyx-5
else:
tuyx=316
h=randint(272,523)
canvas.coords(image_tuyau_haut2,tuyx2,H)
canvas.coords(image_tuyau_bas2,tuyx2,H-379.8)
if tuyx2>=-28:
tuyx2=tuyx2-5
else:
tuyx2=316
H=randint(272,523)
canvas.after(100, deplacement)
LARGEUR = 286
HAUTEUR = 510
DY = 5
dy_fall = DY_fall = 5
GRAVITY = 1.5
tuyx=316
tuyx2=488
h=randint(272,523)
H=randint(272,523)
oisx=67
oisy=244
solx=144
sol2x=432
fenetre = Tk()
canvas = Canvas(fenetre, width=LARGEUR, height=HAUTEUR)
fond = PhotoImage(file="background-day.png")
fond2 = PhotoImage(file="background-night.png")
fond=[fond,fond2]
F= random.choice(fond)
canvas.create_image(144,256, anchor=CENTER,image=F)
tuyau_haut = PhotoImage(file="tuyau_vers_le_haut.png")
image_tuyau_haut = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_haut)
image_tuyau_haut2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_haut)
tuyau_bas = PhotoImage(file="tuyau_vers_le_bas.png")
image_tuyau_bas = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_bas)
image_tuyau_bas2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_bas)
sol = PhotoImage(file="sol-day.png")
image_sol = canvas.create_image(144,512, anchor=S,image=sol)
image_sol2 = canvas.create_image(432,512, anchor=S,image=sol)
oiseau = PhotoImage(file="yellowbird-midflap.png")
oiseau2 = PhotoImage(file="bluebird-midflap.png")
oiseau3 = PhotoImage(file="redbird-midflap.png")
oiseau=[oiseau,oiseau2,oiseau3]
O=random.choice(oiseau)
image_oiseau=canvas.create_image(oisx,oisy, anchor=W,image=O)
canvas.pack()
canvas.focus_set()
deplacement()
canvas.bind("<space>",sauter)
fenetre.mainloop()