TransWikia.com

pygame.draw.rect меняет размер, хотя тот постоянен

Stack Overflow на русском Asked by Nezerix on November 20, 2021

import pygame
 
FPS = 60

screen_width=800
screen_height=500
screen_size=(screen_width,screen_height)

pygame.init()
root=pygame.display.set_mode(screen_size)
clock = pygame.time.Clock()
 
person=[pygame.image.load("person_right.png"),pygame.image.load("person_left.png")]

pygame.display.update()

jumpCount=15

x=0
y=0

isJump=False
side="right"

x_person=screen_width//3
y_person=screen_height-200

size_block=50
def draw_ground():
    pygame.draw.rect(root,(0,0,100),(x,y,x+size_block,y+size_block))

def draw(side):
    root.fill((0,0,0))
    if side=="right":
        root.blit(person[0],(x_person,y_person))
    else:
        root.blit(person[1],(x_person,y_person))
    draw_ground()
    pygame.display.update()

def jump():
    global y, isJump,jumpCount
    if jumpCount>=-15:
        if jumpCount>=0:
            y-=(jumpCount**2)//16
        else:
            y+=(jumpCount**2)//16
        jumpCount-=1

    else:
        isJump=False
        jumpCount=15

while True:
    clock.tick(FPS)
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            exit()
    keys=pygame.key.get_pressed()
    if keys[pygame.K_LEFT] or keys[pygame.K_a]:
        x+=3
        side="left"
    if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
        x-=3
        side="right"
    if not isJump:
        if keys[pygame.K_SPACE] or keys[pygame.K_w] or keys[pygame.K_UP]:
            isJump=True
    else:
        jump()
    draw(side)  

Квадрат pygame.draw.rect(root,(0,0,100),(x,y,x+size_block,y+size_block)) не должен по логике менять размеры, при изменении x, но он растягивается, причем проблема явно не в pygame.display.update(), так как он растягивается когда x увеличивается и стягивается, когда x уменьшается. size_block не меняется, значит и размеры не должны меняться.

One Answer

Если последние два значения тапла это координаты точки, то да, размер не должен меняться. Но я подозреваю, что это именно длина и ширина, и тогда они зависят от x и y. Поменяйте x+size_block,y+size_block на size_block,size_block.

import pygame
 
FPS = 60

screen_width=800
screen_height=500
screen_size=(screen_width,screen_height)

pygame.init()
root=pygame.display.set_mode(screen_size)
clock = pygame.time.Clock()
 
person=[pygame.image.load("person_right.png"),pygame.image.load("person_left.png")]

pygame.display.update()

jumpCount=15

x=0
y=0

isJump=False
side="right"

x_person=screen_width//3
y_person=screen_height-200

size_block=50
def draw_ground():
    pygame.draw.rect(root,(0,0,100),(x,y,size_block,size_block))

def draw(side):
    root.fill((0,0,0))
    if side=="right":
        root.blit(person[0],(x_person,y_person))
    else:
        root.blit(person[1],(x_person,y_person))
    draw_ground()
    pygame.display.update()

def jump():
    global y, isJump,jumpCount
    if jumpCount>=-15:
        if jumpCount>=0:
            y-=(jumpCount**2)//16
        else:
            y+=(jumpCount**2)//16
        jumpCount-=1

    else:
        isJump=False
        jumpCount=15

while True:
    clock.tick(FPS)
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            exit()
    keys=pygame.key.get_pressed()
    if keys[pygame.K_LEFT] or keys[pygame.K_a]:
        x+=3
        side="left"
    if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
        x-=3
        side="right"
    if not isJump:
        if keys[pygame.K_SPACE] or keys[pygame.K_w] or keys[pygame.K_UP]:
            isJump=True
    else:
        jump()
    draw(side) 

Answered by dIm0n on November 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP