Вопрос:
Как установить границы для pygame, которые не позволят прямоугольнику (вы можете сказать, квадрат) выйти из экрана?
Я посетил другие сайты, но ничего не было полезно для меня.
Коробка будет перемещаться left ( a), right ( d), up ( w), down ( s ).
Мой код:
import sys import pygame as pg def main(): screen = pg.display.set_mode((640, 480)) clock = pg.time.Clock() rect = pg.Rect(300, 220, 20, 20) velocity = (0, 0) done = False #screen while not done: for event in pg.event.get(): if event.type == pg.QUIT: done = True keys = pg.key.get_pressed() #move slow if keys[pg.K_a]: rect.x -= 4 if keys[pg.K_d]: rect.x += 4 if keys[pg.K_s]: rect.y += 4 if keys[pg.K_w]: rect.y -= 4 #move fast if keys[pg.K_g]: rect.x -= 8 if keys[pg.K_j]: rect.x += 8 if keys[pg.K_h]: rect.y += 8 if keys[pg.K_y]: rect.y -= 8 screen.fill((40, 40, 40)) pg.draw.rect(screen, (100, 200, 20), rect) pg.display.flip() clock.tick(30) if __name__ == ‘__main__’: pg.init() main() pg.quit() sys.exit() Лучший ответ:
В следующем коде границы – ширина и высота экрана, поэтому вы можете лучше определить их с самого начала.
Способ справиться с этим состоит в том, чтобы предотвратить координаты x и y ниже 0 и выше ширины для x и высоты для y, не забывая вычесть размер окна.
Я предлагаю немного улучшить геймплей, чтобы использовать бустер, вместо того, чтобы нажимать другие клавиши, лучше использовать модификатор, такой как shift или control. В приведенном ниже коде используется left shift, чтобы ускорить движение.
import sys import pygame as pg def main(): width, height = 640, 480 hbox, vbox = 20, 20 screen = pg.display.set_mode((width, height)) clock = pg.time.Clock() rect = pg.Rect(300, 220, hbox, vbox) velocity = (0, 0) done = False while not done: for event in pg.event.get(): if event.type == pg.QUIT: done = True keys = pg.key.get_pressed() # booster move = 8 if keys[pg.K_LSHIFT] else 4 if keys[pg.K_a]: #to move left rect.x -= move if rect.x < 0 : rect.x = 0 if keys[pg.K_d]: #to move right rect.x += move if rect.x > width-hbox : rect.x = width — hbox if keys[pg.K_w]: #to move up rect.y -= move if rect.y < 0: rect.y = 0 if keys[pg.K_s]: #to move down rect.y += move if rect.y > height — hbox: rect.y = height — vbox screen.fill((40, 40, 40)) pg.draw.rect(screen, (150, 200, 20), rect) pg.display.flip() clock.tick(30) if __name__ == ‘__main__’: pg.init() main() pg.quit() sys.exit()