2017-08-13 215 views
2

如何设置pygame的边界不会让矩形(可以说是方形)离开屏幕?
我访问过其他网站,但没有什么对我有用。
方框将移动left (a) , right (d) , up (w) , down (s)
我的代码:如何在pygame中设置边界?

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() 

回答

1

在下面的代码,边界是屏幕的宽度和高度,所以你最好从一开始就定义它们。

来处理这一点的方法是为了防止xy坐标从去下面0和宽度为xy的高度之上,而不会忘记减去框的大小。

我建议一个小游戏的改进使用的助力器,而不是按其他键,它能够更好地使用修改像转变控制。 以下代码使用左移加快移动速度。

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() 
+0

哇,它的工作,谢谢。 –

+0

你的回答比我想象的要好得多。 :),我试图从[蛇游戏](https://pygame.org/project/818)获得帮助_(设置边界)_。 –

+0

我可以在箱子里写东西吗?如果是,那么如何? –