Создал игру в понг после урока на Python, а затем хотел увеличить скорость мяча после забитого мяча? - PullRequest
0 голосов
/ 29 апреля 2019

Я хотел увеличивать скорость мяча после каждого забитого "гола", вы можете видеть под № 1 и № 2 точки, где я пытался и не смог этого сделать, speedx и speedy изначально были просто

Сначала я попытался увеличить, добавив к уже определенному циклу if в руководстве, # 1 - это то, что я добавил в конце

if ball.xcor() > 390:
    ball.goto(0, 0)
    ball.dx *= -1
    score_a += 1
    pen.clear()
    pen.write("Big Man : {} Pussio: {}".format(score_a, score_b), align="center", font=("Courier", 24, "normal"))
   #1 speedy += 0.1
   #1 speedx += 0.1
   #1 ball.dx = speedx
   #1 ball.dy = speedy

Затем я попытался создать свой собственный цикл for, однако проблема, с которой я столкнулся, заключается в том, что когда я увеличиваю скорость, мяч всегда будет двигаться в направлении (x, y) (+, +) после забитого мяча. , я думаю, потому что я добавляю +1 к ball.dx, он устанавливает шар в направлении (+, +), когда, как вы можете видеть из моего кода, после того, как забитый гол, я хочу изменить начальное направление, используя :

if ball.xcor() > 390:
    ball.goto(0, 0)
    ball.dx *= -1          - this
    score_a += 1

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

#2if ball.xcor() < -390 or ball.xcor() > 390:
#2 ball.dx = speedx
#2 ball.dy = speedy
#2 speedy *= -1
#2 speedx *= -1
#2 speedy += 0.1
#2 speedx += 0.1

Может быть, это невозможно сделать приращением скорости, поскольку черепаха слишком простая, я не уверен?

Ниже приведен полный код:

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Вы должны ввести время, чтобы сделать это проще, поскольку игра становится все более сложной. self.vx должно быть равно self.dx * unit_of_time. Затем вы можете увеличить self.vx с течением времени, чтобы ввести ускорение. Обратите внимание, что если ускорение постоянно меняется, вы также можете добавить self.ax для более простого управления ускорением.

0 голосов
/ 29 апреля 2019

Для ускорения мяча, возможно, самый простой способ - умножить dx и dy на factor > 1 (чтобы уменьшить его, используйте 0 < factor < 1):

В этом примереСкорость увеличивается на 10%.

acc_factor = 1.1
...
dx *= acc_factor
dy *= acc_factor

Если вы хотите фиксированный прирост, вы можете сделать так:

acc_factor = 1.1
...
dx_increment = abs(dx)/dx * acc_factor
dx += dx_increment
dy_increment = abs(dy)/dy * acc_factor
dy += dy_increment
...