I am trying to make a golf game, but I am unable to get a friction simulation to work. the golf ball x and y moves by two variables speedX, speedY speedX and speedY decrease by a variable friction which increases. But this doesn't seem to work
heres the code
import pygame
pygame.init()
class Ball:
def __init__(self, win):
self.win = win
self.color = (255, 255, 255)
self.width = self.win.get_width()/2
self.height = self.win.get_height()/2
self.speedX = 70
self.speedY = 70
self.friction = 3
self.clicked = False
self.x = self.width / 2
self.y = self.height / 2
self.base = pygame.Rect(0, 0, 20, 20)
self.base.center = (self.x, self.y)
def render(self):
self.base.center = (self.x, self.y)
pygame.draw.ellipse(self.win, self.color, self.base)
def __str__(self):
return f"speedX: {self.speedX}, speedY: {self.speedY}, friction: {self.friction}"
def move(self):
if self.friction <= 0 or self.speedX <= 0 or self.speedY <= 0:
print("ASD")
self.clicked = False
self.speedX = 70
self.speedY = 70
self.friction = 5
if self.clicked:
print(self.__str__())
if self.base.left <= 0:
self.speedX *= -1
if self.base.right >= self.width:
self.speedX *= -1
if self.base.top <= 0:
self.speedY *= -1
if self.base.bottom >= self.height:
self.speedY *= -1
if self.speedX > 0:
self.speedX -= self.friction
if self.speedX < 0:
self.speedX += self.friction
if self.speedY > 0:
self.speedY -= self.friction
if self.speedY < 0:
self.speedY += self.friction
self.friction -= 0.1
self.x += self.speedX
self.y += self.speedY
class Game:
def __init__(self):
self.width = 600
self.height = 600
self.fps = 60
self.running = True
self.color = (0, 0, 0)
self.win = pygame.display.set_mode((self.width, self.height))
self.clock = pygame.time.Clock()
self.ball = Ball(self.win)
def run(self):
while self.running:
pygame.display.update()
self.win.fill(self.color)
self.clock.tick(self.fps)
self.ball.render()
self.ball.move()
pos = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
if event.type == pygame.MOUSEBUTTONDOWN and self.ball.base.collidepoint(pos):
self.ball.clicked = True
pygame.quit()
if __name__ == '__main__':
Game().run()
source https://stackoverflow.com/questions/73311635/how-to-make-a-pygame-friction-simulation
Comments
Post a Comment