以前很少有人帮助我解决此问题,但旋转仍然混乱,我的大炮不会向玩家旋转,他们都错位了。我真的很需要此问题的帮助,这是我第一次尝试使物体向玩家旋转。我试图使我的大炮嘴向玩家旋转,但是旋转变得一团糟,我不知道该如何解决。
class enemyshoot:
def __init__(self,x,y,height,width,color):
# [...............]
self.look_at_pos = (x,y)
def draw(self):
# [............]
self.rect = self.shootsright.get_rect(topleft = (self.x, self.y))
dx = self.look_at_pos[0] - self.rect.centerx
dy = self.look_at_pos[1] - self.rect.centery
angle = (180/math.pi) * math.atan2(-dx, dy)
(window.blit(self.image, self.rect))
self.image = pygame.transform.rotate(self.shootsright, angle)
self.rect = self.image.get_rect(center = self.rect.center)
def lookAt( self, coordinate ):
self.look_at_pos = coordinate
我完整的敌人射击课程
shotsright = pygame.image.load("canss.png")
class enemyshoot:
def __init__(self,x,y,height,width,color):
self.x = x
self.y =y
self.height = height
self.width = width
self.color = color
self.health = 10
self.hitbox = (self.x + -20, self.y + 30, 31, 57)
#-------------------------------------------------------
# Make a Reference Copy of the bitmap for later rotation
self.shootsright = pygame.image.load("canss.png")
self.shootsright = pygame.transform.scale(self.shootsright,(self.shootsright.get_width()-150,self.shootsright.get_height()-150))
self.image = self.shootsright
self.rect = self.image.get_rect()
self.position = pygame.math.Vector2( (x, y) )
self.isLookingAtPlayer = False
self.look_at_pos = (x,y)
def draw(self):
self.rect.topleft = (self.x,self.y)
window.blit(self.image, self.rect)
self.rect = self.shootsright.get_rect(topleft = (self.x, self.y))
dx = self.look_at_pos[0] - self.rect.centerx
dy = self.look_at_pos[1] - self.rect.centery
angle = (180/math.pi) * math.atan2(-dy, dx)
self.image = pygame.transform.rotate(self.shootsright, angle)
self.rect = self.image.get_rect(center = self.rect.center)
# ------------
self.hits = (self.x + 20, self.y, 28,60)
pygame.draw.rect(window, (255,0,0), (self.hitbox[0], self.hitbox[1] - 60, 100, 10)) # NEW
pygame.draw.rect(window, (0,255,0), (self.hitbox[0], self.hitbox[1] - 60, 100 - (5 * (10 - self.health)), 10))
self.hitbox = (self.x + 200, self.y + 200, 51, 65)
def lookAt( self, coordinate ):
self.look_at_pos = coordinate
black = (0,0,0)
enemyshooting = []
platformGroup = pygame.sprite.Group
platformList = []
level = [" p p p p p ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",]
for iy, row in enumerate(level):
for ix, col in enumerate(row):
if col == "p":
new_platforms = enemyshoot(ix*10, iy*50, 10,10,(255,255,255))
enemyshooting.append(new_platforms)
无论大炮在哪里,这都是大炮向玩家旋转的地方
for enemyshoot in enemyshooting:
if not enemyshoot.isLookingAtPlayer:
enemyshoot.lookAt((playerman.x, playerman.y))
首先,加农炮的图像太高了。剪裁边框并使用较小的图像。例如:
图像的中心是佳能的旋转点。您可以将图像缩放到所需的任何大小。例如100x100:
self.shootsright = pygame.image.load("canss.png")
self.shootsright = pygame.transform.smoothscale(self.shootsright, (100, 100))
另请参阅如何将图像(播放器)旋转到鼠标方向?。
无论如何,在旋转图像并计算矩形后,您必须将大炮 变灰 。
class enemyshoot:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
# [...]
self.shootsright = pygame.image.load("canss.png")
self.shootsright = pygame.transform.smoothscale(self.shootsright, (100, 100))
self.image = self.shootsright
self.rect = self.image.get_rect(center = (self.x, self.y))
self.look_at_pos = (self.x, self.y)
self.hitbox = (*self.rect.topleft, *self.rect.size)
def draw(self):
dx = self.look_at_pos[0] - self.x
dy = self.look_at_pos[1] - self.y
angle = (180/math.pi) * math.atan2(dx, dy)
self.image = pygame.transform.rotate(self.shootsright, angle)
self.rect = self.image.get_rect(center = (self.x, self.y))
window.blit(self.image, self.rect)
self.hitbox = (*self.rect.topleft, *self.rect.size)
def lookAt( self, coordinate ):
self.look_at_pos = coordinate
最小示例: [![](https://i.stack.imgur.com/5jD0C.png) repl.it/@Rabbid76/PyGame- RotateWithMouse](https://repl.it/@Rabbid76/PyGame-RotateWithMouse#main.py)
我的剧本有问题,我要我的敌人跟着并向玩家旋转。当他四处走动的时候。这似乎很有效,但是当我的玩家在y上旋转180时,我的敌人似乎会回去很多(他的位置),只有当我的玩家回到他的正常旋转时,敌人才会回来。我到底做错了什么?
问题内容: 我正在制作一个2D游戏,其中包括一架与飞船通过槽式导弹作战的飞机,我希望飞船根据玩家的位置旋转,以便它们始终以“头部”面对玩家。播放器可以在y和x方向上自由移动。玩家和太空飞船具有一个Vector2 pos变量,该变量对应于它们的实际位置。任何帮助,将不胜感激。 这是我(现在正在工作)的代码: 敌方飞船旋转,但它们并不总是面对玩家: 问题答案: @dwn的答案在数学上是正确的,但是当您
我正在用一艘宇宙飞船做一个游戏,当按下“前进”按钮时,后面会出现一个火的图像。这只在太空船垂直站立时起作用。当它倒转时,它与宇宙飞船的后部没有完全对齐。这是我为其创建的类的更新函数。 我试着将原点设置为火箭的原点,这对我来说似乎是合乎逻辑的,但我认为我不完全理解原点是什么。 [编辑1] 我不认为问题出在原点上,我现在把它设置为 我认为这个问题与我总是将y设置为(火箭弹射出的火的高度是火箭弹高度的一
我刚刚发现,即使省略了参数上的注释,Spring仍然能够绑定它。 有人能指出澄清这种行为的文档吗?我一直认为是绑定工作所必需的。 谢谢
问题内容: 让我们开始考虑两种类型的相机旋转: 摄像机绕点旋转(轨道): 相机旋转目标(FPS) 然后是一个更新函数,其中从眼睛/目标/上摄像机矢量中计算出投影/视图矩阵: 当摄像机的视图方向与上轴平行(在此处为z-up)时,出现这些旋转功能的问题…在那时,摄像机的行为确实令人讨厌,因此我将遇到以下故障: 所以我的问题是,我该如何调整以上代码,使相机完整旋转,而最终结果在某些边缘点上看起来并不奇怪
我正在为我的游戏设计一个区块旋转组件,我遇到了一个我无法理解的小问题。基本上,我希望能够沿所有三个轴旋转网格组件。玩家一次只能旋转一个轴,旋转90度或-90度。我还希望玩家始终根据世界的X、Y和Z轴旋转网格,而不是块的相对轴,它将随着旋转而改变。我如何做到这一点? 无旋转的网格: 网格沿X轴逆时针旋转90度: 这里的问题是,如果我想沿着Y轴旋转块,相反,它将沿着Z轴旋转块,因为块现在被旋转。我如何