Ограничительная коробка Pygame Resisable для игрока - PullRequest
1 голос
/ 31 марта 2020

В настоящее время я пытаюсь воссоздать систему боя UNDERTALE в pygame, и мне нужно знать, как получить изменяемый размер бокса, в который попадает игрок. Я открыт для любых методов достижения этого, предпочтительно с классом для объект игрока (только маленький квадрат прямо сейчас), но он должен быть изменяемого размера и подвижным. Мне просто нужна пустая коробка, где игрок не может пройти через внутренний край. Спасибо!

1 Ответ

1 голос
/ 05 апреля 2020

Я знаю, что это старо, но здесь вы go

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 = ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...