我有一个旋转的正方形在屏幕上移动,我的任务是(1)设置边界,使其保持在屏幕内,(2)使用类似的旋转正方形进行碰撞检测。我在第一个问题上需要帮助
顺便告诉我的老师(如果你正在读这篇文章的话),我已经研究这个具体问题6个多小时了,必须求助于其他人的帮助。有些问题可以承受持续思考的冲击,失败不是延迟成功——它只是失败,技能不是99%的努力+1%的天赋——而是相反,等等
注意:很抱歉格式不好。这是我第一次使用堆栈溢出;我在用Y!A以前有过,但是编程部门的人不多
import pygame
import random
pygame.init() # Initialize py-game
screen = pygame.display.set_mode((800, 500)) # Create screen
color = (255, 240, 245)
# Initial Coordinates
objectX, objectY = random.randint(100, 700), random.randint(100, 400)
fps = pygame.time.Clock()
velocity = [8, 6] # speed
velocity2 = [6, 8]
size = 0 # size
drag = False
# Rotating the object
sat_orig = pygame.Surface((70, 70))
sat_orig.set_colorkey((0, 0, 0))
sat_orig.fill(color)
sat = sat_orig.copy()
sat.set_colorkey((0, 0, 0))
rect = sat.get_rect()
rect.center = (800 // 2, 500 // 2)
rotation = 0
rotation_speed = 2
# --------------------------------------------------------------------------
running = True
while running: # Game Loop
screen.fill((0, 0, 0))
pygame.display.set_caption('Collision Interactions ' + str(pygame.mouse.get_pos())) # caption
# exit button
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONUP:
if event.button == 1:
drag = False
rotation_speed = 2
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
drag = True
rotation_speed = 0
size = 70
old_center = rect.center
rotation = (rotation + rotation_speed) % 360
new_image = pygame.transform.rotate(sat_orig, rotation)
rect = new_image.get_rect()
rect.center = old_center
screen.blit(new_image, (objectX, objectY))
objectArea = rect
############
# Movement #
############
if drag: # Manual
if objectArea.collidepoint(event.pos):
objectX, objectY = pygame.mouse.get_pos()
objectX -= size // 2
objectY -= size // 2
else: # Automatic
objectX += velocity[0]
objectY += velocity[1]
##############
# Boundaries #
##############
if objectX + size > 800 or objectX + size < 0:
velocity[0] = -velocity[0]
if objectY + size > 500 or objectY + size < 0:
velocity[1] = -velocity[1]
fps.tick(80)
pygame.display.update() # Displays updates
旋转矩形的轴对齐宽度和高度大于原始重新调整矩形的大小。 旋转矩形的边界存储在
objectArea
中。使用旋转的矩形进行碰撞测试:注意,由于矩形的移动大于1,因此可能会稍微超出边界。要防止矩形调整到边界,请执行以下操作:
我建议在主应用程序循环的末尾绘制矩形(和整个)场景。因此,矩形的当前位置是可视化的,而不是移动前的位置:
完整示例:
对于两个旋转矩形的碰撞,我建议使用^{} 对象和^{} 或^{} 和^{}
进一步参见:
Collision between masks in pygame
How can I made a collision mask?
Pygame mask collision
相关问题 更多 >
编程相关推荐