PyGame почему фигура не движется?
Когда происходит клик под ним появляется круг. Круг должен вылетать из нижнего края окна и лететь вверх, т.е. изменяться должна только координата y.
Пока летит один, другой не должен появляться. У меня нет идей почему круг не двигается. Я выносил if в основной цикл , менял if на while (но во всех этих случаях вылетает ошибка).
import pygame as pg
import sys
WHITE = (255, 255, 255)
RED = (225, 0, 50)
sc = pg.display.set_mode((400, 300))
sc.fill(WHITE)
pg.display.update()
while True:
for i in pg.event.get():
if i.type == pg.QUIT:
sys.exit()
if i.type == pg.MOUSEBUTTONDOWN:
if i.button == 1:
x, pos_y = i.pos
y = 300
pg.draw.circle(
sc, RED, (x, y), 20)
if y != pos_y:
y -= 10
pg.display.update()
pg.time.delay(20)
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не совсем понял вашу задумку с кликами, поэтому покажу вам пример движения изображения.
Клавиши K_UP, K_DOWN, K_LEFT, K_RIGHT и их сочетания в вашем распоряжении, попробуйте:
import sys
import pygame as pg
pg.init()
width = 800
height = 600
size = (width, height)
window = pg.display.set_mode(size)
clock = pg.time.Clock()
all_sprites = pg.sprite.Group()
class Sprite(pg.sprite.Sprite):
def __init__(self, x=width/2, y=height/2):
super().__init__()
self.image = pg.image.load("ball.png").convert()
self.image.set_colorkey((0, 0, 0))
self.rect = self.image.get_rect()
self.rect.center = (x, y)
def update(self, *args):
up, down, right, left = args
if self.rect.x > width:
self.rect.x = 0
if self.rect.x < 0:
self.rect.x = width
if self.rect.y > height:
self.rect.y = 0
if self.rect.y < 0:
self.rect.y = height
if right:
self.rect.x += 10
if left:
self.rect.x -= 10
if up:
self.rect.y -= 10
if down:
self.rect.y += 10
sprite_1 = Sprite()
all_sprites.add(sprite_1)
while True:
keys = pg.key.get_pressed()
clock.tick(60)
for event in pg.event.get():
if event.type == pg.QUIT:sys.exit()
if keys[pg.K_UP] or keys[pg.K_DOWN] or keys[pg.K_LEFT] or keys[pg.K_RIGHT]:
up, down, right, left = keys[pg.K_UP], keys[pg.K_DOWN], keys[pg.K_RIGHT], keys[pg.K_LEFT]
all_sprites.update(up, down, right, left)
window.fill((255,255,255))
all_sprites.draw(window)
pg.display.update()
ball.png
Update
при нажатии ЛКМ создаю круг, и по идее он должен двигаться вверх пока его координата y не совпадет с координатой y в месте клика, но он не движется
import sys
import pygame as pg
pg.init()
width = 800
height = 600
size = (width, height)
flag = False
m_x, m_y, _m_y = 0, 0, 0
window = pg.display.set_mode(size)
clock = pg.time.Clock()
all_sprites = pg.sprite.Group()
class Sprite(pg.sprite.Sprite):
def __init__(self, x=width/2, y=height/2):
super().__init__()
self.image = pg.image.load("ball.png").convert() # ball.png
self.image.set_colorkey((0, 0, 0))
self.rect = self.image.get_rect()
self.rect.center = (x, height+20)
self.n = 7
def update(self, *args):
m_x, m_y, flag = args
self.rect.center = (m_x, height-self.n)
self.n += 7
if flag and m_y > 0:
self.rect.y -= 7
sprite_1 = Sprite()
all_sprites.add(sprite_1)
while True:
keys = pg.key.get_pressed()
clock.tick(60)
for event in pg.event.get():
if event.type == pg.QUIT:sys.exit()
if event.type == pg.MOUSEBUTTONDOWN:
if event.button == 1:
m_x, m_y = event.pos
_m_x, _m_y = event.pos
flag = True
if height - _m_y - sprite_1.n > 0 and flag:
m_y = sprite_1.rect.y
all_sprites.update(m_x, m_y, flag)
else:
flag = False
m_y = 0
_m_y = 0
sprite_1.n = 7
window.fill((255, 255, 255))
all_sprites.draw(window)
pg.display.update()


