Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame可调整大小的玩家边界框_Python_Pygame - Fatal编程技术网

Python Pygame可调整大小的玩家边界框

Python Pygame可调整大小的玩家边界框,python,pygame,Python,Pygame,我目前正在尝试在pygame中重新创建UNDERTALE战斗系统,我需要知道如何获得一个玩家被困在的可调整大小的盒子。我对实现这一点的任何方法都持开放态度,最好是为player对象创建一个类(现在只是一个小正方形),但它需要可调整大小和可移动。我基本上只需要一个空心的盒子,玩家不能通过里面的边缘。谢谢大家! 我知道这很旧,但给你 class HollowBox: def __init__(self,x,y, w,h,t): self.x = x self.

我目前正在尝试在pygame中重新创建UNDERTALE战斗系统,我需要知道如何获得一个玩家被困在的可调整大小的盒子。我对实现这一点的任何方法都持开放态度,最好是为player对象创建一个类(现在只是一个小正方形),但它需要可调整大小和可移动。我基本上只需要一个空心的盒子,玩家不能通过里面的边缘。谢谢大家!

我知道这很旧,但给你

class HollowBox:
    def __init__(self,x,y, w,h,t):
        self.x = x
        self.y = y
        self.w = w
        self.h = h
        self.t = t
        self.Update()

    def Update(self,x = None, y = None, w = None, h = None, t = None):
        self.x = x if x != None else self.x
        self.y = y if y != None else self.y
        self.w = w if w != None else self.w
        self.h = h if h != None else self.h
        self.t = t if t != None else self.t
        self.rect_left = pygame.Rect(self.x,self.y,self.t,self.h)
        self.rect_right = pygame.Rect(self.x + self.w - self.t,self.y,self.t,self.h)
        self.rect_up = pygame.Rect(self.x,self.y,self.w,self.t)
        self.rect_down = pygame.Rect(self.x,self.y + self.h - self.t,self.w,self.t)   

    def Draw(self):
        pygame.draw.rect(screen,(255,0,0),self.rect_left)
        pygame.draw.rect(screen,(255,0,0),self.rect_right)
        pygame.draw.rect(screen,(255,0,0),self.rect_up)
        pygame.draw.rect(screen,(255,0,0),self.rect_down)
在我的程序中,我做得很快

import pygame
from pygame.locals import *
import time


class HollowBox:
    def __init__(self,x,y, w,h,t):
        self.x = x
        self.y = y
        self.w = w
        self.h = h
        self.t = t
        self.Update()

    def Update(self,x = None, y = None, w = None, h = None, t = None):
        self.x = x if x != None else self.x
        self.y = y if y != None else self.y
        self.w = w if w != None else self.w
        self.h = h if h != None else self.h
        self.t = t if t != None else self.t
        self.rect_left = pygame.Rect(self.x,self.y,self.t,self.h)
        self.rect_right = pygame.Rect(self.x + self.w - self.t,self.y,self.t,self.h)
        self.rect_up = pygame.Rect(self.x,self.y,self.w,self.t)
        self.rect_down = pygame.Rect(self.x,self.y + self.h - self.t,self.w,self.t)   

    def Draw(self):
        pygame.draw.rect(screen,(255,0,0),self.rect_left)
        pygame.draw.rect(screen,(255,0,0),self.rect_right)
        pygame.draw.rect(screen,(255,0,0),self.rect_up)
        pygame.draw.rect(screen,(255,0,0),self.rect_down)

class Player:
    def __init__(self,x,y):
        self.rect = pygame.Rect(x,y,20,20)

    def Draw(self):
        pygame.draw.rect(screen,(0,255,0),self.rect)


screen = pygame.display.set_mode((500,500))

player = Player(100,100)
key = ""
clock = pygame.time.Clock()
box = HollowBox(0,0,500,500,5)
thickness = 5
start = time.time()


running = True
while running:

    screen.fill((255,255,255))
    player.Draw()
    box.Draw()
    pygame.display.update()  
    clock.tick(60)

    if time.time() - start > 0.2:
        thickness += 1
        box.Update(t = thickness)
        start = time.time()

    if key == "a":
        player.rect.x -= 3
    if key == "d":
        player.rect.x += 3

    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            running = False
            pygame.quit()
            break
        if e.type == KEYDOWN:
            key = e.unicode
        if e.type == KEYUP:
            key = ""