Saturday, 20 February 2021

Pygame Scroll Bar To Play Volume Low OR High.?

so I have a scroll bar in my game what Im trying to do is make it so if my mouse is over the bar1 button and we are on the moving_spot of the bar1 button then we can move it up and down on its y axis

how can I move the bar up and down and if its colliding with with any of the volume buttons I can change the volume of my background music either 0.1 or 0.2 or 0.3 so it controls my game volumepygame.mixer.music.set_volume(0.3) enter image description here

my problem is im not sure how I could get this started I have everything in place but not sure where to start ***how can I move the bar with my mouse on the moving_spot on its y values only and if the bar1 is over and of the volume1 2 or 3 4 buttons then it should play the volume at defferent level im not sure how to approach this problem any help is appreciated I just need a way to adjust my music of my game if the player moves the bar up or down

while run:
    # Making game run with fps
    clock.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False


        if event.type == pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()
        
              # this is our bar1 the gray part that we will be able to move
            if bar1.isOver(pos):
                bar1.y = pos
                print("WORKING{")
                

here are my buttons and positions places the move_spot is where the bar1 can only move up and down the bar1 is the bar that the player can control to control the volume and also the volume 1 2 3 4 are where the defferent volume of our background music will be set

move_spot = button((colors),720,125,25,260, '')

bar1 = button((colors),715,125,30,60, '')
volume1 = button((colors2),715,145,30,60, '')
volume2 = button((colors2),715,210,30,60, '')
volume3 = button((colors2),715,280,30,60, '')
volume4 = button((colors2),715,350,30,60, '')


buttons = [bar1,move_spot,volume1,volume2,volume3,volume4]

this is my buttons class

# our buttons
class button():
    def __init__(self, color, x,y,width,height, text=''):
        self.color = color
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.text = text
        self.over = False

    def draw(self,window,outline=None):
                #Call this method to draw the button on the screen
        if outline:
            pygame.draw.rect(window, outline, (self.x-2,self.y-2,self.width+4,self.height+4),0)
                    
        pygame.draw.rect(window, self.color, (self.x,self.y,self.width,self.height),0)
                
        if self.text != '':
            font = pygame.font.SysFont('image/abya.ttf', 60)
            text = font.render(self.text, 1, (255,255,255))
            window.blit(text, (self.x + (self.width/2 - text.get_width()/2), self.y + (self.height/2 - text.get_height()/2)))

    def isOver(self, pos):
                #Pos is the mouse position or a tuple of (x,y) coordinates
        if pos[0] > self.x and pos[0] < self.x + self.width:
            if pos[1] > self.y and pos[1] < self.y + self.height:
                return True
                    
        return False

    def playSoundIfMouseIsOver(self, pos, sound):
        if self.isOver(pos):            
            if not self.over:
                click.play()
                self.over = True
        else:
            self.over = False



here a minimal code you can run and test with this bar imageenter image description here

heres the background music music

import pygame
pygame.init()

window = pygame.display.set_mode((800,800))



# our buttons
class button():
    def __init__(self, color, x,y,width,height, text=''):
        self.color = color
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.text = text
        self.over = False

    def draw(self,window,outline=None):
                #Call this method to draw the button on the screen
        if outline:
            pygame.draw.rect(window, outline, (self.x-2,self.y-2,self.width+4,self.height+4),0)
                    
        pygame.draw.rect(window, self.color, (self.x,self.y,self.width,self.height),0)
                
        if self.text != '':
            font = pygame.font.SysFont('freesansbold.ttf', 60)
            text = font.render(self.text, 1, (255,255,255))
            window.blit(text, (self.x + (self.width/2 - text.get_width()/2), self.y + (self.height/2 - text.get_height()/2)))

    def isOver(self, pos):
                #Pos is the mouse position or a tuple of (x,y) coordinates
        if pos[0] > self.x and pos[0] < self.x + self.width:
            if pos[1] > self.y and pos[1] < self.y + self.height:
                return True
                    
        return False

    def playSoundIfMouseIsOver(self, pos, sound):
        if self.isOver(pos):            
            if not self.over:
                click.play()
                self.over = True
        else:
            self.over = False


colors = 0,23,56
colors2 = 0,123,56

bar11 = pygame.image.load("bar.png").convert_alpha()


move_spot = button((colors),720,125,25,260, '')

bar1 = button((colors),715,125,30,60, '')
volume1 = button((colors2),715,145,30,60, '')
volume2 = button((colors2),715,210,30,60, '')
volume3 = button((colors2),715,280,30,60, '')
volume4 = button((colors2),715,350,30,60, '')


buttons = [bar1,move_spot,volume1,volume2,volume3,volume4]



# fos
fps = 60
clock = pygame.time.Clock()


# redraw
def redraw():
    window.fill((40,100,200))
    for button in buttons:
        button.draw(window)
    window.blit(bar11,(bar1.x,bar1.y))

# main loop
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False



    redraw()

    pygame.display.update()

pygame.quit()



from Pygame Scroll Bar To Play Volume Low OR High.?

No comments:

Post a Comment