Довольно мало таких инициативных людей, которые фактически "за спасибо" делают подобный контент, имея перед собой главную цель - сделать всё возможное для ЛЮДЕЙ. Это действительно достойно уважения.
0:02 вступление Rect 0:34 метод поверхности get_rect() 0:54 пример 1:01 создаем поверхность герой 1:44 характеристики прямоугольника print(rect) 2:17 как работает пример 2:30 что возвращает метод get_rect() 2:37 свойства класса Rect 3:09 выводим в консоль координаты центра прямоугольника 3:52 координаты учитывают положение прямоуголника 4:00 дополнительные именнованые параметры 4:06 задать начальное положение верхнего левого угла прямоугольника 4:29 по умолчанию 4:37 располагаем прямоугольник по центру клиентского окна 5:04 центрируем по Х или по Y 5:11 пример 5:41 как работает пример 5:46 взаимодействие между blit и rect 6:15 пример 6:25 как работает пример методы класса Rect 6:56 move() 7:04 move_ip() 7:20 clip() 7:26 union() 7:36 union_ip 7:54 fit() 8:07 полный список методов 8:47 как работает ip 8:55 пример move_ip() и union() 9:50 как работает пример 10:00 принцип работы move_ip() в коде 10:19 принцип работы union() в коде 10:42 графически union() 11:06 графически move_ip() 11:21 пример прыжка 11:44 вспомогательные переменные 12:12 создаем героя 12:40 отслеживаем событие нажатие на пробел 13:23 делаем прыжок 15:40 рисуем героя 16:10 как работает пример 16:52 перерисовываем только ту область окна где есть прыжок героя 17:36 как работает пример
Спасибо, за понятное объяснение модуля pygame. В свое время у вас было задание написать игру крестики ноли. Тогда мне это было сложно сделать, особенно сделать так что бы компьютер делал ход осмысленно. Это удалось но портянка получилась длинной и не понятной. Сейчас я решил ее перенести в графику. И скажу честно посмотрев на с функцию которая отвечала за ход компьютера решил полностью ее перелапатить. В первую очередь изменил принцип выбора очередного хода компьютером. … Но вот объяснить принцип не получается. Ссылка на текст… для меня самое интересное было создать логику хода компьютера @t
спасибо за видео, но с прыжком как-будто и правда перенаворочено. сделал вот так: if move < jump_force:# прыжок hero_rect.bottom += move move += 1 else: hero_rect.bottom = ground вроде бы всё так же работает: в начале и конце прыжка самая высокая скорость, на пути к верхней точке - замедляется, на верху немного зависает)) возможно, я чего-то не понял, конечно
На 17:42 автор говорит, что код на 48 строке закрашивает только ту часть, которую мы видим белой. По логике закрашиваться должен весь экран, а отображается обновленная заливка только в той части экрана, которую мы задаем в строке 50.
Хотел спросить, в pygame размер измеряется в пикселях, но разрешения екранов же бывают разные. Есть же 4К, к примеру, там оно будет маленькое. Для каждого екрана делать проверку? Сложно как-то.. Спасибо за урок)
Измучилась. Конечный вариант программы с перерисовкой (pygame.display.update(rect_update)) только той области, где подпрыгивает герой, у меня перерисовывается вся область, а не только тот "стаканчик". И что же мне с этим делать? Кто-то столкнулся с той же проблемой? Может это быть связано с версией PyGame? Мне при выполнении pygame.init() выводит: pygame 2.0.0 (SDL 2.0.12, python 3.7.7) import pygame pygame.init() W = 600 H = 400 sc = pygame.display.set_mode((W, H)) pygame.display.set_caption("Class Rect") WHITE = (255, 255, 255) BLUE = (0, 0, 255) FPS = 60 clock = pygame.time.Clock() ground = H - 70 jump_force = 20 move = jump_force + 1 hero = pygame.Surface((40, 50)) hero.fill(BLUE) rect = hero.get_rect(centerx=W // 2) rect.bottom = ground rect_update = pygame.Rect(rect.x, 0, rect.width, ground) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE and ground == rect.bottom: move = -jump_force if move
либо я тупой - либо запутанный какой - то,этот код с прыжками,написал его по своему тоже работал,но chat gpt сказал,что ваш код лучше моего,пытался вникнуть в суть,примерно понял ,но не стал зацикливаться , и написал как вы его написали
Я хотел сделать перемещение вправо и влево, но..... но пишу сейчас тебе в комменты, ведь промучившись 38 минут я просто не понимаю что не дает мне спокойно жить. Вот код: import pygame as pg from settings import SIZE, COLOR_BACKGROUND, speed, P_COLOR, move, ground, jump_force, WIDTH, HEIGHT pg.init() pg.display.set_caption('Игра?') screen = pg.display.set_mode(SIZE, pg.RESIZABLE) clock = pg.time.Clock() x = WIDTH // 2 y = HEIGHT // 2 hero = pg.Surface([10,10]) hero.fill(P_COLOR) rect = hero.get_rect(topleft = [x,y]) rect.bottom = ground run = True while run: for event in pg.event.get(): if event.type == pg.QUIT: run = False
elif event.type == pg.KEYDOWN: if event.key == pg.K_SPACE and ground == rect.bottom: move = -jump_force if move
У тебя в цикле while переменная х - это просто какое-то число, которое в самом цикле не используется. Поэтому нужно либо избавиться от икса и написать код немного по-другому, используя свойство left: if keys[pg.K_LEFT]: rect.left -= speed if keys[pg.K_RIGHT]: rect.left += speed Либо задействовать переменную х - передать её объекту rect как координату нижней точки прямоугольника, левой или правой - не важно. При этом также нужно обновить значение координаты у: y = rect.bottom if keys[pg.K_LEFT]: x -= speed rect = hero.get_rect(bottomleft=(x, y)) if keys[pg.K_RIGHT]: x += speed rect = hero.get_rect(bottomleft=(x, y))
Довольно мало таких инициативных людей, которые фактически "за спасибо" делают подобный контент, имея перед собой главную цель - сделать всё возможное для ЛЮДЕЙ. Это действительно достойно уважения.
Спасибо. Самое понятное пособие по пайгем, которое я видел.
Господи храни таких людей
Спасибо за урок) очень понятно и по делу
0:02 вступление Rect
0:34 метод поверхности get_rect()
0:54 пример
1:01 создаем поверхность герой
1:44 характеристики прямоугольника print(rect)
2:17 как работает пример
2:30 что возвращает метод get_rect()
2:37 свойства класса Rect
3:09 выводим в консоль координаты центра прямоугольника
3:52 координаты учитывают положение прямоуголника
4:00 дополнительные именнованые параметры
4:06 задать начальное положение верхнего левого угла прямоугольника
4:29 по умолчанию
4:37 располагаем прямоугольник по центру клиентского окна
5:04 центрируем по Х или по Y
5:11 пример
5:41 как работает пример
5:46 взаимодействие между blit и rect
6:15 пример
6:25 как работает пример
методы класса Rect
6:56 move()
7:04 move_ip()
7:20 clip()
7:26 union()
7:36 union_ip
7:54 fit()
8:07 полный список методов
8:47 как работает ip
8:55 пример move_ip() и union()
9:50 как работает пример
10:00 принцип работы move_ip() в коде
10:19 принцип работы union() в коде
10:42 графически union()
11:06 графически move_ip()
11:21 пример прыжка
11:44 вспомогательные переменные
12:12 создаем героя
12:40 отслеживаем событие нажатие на пробел
13:23 делаем прыжок
15:40 рисуем героя
16:10 как работает пример
16:52 перерисовываем только ту область окна где есть прыжок героя
17:36 как работает пример
Немного не по требованиям идет разбивка на эпизоды. Вот см. здесь: support.google.com/youtube/answer/9884579?hl=ru
Спасибо, очень понятно объясняешь, и с каждым твоим видео я узнаю всё больше и больше! 🙂
на 6 минутах поставил на паузу и написал квадрат с полноценным управлением и физикой. теперь смотрю как в видео делают просто прыжки
Спасибо, очень понятно и без лишних слов!
Лучший урок в мире!! :)
спасибо за урок)
Спасибо, за понятное объяснение модуля pygame. В свое время у вас было задание написать игру крестики ноли. Тогда мне это было сложно сделать, особенно сделать так что бы компьютер делал ход осмысленно. Это удалось но портянка получилась длинной и не понятной. Сейчас я решил ее перенести в графику. И скажу честно посмотрев на с функцию которая отвечала за ход компьютера решил полностью ее перелапатить. В первую очередь изменил принцип выбора очередного хода компьютером. … Но вот объяснить принцип не получается. Ссылка на текст… для меня самое интересное было создать логику хода компьютера @t
спасибо, Сергей!!+++++++++++++++++!!!!!!!
Спасибо большое
Жаль что ваши видео не особо популярны(тем более за такие усилия)
спасибо за видео, но с прыжком как-будто и правда перенаворочено. сделал вот так:
if move < jump_force:# прыжок
hero_rect.bottom += move
move += 1
else:
hero_rect.bottom = ground
вроде бы всё так же работает: в начале и конце прыжка самая высокая скорость, на пути к верхней точке - замедляется, на верху немного зависает)) возможно, я чего-то не понял, конечно
Помогите пожалуйста, как сделать так на pygame, что мы создали квадрат (типо кнопку) и когда на нее нажимаем появляется новое окно
На 17:42 автор говорит, что код на 48 строке закрашивает только ту часть, которую мы видим белой. По логике закрашиваться должен весь экран, а отображается обновленная заливка только в той части экрана, которую мы задаем в строке 50.
Переписал полностью код как из лекции, но герой подпрыгивал только 1 раз и все.
изменил условие if move
Хотел спросить, в pygame размер измеряется в пикселях, но разрешения екранов же бывают разные. Есть же 4К, к примеру, там оно будет маленькое. Для каждого екрана делать проверку? Сложно как-то..
Спасибо за урок)
да, есть такой момент, все же это достаточно простая библиотека без наворотов ))
Что делает метод bottom?
Измучилась. Конечный вариант программы с перерисовкой (pygame.display.update(rect_update)) только той области, где подпрыгивает герой, у меня перерисовывается вся область, а не только тот "стаканчик". И что же мне с этим делать? Кто-то столкнулся с той же проблемой? Может это быть связано с версией PyGame? Мне при
выполнении pygame.init() выводит: pygame 2.0.0 (SDL 2.0.12, python 3.7.7)
import pygame
pygame.init()
W = 600
H = 400
sc = pygame.display.set_mode((W, H))
pygame.display.set_caption("Class Rect")
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
FPS = 60
clock = pygame.time.Clock()
ground = H - 70
jump_force = 20
move = jump_force + 1
hero = pygame.Surface((40, 50))
hero.fill(BLUE)
rect = hero.get_rect(centerx=W // 2)
rect.bottom = ground
rect_update = pygame.Rect(rect.x, 0, rect.width, ground)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE and ground == rect.bottom:
move = -jump_force
if move
может версия python не та у меня python 3.6.3 и всё прекрасно работает а версия pygame 1.9.6
может надо скачать pygame 1.9.6? (у меня 1.9.6 и всё прекрасно работает)
Проверил Ваш код на pygame 2.0.1 (SDL 2.0.14, Python 3.6.9) - работает
@@ОлегТруе ок удачи ))))))))
а как в Surface загрузить текстуру?
через изображение, см. следующие занятия
либо я тупой - либо запутанный какой - то,этот код с прыжками,написал его по своему тоже работал,но chat gpt сказал,что ваш код лучше моего,пытался вникнуть в суть,примерно понял ,но не стал зацикливаться , и написал как вы его написали
Ну зачем так усложнять прыжок:(
Я хотел сделать перемещение вправо и влево, но..... но пишу сейчас тебе в комменты, ведь промучившись 38 минут я просто не понимаю что не дает мне спокойно жить. Вот код:
import pygame as pg
from settings import SIZE, COLOR_BACKGROUND, speed, P_COLOR, move, ground, jump_force, WIDTH, HEIGHT
pg.init()
pg.display.set_caption('Игра?')
screen = pg.display.set_mode(SIZE, pg.RESIZABLE)
clock = pg.time.Clock()
x = WIDTH // 2
y = HEIGHT // 2
hero = pg.Surface([10,10])
hero.fill(P_COLOR)
rect = hero.get_rect(topleft = [x,y])
rect.bottom = ground
run = True
while run:
for event in pg.event.get():
if event.type == pg.QUIT:
run = False
elif event.type == pg.KEYDOWN:
if event.key == pg.K_SPACE and ground == rect.bottom:
move = -jump_force
if move
У тебя в цикле while переменная х - это просто какое-то число, которое в самом цикле не используется. Поэтому нужно либо избавиться от икса и написать код немного по-другому, используя свойство left:
if keys[pg.K_LEFT]:
rect.left -= speed
if keys[pg.K_RIGHT]:
rect.left += speed
Либо задействовать переменную х - передать её объекту rect как координату нижней точки прямоугольника, левой или правой - не важно. При этом также нужно обновить значение координаты у:
y = rect.bottom
if keys[pg.K_LEFT]:
x -= speed
rect = hero.get_rect(bottomleft=(x, y))
if keys[pg.K_RIGHT]:
x += speed
rect = hero.get_rect(bottomleft=(x, y))