0:05 типы событий мыши 0:14 пример события нажатие кнопки мыши, MOUSEBUTTONDOWN 0:56 событие MOUSEBUTTONDOWN в коде 1:15 как работает пример 1:44 варианты номера нажатой кнопки, event.button 1:57 событие перемещение курсора мыши, MOUSEMOTION 2:36 дополнительные свойства у объекта Event 3:14 когда использовать свойство rel 3:27 rel существует только для события движение мыши 4:00 рисуем прямоугольник мышкой 4:15 переменные 4:35 событие нажата левая кнопка мыши 5:12 событие перемещение мыши 5:55 событие отпущена левая кнопка мыши 6:25 как работает программа 6:57 нюанс, событие срабатывает один раз 7:29 нюанс, событие срабатывает много раз 7:50 если надо постоянно определять нажата ли кнопка мыши 8:10 что возвращает функция get_pressed() 8:39 подготовка кода к добавлению get_pressed 9:16 get_pressed в коде 10:30 как работает пример 11:06 скрыть курсор мыши 11:37 рисуем свой курсор мыши 12:13 определяем находится ли курсор мыши в клиентской области окна, функция get_focused() 12:58 как работает пример
Для тех, у кого не рисует при отрицательной ширине либо высоте (при движении курсора влево или вверх от начальной точки) - вот простой способ решения (ИМХО предложенные в комментариях способы слишком громостки): if flStartDraw: pos = event.pos x, y = min(sp[0], pos[0]), min(sp[1], pos[1]) width = max(pos[0], sp[0]) - x height = max(pos[1], sp[1]) - y sc.fill(WHITE) pygame.draw.rect(sc, RED, pygame.Rect(x, y, width, height)) pygame.display.update()
Друзья, чтобы прямоугольник рисовался как слева направо, так и справа налево, необходимо добавить дополнительное условие, которое будет высчитывать новые координаты. Нужно по иксу изменить координаты в минус. И потом добавить начальную координату в функцию draw, чтобы оттуда начался рисоваться прямоугольник. Вот код. if sp is None: sp = pos width = pos[0] - sp[0] height = pos[1] - sp[1] pygame.draw.rect(screen, GREEN, (sp[0], sp[1], width, height)) if pos[0] - sp[0]
Спасибо! Ниже код для тех, у кого рисует только в четвертой четверти. И плюс возможность сохранять уже нарисованные прямоугольники. import pygame as pg pg.init() scr = pg.display.set_mode((850, 700)) clock = pg.time.Clock() sp = rect = None drawed = list() scr.fill((0, 0, 0)) pg.display.update() while True: clock.tick(60)
for e in pg.event.get(): if e.type == pg.QUIT: exit() elif e.type == pg.MOUSEBUTTONUP and e.button == 1: drawed.append(rect) sp = rect = None
mouse = pg.mouse.get_pressed() if mouse[0]: if not sp: sp = pg.mouse.get_pos() rect = pg.Rect(sp[0], sp[1], 0, 0) ep = pg.mouse.get_pos() rect.x = min(sp[0], ep[0]) rect.y = min(sp[1], ep[1]) rect.w = abs(ep[0] - sp[0]) rect.h = abs(ep[1] - sp[1])
scr.fill((0, 0, 0)) pg.draw.rect(scr, (255, 0, 0), rect) if drawed: for r in drawed: pg.draw.rect(scr, (255, 0, 0), r) pg.display.update()
Видео отличное, но хотелось бы что-нибудь по типу "домашнего задания". Допустим, после это урока попробуйте сделать курсор квадратом или рисовать не прямоугольник, а круг...
Привет, с тобой согласен, но коли нет заданий то у меня есть предложение, а давай змейку нарисуем?, самую простую из квадратиков, по мне информации изложенной в четырех занятиях достаточно, Либо можно Крестики Нолики.
Уроки супер! Только у меня вопрос один. Код написан такой же, но прямоугольник рисуется только слева направо вниз. Вверх не рисуется, справа налево не срабатывает. В чем может быть причина?
Спасибо за уроки! Только как и у предыдущих у меня не может поворачиваться прямоугольник при отрицательных ширине и высоте. Pygame = 2.0.2 документацию читал. там написано, что " The size values can be programmed to have negative values, but these are considered illegal Rects for most operations." "Значения размеров можно запрограммировать на отрицательные значения,но для большинства операций они считаются недопустимыми Rects."
pos - это переменная, при ее первичном определении - начальные координаты курсора мыши. Когда мы начинаем им двигать, координаты меняются, но начальные уже записаны в переменную sp. После мы определяем две переменные: ширину и высоту, и из конечных координат (pos) вычитаем начальные(sp). Таким образом, получаем величины, сначала ширину - по икс, а потом по высоте - игрек. То есть, если бы у нас начальные координаты были 150 и 150, а конечные, к примеру, 250 и 250, то высота и ширина составили бы по 100 и получился бы квадрат.
Как будто версии пайгейма имеют значение. У некоторых людей прямоугольник не рисуется при отрицательных значениях положения мышки (у меня тоже), но у меня ещё одна проблема: нет реакции на отпускание кнопки мыши и треульник продолжает рисоваться, стоит мне только один раз нажать кнпоку мыши и отпустить её. При этом события MOUSEBUTTONUP обрабатываются. Проверяил, принтуя каждый раз текст при событиях MOUSEBUTTONDOWN и MOUSEBUTTONUP .
Круто! Все работает. Но вот как добавить свой курсор в виде картинки, которую я хочу использовать как картинку?... Точнее, как картинку в виде курсора использовать так, чтобы задний фон оставался тем самым фоном, что я задал изначально, к примеру, какой-то пейзаж за городом игрового мира? Я добавил картинку, установил ее курсором, но эта картинка либо рендерится настолько в огромном кол-ве, что можно рисовать всякие фигуры, либо можно добавить заливку экрана, что оставит только курсор без отрисовки его на всем экране в огромном кол-ве. Только вот мне надо оставить то меню, к примеру, где у меня фон в виде картинки, а не заливать сплошным цветом. Код ниже: import pygame as pg pg.init() W = 600 H = 400 sc = pg.display.set_mode((W, H)) cursor = pg.image.load('assets/Pictures/png/cursor/Cursor1.bmp').convert() # Тут загружаем сам курсор cursor.set_colorkey((255, 255, 255)) # Тут для прозрачности, если он не прозрачный, убираем цвет фона cursor = pg.transform.scale(cursor, (30, 42)) # А тут задаем высоту и ширину в пикселях WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 50, 50) GREEN = (30, 255, 30) BLUE = (10, 10, 250) FPS = 120 clock = pg.time.Clock() pg.mouse.set_visible(False) while 1: for e in pg.event.get(): if e.type == pg.QUIT: exit() pos = pg.mouse.get_pos() if pg.mouse.get_focused(): sc.fill((BLACK)) # Сам экран заливки. Если его не добавить, то их будет очень много sc.blit(cursor, pos) # А это, собственно, отрисовка самого курсора else: sc.fill((BLACK)) # Ну и эта заливка, чтобы курсор пропал, когда выходит за пределы окна pg.display.update() clock.tick(FPS) Ну вот так как-то у меня.
Лучше поздно, чем никогда import pygame pygame.init() R = int(input("Укажите R: ")) screen = pygame.display.set_mode((400, 400)) screen.fill("#ffffff") pygame.display.set_caption("Программа") pygame.display.update() run = True while run:
for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() run = False
у меня проблема: координаты х и у могут ити только в минус, тоесть прямоугольник рисуеться только когда мишь движеться вниз направо, хотя в коде я не могу найти отличия от вашего , в чём может быть проблема? версия PYthon 3.7.9
огромное вам спасибо за это видео, сам пытался разобраться в этом без туторов, никуя не понял, здесь за 13 минут все узнал
Спасибо! Столько труда вложено и времени...
0:05 типы событий мыши
0:14 пример события нажатие кнопки мыши, MOUSEBUTTONDOWN
0:56 событие MOUSEBUTTONDOWN в коде
1:15 как работает пример
1:44 варианты номера нажатой кнопки, event.button
1:57 событие перемещение курсора мыши, MOUSEMOTION
2:36 дополнительные свойства у объекта Event
3:14 когда использовать свойство rel
3:27 rel существует только для события движение мыши
4:00 рисуем прямоугольник мышкой
4:15 переменные
4:35 событие нажата левая кнопка мыши
5:12 событие перемещение мыши
5:55 событие отпущена левая кнопка мыши
6:25 как работает программа
6:57 нюанс, событие срабатывает один раз
7:29 нюанс, событие срабатывает много раз
7:50 если надо постоянно определять нажата ли кнопка мыши
8:10 что возвращает функция get_pressed()
8:39 подготовка кода к добавлению get_pressed
9:16 get_pressed в коде
10:30 как работает пример
11:06 скрыть курсор мыши
11:37 рисуем свой курсор мыши
12:13 определяем находится ли курсор мыши в клиентской области окна, функция get_focused()
12:58 как работает пример
С описания скопировал
спасибо Сергею Балакиреву за курс!
Для тех, у кого не рисует при отрицательной ширине либо высоте (при движении курсора влево или вверх от начальной точки) - вот простой способ решения (ИМХО предложенные в комментариях способы слишком громостки):
if flStartDraw:
pos = event.pos
x, y = min(sp[0], pos[0]), min(sp[1], pos[1])
width = max(pos[0], sp[0]) - x
height = max(pos[1], sp[1]) - y
sc.fill(WHITE)
pygame.draw.rect(sc, RED, pygame.Rect(x, y, width, height))
pygame.display.update()
Спасибо, у меня только что возникла эта проблема, ты лучший
Написал код в видео. Не работает! Сам разобрался всё исчертил, исписал.
Заработало. Захожу в коменты и тут такой же код😓😓
спасибо! а то у автора мозгов не хватило
А со вторым вариантом как применить этот код?
огромное спасибо🎉🎉🎉🎉 я начал понимать 🔥🔥🔥🔥
Cпасибо,очень хорошо объясняешь очень четко и понятно
Да
pygame + логика , отличная тема
Спасибо большое!
Друзья, чтобы прямоугольник рисовался как слева направо, так и справа налево, необходимо добавить дополнительное условие, которое будет высчитывать новые координаты.
Нужно по иксу изменить координаты в минус. И потом добавить начальную координату в функцию draw, чтобы оттуда начался рисоваться прямоугольник. Вот код.
if sp is None:
sp = pos
width = pos[0] - sp[0]
height = pos[1] - sp[1]
pygame.draw.rect(screen, GREEN, (sp[0], sp[1], width, height))
if pos[0] - sp[0]
Спасибо.
Спасибо! Ниже код для тех, у кого рисует только в четвертой четверти. И плюс возможность сохранять уже нарисованные прямоугольники.
import pygame as pg
pg.init()
scr = pg.display.set_mode((850, 700))
clock = pg.time.Clock()
sp = rect = None
drawed = list()
scr.fill((0, 0, 0))
pg.display.update()
while True:
clock.tick(60)
for e in pg.event.get():
if e.type == pg.QUIT:
exit()
elif e.type == pg.MOUSEBUTTONUP and e.button == 1:
drawed.append(rect)
sp = rect = None
mouse = pg.mouse.get_pressed()
if mouse[0]:
if not sp:
sp = pg.mouse.get_pos()
rect = pg.Rect(sp[0], sp[1], 0, 0)
ep = pg.mouse.get_pos()
rect.x = min(sp[0], ep[0])
rect.y = min(sp[1], ep[1])
rect.w = abs(ep[0] - sp[0])
rect.h = abs(ep[1] - sp[1])
scr.fill((0, 0, 0))
pg.draw.rect(scr, (255, 0, 0), rect)
if drawed:
for r in drawed:
pg.draw.rect(scr, (255, 0, 0), r)
pg.display.update()
Спасибо за видео
Спасибо большое
спасибочки за занятие))
Грамотно!
спасибо!+++++++++++++++++++++++++
Видео отличное, но хотелось бы что-нибудь по типу "домашнего задания". Допустим, после это урока попробуйте сделать курсор квадратом или рисовать не прямоугольник, а круг...
Привет, с тобой согласен, но коли нет заданий то у меня есть предложение, а давай змейку нарисуем?, самую простую из квадратиков, по мне информации изложенной в четырех занятиях достаточно, Либо можно Крестики Нолики.
Вот тебе задание: попробуй сделать курсор квадратиком, потом нарисуй не прямоугольник, а круг.
Уроки супер! Только у меня вопрос один. Код написан такой же, но прямоугольник рисуется только слева направо вниз. Вверх не рисуется, справа налево не срабатывает. В чем может быть причина?
Странно, все проверял, да и видео тогда бы не смог снять, если бы было иначе... может версия Pygame как то влияет?
@@selfedu_rus у меня сейчас pygame 2.0.1, Python 3.8.7
при втором способе такая же ситуация, а в первом все ок
@@khadzhik-_-8737 блин, а у меня и в первом способе не работало 🤷
@@selfedu_rus такая же ситуация, но если задать толщину прямоугольника, то всё ок
четкие ролики, и почему так мало просмотров?
ЭТО ТО, ЧТО МНЕ НУНЖО БЫЛО!!!
моя программа работает, но она не рисует, когда ep находится в отрицательном состоянии, pygame 2.0.1 (SDL 2.0.14, Python 3.7.8)
спасибо за лекцию
+++
та же проблема, когда rect принимает отрицательные значения ширины и высоты ничего не рисуется, pygame 2.0.1 (SDL 2.0.14, Python 3.8.0)
И у меня то же самое. Слева направо - сверху вниз рисует, а наоборот нет.
Спасибо за уроки!
Только как и у предыдущих у меня не может поворачиваться прямоугольник при отрицательных ширине и высоте. Pygame = 2.0.2
документацию читал. там написано, что
" The size values can be programmed to have negative values, but these are considered illegal Rects for most operations."
"Значения размеров можно запрограммировать на отрицательные значения,но для большинства операций они считаются недопустимыми Rects."
Я вот не понимаю что делает и как работает строка: width = pos[0] - sp[0]
И такая же с height
pos - это переменная, при ее первичном определении - начальные координаты курсора мыши. Когда мы начинаем им двигать, координаты меняются, но начальные уже записаны в переменную sp. После мы определяем две переменные: ширину и высоту, и из конечных координат (pos) вычитаем начальные(sp). Таким образом, получаем величины, сначала ширину - по икс, а потом по высоте - игрек. То есть, если бы у нас начальные координаты были 150 и 150, а конечные, к примеру, 250 и 250, то высота и ширина составили бы по 100 и получился бы квадрат.
@@lingvitos стало понятнее спасибо!
Как будто версии пайгейма имеют значение. У некоторых людей прямоугольник не рисуется при отрицательных значениях положения мышки (у меня тоже), но у меня ещё одна проблема: нет реакции на отпускание кнопки мыши и треульник продолжает рисоваться, стоит мне только один раз нажать кнпоку мыши и отпустить её.
При этом события MOUSEBUTTONUP обрабатываются. Проверяил, принтуя каждый раз текст при событиях MOUSEBUTTONDOWN и MOUSEBUTTONUP .
да, это возможно
Круто! Все работает. Но вот как добавить свой курсор в виде картинки, которую я хочу использовать как картинку?... Точнее, как картинку в виде курсора использовать так, чтобы задний фон оставался тем самым фоном, что я задал изначально, к примеру, какой-то пейзаж за городом игрового мира?
Я добавил картинку, установил ее курсором, но эта картинка либо рендерится настолько в огромном кол-ве, что можно рисовать всякие фигуры, либо можно добавить заливку экрана, что оставит только курсор без отрисовки его на всем экране в огромном кол-ве. Только вот мне надо оставить то меню, к примеру, где у меня фон в виде картинки, а не заливать сплошным цветом.
Код ниже:
import pygame as pg
pg.init()
W = 600
H = 400
sc = pg.display.set_mode((W, H))
cursor = pg.image.load('assets/Pictures/png/cursor/Cursor1.bmp').convert() # Тут загружаем сам курсор
cursor.set_colorkey((255, 255, 255)) # Тут для прозрачности, если он не прозрачный, убираем цвет фона
cursor = pg.transform.scale(cursor, (30, 42)) # А тут задаем высоту и ширину в пикселях
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 50, 50)
GREEN = (30, 255, 30)
BLUE = (10, 10, 250)
FPS = 120
clock = pg.time.Clock()
pg.mouse.set_visible(False)
while 1:
for e in pg.event.get():
if e.type == pg.QUIT:
exit()
pos = pg.mouse.get_pos()
if pg.mouse.get_focused():
sc.fill((BLACK)) # Сам экран заливки. Если его не добавить, то их будет очень много
sc.blit(cursor, pos) # А это, собственно, отрисовка самого курсора
else:
sc.fill((BLACK)) # Ну и эта заливка, чтобы курсор пропал, когда выходит за пределы окна
pg.display.update()
clock.tick(FPS)
Ну вот так как-то у меня.
Хотя, может мне другое использовать вместо строки "sc.blit(cursor, pos)" ?
Подскажите, пожалуйста, новичку!
как можно сделать так ? 1) При нажатии ЛКМ рисуем синий круг в радиусом R;
2) При нажатии ПКМ рисуем красный квадрат со стороной R * 2.
Лучше поздно, чем никогда
import pygame
pygame.init()
R = int(input("Укажите R: "))
screen = pygame.display.set_mode((400, 400))
screen.fill("#ffffff")
pygame.display.set_caption("Программа")
pygame.display.update()
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
run = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
#screen.fill("#ffffff")
pygame.draw.circle(screen, "blue", (event.pos[0], event.pos[1]), R)
pygame.display.update()
elif event.button == 3:
#screen.fill("#ffffff")
pygame.draw.rect(screen, "red", (event.pos[0], event.pos[1], R*2, R*2))
pygame.display.update()
А кто знает как вместо прямоугольника отрисовать эллипс?
у меня проблема: координаты х и у могут ити только в минус, тоесть прямоугольник рисуеться только когда мишь движеться вниз направо, хотя в коде я не могу найти отличия от вашего , в чём может быть проблема? версия PYthon 3.7.9
а, уже в коментах помогли, спасибо за ролик!
а если мы возьмём у нас будет игра и в ней мы будим выбирать варианты ну дапустим ответы
Я не могу понять что такое флаг
Это просто булевая переменная
автор кроме того, что откуда - то копирует код, так у него в каждом видео ошибки на исправления которых уходят часы