Pygame clamp_ip() 没有将我的矩形保留在屏幕上
Pygame clamp_ip() is not keeping my rectangle on screen
我一直在尝试在 pygame 中制作一个可以根据玩家命令旋转然后根据该角度向前/向后移动的矩形。我一直在尝试使用 clamp_ip() 将这个矩形包含在我的屏幕内,但是,该矩形仍然可以自由移动。这是我的代码。
import pygame
import random
import math
def main():
pygame.init()
screen_width = 1000
screen_height = 500
screen = pygame.display.set_mode((screen_width, screen_height))
screen_rect = screen.get_rect()
clock = pygame.time.Clock()
white = (255, 255, 255)
black = (0, 0, 0)
tank_width = 50
tank_height = 100
x1 = 0
y1 = 0
angle = 0
dt = 0
game = True
surface = pygame.Surface((tank_width, tank_height))
surface.set_colorkey((white))
surface.fill((white))
rect = surface.get_rect(center=(screen_rect.center))
tank = pygame.draw.rect(
surface, pygame.Color(black), (0, 0, tank_width, tank_height)
)
while game == True:
events = pygame.event.get()
for e in events:
if e.type == pygame.QUIT:
game = False
pressed = pygame.key.get_pressed()
if pressed[pygame.K_RIGHT]:
angle -= 1
if pressed[pygame.K_LEFT]:
angle += 1
if pressed[pygame.K_UP]:
x1 = x1 - (5 * math.sin(angle * (math.pi / 180)))
y1 = y1 - (5 * math.cos(angle * (math.pi / 180)))
if pressed[pygame.K_DOWN]:
x1 = x1 + (5 * math.sin(angle * (math.pi / 180)))
y1 = y1 + (5 * math.cos(angle * (math.pi / 180)))
rotated = pygame.transform.rotate(surface, angle)
rect = rotated.get_rect(center=rect.center)
rect.clamp_ip(screen_rect)
screen.fill(pygame.Color(white))
screen.blit(rotated, (x1, y1))
pygame.display.update()
dt = clock.tick(60)
if __name__ == "__main__":
main()
谢谢
你夹rect
,但你画x1
,y1
。使用 x1
和 y1
更新 rect
并使用 rect
绘图:
while game == True:
# [...]
rect = surface.get_rect(topleft = (x1, y1)) # <---
rotated = pygame.transform.rotate(surface, angle)
rect = rotated.get_rect(center=rect.center)
rect.clamp_ip(screen_rect)
screen.fill(pygame.Color(white))
screen.blit(rotated, rect) # <---
pygame.display.update()
我一直在尝试在 pygame 中制作一个可以根据玩家命令旋转然后根据该角度向前/向后移动的矩形。我一直在尝试使用 clamp_ip() 将这个矩形包含在我的屏幕内,但是,该矩形仍然可以自由移动。这是我的代码。
import pygame
import random
import math
def main():
pygame.init()
screen_width = 1000
screen_height = 500
screen = pygame.display.set_mode((screen_width, screen_height))
screen_rect = screen.get_rect()
clock = pygame.time.Clock()
white = (255, 255, 255)
black = (0, 0, 0)
tank_width = 50
tank_height = 100
x1 = 0
y1 = 0
angle = 0
dt = 0
game = True
surface = pygame.Surface((tank_width, tank_height))
surface.set_colorkey((white))
surface.fill((white))
rect = surface.get_rect(center=(screen_rect.center))
tank = pygame.draw.rect(
surface, pygame.Color(black), (0, 0, tank_width, tank_height)
)
while game == True:
events = pygame.event.get()
for e in events:
if e.type == pygame.QUIT:
game = False
pressed = pygame.key.get_pressed()
if pressed[pygame.K_RIGHT]:
angle -= 1
if pressed[pygame.K_LEFT]:
angle += 1
if pressed[pygame.K_UP]:
x1 = x1 - (5 * math.sin(angle * (math.pi / 180)))
y1 = y1 - (5 * math.cos(angle * (math.pi / 180)))
if pressed[pygame.K_DOWN]:
x1 = x1 + (5 * math.sin(angle * (math.pi / 180)))
y1 = y1 + (5 * math.cos(angle * (math.pi / 180)))
rotated = pygame.transform.rotate(surface, angle)
rect = rotated.get_rect(center=rect.center)
rect.clamp_ip(screen_rect)
screen.fill(pygame.Color(white))
screen.blit(rotated, (x1, y1))
pygame.display.update()
dt = clock.tick(60)
if __name__ == "__main__":
main()
谢谢
你夹rect
,但你画x1
,y1
。使用 x1
和 y1
更新 rect
并使用 rect
绘图:
while game == True:
# [...]
rect = surface.get_rect(topleft = (x1, y1)) # <---
rotated = pygame.transform.rotate(surface, angle)
rect = rotated.get_rect(center=rect.center)
rect.clamp_ip(screen_rect)
screen.fill(pygame.Color(white))
screen.blit(rotated, rect) # <---
pygame.display.update()