C-Gabibbo
C-Gabibbo

Reputation: 11

moving a rectangle when cursor is in an area

this script is supposed to move 2 rectangles whenever the cursor gets in one of them, i see them flashing sometimes, but they're not moving, they move right 30 and then they go back to 0

import pygame

pygame.init()
screen= pygame.display.set_mode((700,500))
while True:
    ex = pygame.Rect(30,30,60,60)
    exz= pygame.Rect(0,30,30,60)

    for event in pygame.event.get():
        if event.type == 256:
          pygame.quit()
        if event.type == 1024:
           cursor_pos=pygame.mouse.get_pos()
           print(cursor_pos[1].__str__()+"=y")
           print(cursor_pos[0].__str__()+"=x")
           print(exz.x.__str__()+"exz.x"+", "+exz.y.__str__()+"exz.y")
        if(cursor_pos[0]+cursor_pos[1]) < ((exz.x+30)+exz.y*3) and (cursor_pos[0]+cursor_pos[1])>30 and cursor_pos[1]<=90 and cursor_pos[1]>=30:
            exz.right+=30
            ex.right+=30
            print("exz:"+exz.x.__str__()+", "+exz.y.__str__())
            print("exs:"+ex.x.__str__()+", "+ex.y.__str__())
            pygame.display.set_caption("Cursor is in area")
        else:
            pygame.display.set_caption("Cursor is not in area")
        

pygame.draw.rect(screen,(255,0,0),ex)
pygame.draw.rect(screen,(0,255,0),exz)
pygame.display.update()
screen.fill((50,50,50))

Upvotes: 0

Views: 136

Answers (2)

irastol
irastol

Reputation: 62

I don't know if this is what you wanted, but:

import pygame

pygame.init()
screen= pygame.display.set_mode((700,500))
ex = pygame.Rect(30,30,60,60) #this has to be outside of the while loop, otherwise the position resets every time
exz= pygame.Rect(0,30,30,60) #same of ex
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: #I don't know what 256 and 1024 means, but this is way better
           pygame.quit()
#This has to be outside the for event loop
    cursor_pos=pygame.mouse.get_pos() #you shall update the cursor every fps, and not by a if statement
    if ex.collidepoint(cursor_pos) or exz.collidepoint(cursor_pos): #Idk what you did here, but i think this is just way simpler
        exz.x+=30
        ex.x+=30
        pygame.display.set_caption("Cursor is in area")
    else:
        pygame.display.set_caption("Cursor is not in area")
        

    pygame.draw.rect(screen,(255,0,0),ex) #the draws methods were outside the while loop
    pygame.draw.rect(screen,(0,255,0),exz)
    pygame.display.update()
    screen.fill((50,50,50))

This code moves the two rects whenever the mouse gets inside of one of them. Your glitching is because ex and exz are inside the while loop, so you were re-setting the position every time. I removed the prints but those were not a problem

Upvotes: 0

your last 5 lines should be inside the while loop block, to update the screen.

Upvotes: 1

Related Questions