Увеличение скорости движения объекта (Tkinter) - PullRequest
1 голос
/ 27 апреля 2019

Я все еще программирую свою игру Flappy Bird и сейчас начинаю часть «отладки» Для этого я исправил некоторые проблемы, такие как текст партитуры, который не появился, и даже настроил значок, а также название окна (мало внимания к деталям). За исключением того, что я должен исправить довольно неудачную деталь, скорость падения птицы слишком мала. Таким образом, существуют смещения, которые невозможно достичь игроку, особенно когда птица идет от пары очень высоких труб к паре очень низких труб. Впрочем, птичьи прыжки идеальны, и я, конечно, не хочу их менять!

Тогда мне было логично увеличить скорость падения птицы по мере ее падения, но ничего не поделаешь, я использовал различные методы для программирования этой увеличивающейся скорости, но они еще не завершены. Я пытался, например, сломать движение птицы, но это ничего не изменило. Я знаю, что у меня мало опыта, но я думал, что смогу, и я не могу найти похожие темы в сети

Для того, чтобы вы мне помогли, я сократил свою программу до строгого минимума, и в ней присутствуют только движения объектов игры, я знаю, что прошу у вас слишком большой помощи в течение этой недели, и мне очень жаль но обещал, что после этой корректировки ты никогда меня больше не увидишь!

Вот ZIP-файл с изображениями моей игры!

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()

1 Ответ

3 голосов
/ 27 апреля 2019

Чтобы увеличить скорость вниз, вы должны увеличить DY, в настоящее время она установлена ​​на 5;тем не менее, вы также используете DY в методе sauter, который хотите сохранить нетронутым ...

Я предлагаю добавить одну переменную DY_fall и установить для нее большее значение, чем текущее DY;таким образом, вам не нужно изменять sauter.

. Вам необходимо:

инициализировать DY_fall требуемым значением.
изменить движение птицы вдвижение, чтобы использовать DY_fall:
canvas.move(image_oiseau, 0, DY_fall)

[РЕДАКТИРОВАТЬ]:

Я добавил переменную GRAVITY, которая увеличивает скорость нисходящего падения, не мешаяsauter функция.

Это потребовало добавления еще одной переменной dy_fall, которая увеличивается на ускорение с GRAVITY, пока птица падает.Это значение сбрасывается до значения по умолчанию 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()
...