2017-08-13 111 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

我可以在箱子裏寫東西嗎?如果是,那麼如何? –