Pygame 旋转矩形问题
Pygame rotated rect problems
我有一个关于旋转矩形碰撞的问题。
这是我的车class:
class Car:
def __init__(self,x,y):
self.x = x
self.y = y
self.default_image = pygame.image.load("car.png")
self.image = self.default_image
self.w = self.image.get_size()[0]
self.h = self.image.get_size()[1]
self.right_image = pygame.transform.rotate(self.default_image, -10)
self.left_image = pygame.transform.rotate(self.default_image, 10)
self.rot = 0
def render(self):
screen.blit(self.image,self.getRect())
def getRect(self):
return self.default_image.get_rect(center=(self.x,self.y))
def getMask(self):
return Polygon(calculate(self.getRect(),self.rot))
def right(self):
self.rot = -10
self.image = self.right_image
def left(self):
self.rot = 10
self.image = self.left_image
def default(self):
self.rot = 0
self.image = self.default_image
def drawHitbox(self):
pygame.draw.lines(screen,(242, 236, 12),True,calculate(self.getRect(),self.rot),1)
这是我的 'calculate' 函数:
def calculate(irect,angle):
pivot = math.Vector2(irect[0],irect[1])
p0 = (math.Vector2(irect.topleft) - pivot).rotate(-angle) + pivot
p1= (math.Vector2(irect.topright) - pivot).rotate(-angle) + pivot
p2 = (math.Vector2(irect.bottomright) - pivot).rotate(-angle) + pivot
p3 = (math.Vector2(irect.bottomleft) - pivot).rotate(-angle) + pivot
return [p0,p1,p2,p3]
这是我检查 collison 的代码:
for i in vehicles:
i.render()
if i.getMask().intersects(car.getMask()):
death = True
我做了一个函数来绘制汽车的碰撞箱。但是当汽车的角度不为0时,汽车和碰撞箱是不同的。
我正在使用匀称的多边形来制作旋转的矩形。
我的英语不是很好,我尽量告诉你。
图像围绕其中心旋转。您还需要围绕其中心旋转矩形因此,轴心点需要是矩形的中心,而不是其左上角:
pivot = math.Vector2(irect[0],irect[1])
pivot = math.Vector2(irect.center)
calculate
函数:
def calculate(irect,angle):
pivot = math.Vector2(irect.center)
p0 = (math.Vector2(irect.topleft) - pivot).rotate(-angle) + pivot
p1= (math.Vector2(irect.topright) - pivot).rotate(-angle) + pivot
p2 = (math.Vector2(irect.bottomright) - pivot).rotate(-angle) + pivot
p3 = (math.Vector2(irect.bottomleft) - pivot).rotate(-angle) + pivot
return [p0,p1,p2,p3]
我有一个关于旋转矩形碰撞的问题。
这是我的车class:
class Car:
def __init__(self,x,y):
self.x = x
self.y = y
self.default_image = pygame.image.load("car.png")
self.image = self.default_image
self.w = self.image.get_size()[0]
self.h = self.image.get_size()[1]
self.right_image = pygame.transform.rotate(self.default_image, -10)
self.left_image = pygame.transform.rotate(self.default_image, 10)
self.rot = 0
def render(self):
screen.blit(self.image,self.getRect())
def getRect(self):
return self.default_image.get_rect(center=(self.x,self.y))
def getMask(self):
return Polygon(calculate(self.getRect(),self.rot))
def right(self):
self.rot = -10
self.image = self.right_image
def left(self):
self.rot = 10
self.image = self.left_image
def default(self):
self.rot = 0
self.image = self.default_image
def drawHitbox(self):
pygame.draw.lines(screen,(242, 236, 12),True,calculate(self.getRect(),self.rot),1)
这是我的 'calculate' 函数:
def calculate(irect,angle):
pivot = math.Vector2(irect[0],irect[1])
p0 = (math.Vector2(irect.topleft) - pivot).rotate(-angle) + pivot
p1= (math.Vector2(irect.topright) - pivot).rotate(-angle) + pivot
p2 = (math.Vector2(irect.bottomright) - pivot).rotate(-angle) + pivot
p3 = (math.Vector2(irect.bottomleft) - pivot).rotate(-angle) + pivot
return [p0,p1,p2,p3]
这是我检查 collison 的代码:
for i in vehicles:
i.render()
if i.getMask().intersects(car.getMask()):
death = True
我做了一个函数来绘制汽车的碰撞箱。但是当汽车的角度不为0时,汽车和碰撞箱是不同的。
我正在使用匀称的多边形来制作旋转的矩形。
我的英语不是很好,我尽量告诉你。
图像围绕其中心旋转。您还需要围绕其中心旋转矩形因此,轴心点需要是矩形的中心,而不是其左上角:
pivot = math.Vector2(irect[0],irect[1])
pivot = math.Vector2(irect.center)
calculate
函数:
def calculate(irect,angle):
pivot = math.Vector2(irect.center)
p0 = (math.Vector2(irect.topleft) - pivot).rotate(-angle) + pivot
p1= (math.Vector2(irect.topright) - pivot).rotate(-angle) + pivot
p2 = (math.Vector2(irect.bottomright) - pivot).rotate(-angle) + pivot
p3 = (math.Vector2(irect.bottomleft) - pivot).rotate(-angle) + pivot
return [p0,p1,p2,p3]