Класс Rect. Его роль, свойства и методы | Pygame #6

Поділитися
Вставка
  • Опубліковано 3 гру 2024

КОМЕНТАРІ • 33

  • @ЕгорШишкин-г8ь
    @ЕгорШишкин-г8ь 3 роки тому +37

    Довольно мало таких инициативных людей, которые фактически "за спасибо" делают подобный контент, имея перед собой главную цель - сделать всё возможное для ЛЮДЕЙ. Это действительно достойно уважения.

  • @Joy_Mama
    @Joy_Mama Рік тому +3

    Спасибо. Самое понятное пособие по пайгем, которое я видел.

  • @gohan2717
    @gohan2717 4 роки тому +12

    Господи храни таких людей

  • @linkina1585
    @linkina1585 3 роки тому +6

    Спасибо за урок) очень понятно и по делу

  • @rioriocccp5929
    @rioriocccp5929 Рік тому +1

    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 как работает пример

    • @selfedu_rus
      @selfedu_rus  Рік тому

      Немного не по требованиям идет разбивка на эпизоды. Вот см. здесь: support.google.com/youtube/answer/9884579?hl=ru

  • @Minecraftxbox-ls3vj
    @Minecraftxbox-ls3vj 2 роки тому +4

    Спасибо, очень понятно объясняешь, и с каждым твоим видео я узнаю всё больше и больше! 🙂

  • @irp3ex
    @irp3ex Рік тому +5

    на 6 минутах поставил на паузу и написал квадрат с полноценным управлением и физикой. теперь смотрю как в видео делают просто прыжки

  • @kikimor4695
    @kikimor4695 2 роки тому +1

    Спасибо, очень понятно и без лишних слов!

  • @inter-348
    @inter-348 3 роки тому +4

    Лучший урок в мире!! :)

  • @ВикторЧеботарь-з2в

    спасибо за урок)

  • @АлексейСергиевский-в6й

    Спасибо, за понятное объяснение модуля pygame. В свое время у вас было задание написать игру крестики ноли. Тогда мне это было сложно сделать, особенно сделать так что бы компьютер делал ход осмысленно. Это удалось но портянка получилась длинной и не понятной. Сейчас я решил ее перенести в графику. И скажу честно посмотрев на с функцию которая отвечала за ход компьютера решил полностью ее перелапатить. В первую очередь изменил принцип выбора очередного хода компьютером. … Но вот объяснить принцип не получается. Ссылка на текст… для меня самое интересное было создать логику хода компьютера @t

  • @GreekkAlex
    @GreekkAlex 4 роки тому +3

    спасибо, Сергей!!+++++++++++++++++!!!!!!!

  • @Картон-п8ъ
    @Картон-п8ъ 2 роки тому +1

    Спасибо большое

  • @sangomango2375
    @sangomango2375 Рік тому +1

    Жаль что ваши видео не особо популярны(тем более за такие усилия)

  • @brokendictaphone4516
    @brokendictaphone4516 2 роки тому +4

    спасибо за видео, но с прыжком как-будто и правда перенаворочено. сделал вот так:
    if move < jump_force:# прыжок
    hero_rect.bottom += move
    move += 1
    else:
    hero_rect.bottom = ground
    вроде бы всё так же работает: в начале и конце прыжка самая высокая скорость, на пути к верхней точке - замедляется, на верху немного зависает)) возможно, я чего-то не понял, конечно

  • @tortphonk
    @tortphonk Рік тому +1

    Помогите пожалуйста, как сделать так на pygame, что мы создали квадрат (типо кнопку) и когда на нее нажимаем появляется новое окно

  • @KirillPartala
    @KirillPartala Рік тому

    На 17:42 автор говорит, что код на 48 строке закрашивает только ту часть, которую мы видим белой. По логике закрашиваться должен весь экран, а отображается обновленная заливка только в той части экрана, которую мы задаем в строке 50.

  • @wrestler91100
    @wrestler91100 Рік тому

    Переписал полностью код как из лекции, но герой подпрыгивал только 1 раз и все.
    изменил условие if move

  • @MrSpace01
    @MrSpace01 2 роки тому +1

    Хотел спросить, в pygame размер измеряется в пикселях, но разрешения екранов же бывают разные. Есть же 4К, к примеру, там оно будет маленькое. Для каждого екрана делать проверку? Сложно как-то..
    Спасибо за урок)

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      да, есть такой момент, все же это достаточно простая библиотека без наворотов ))

  • @ЕгорШахов-н8э
    @ЕгорШахов-н8э Рік тому

    Что делает метод bottom?

  • @АсяХаликова-в7б
    @АсяХаликова-в7б 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

    • @Что-г9е
      @Что-г9е 3 роки тому

      может версия python не та у меня python 3.6.3 и всё прекрасно работает а версия pygame 1.9.6

    • @chumazikk
      @chumazikk 3 роки тому

      может надо скачать pygame 1.9.6? (у меня 1.9.6 и всё прекрасно работает)

    • @ОлегТруе
      @ОлегТруе 3 роки тому

      Проверил Ваш код на pygame 2.0.1 (SDL 2.0.14, Python 3.6.9) - работает

    • @Что-г9е
      @Что-г9е 3 роки тому

      @@ОлегТруе ок удачи ))))))))

  • @warmybo
    @warmybo 4 роки тому

    а как в Surface загрузить текстуру?

    • @selfedu_rus
      @selfedu_rus  4 роки тому

      через изображение, см. следующие занятия

  • @ЭмметтБраун-у3т
    @ЭмметтБраун-у3т 2 місяці тому

    либо я тупой - либо запутанный какой - то,этот код с прыжками,написал его по своему тоже работал,но chat gpt сказал,что ваш код лучше моего,пытался вникнуть в суть,примерно понял ,но не стал зацикливаться , и написал как вы его написали

  • @magister9001
    @magister9001 4 роки тому +7

    Ну зачем так усложнять прыжок:(

  • @newGames_0
    @newGames_0 3 роки тому

    Я хотел сделать перемещение вправо и влево, но..... но пишу сейчас тебе в комменты, ведь промучившись 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

    • @deymosx
      @deymosx 3 роки тому +1

      У тебя в цикле 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))