我在pygame中制作一个游戏,我想创建一个子弹,它可以根据pygame向量的角度旋转图像。最初我想用向量来做,向量会被添加到它的位置,在子弹启动时计算出来,使子弹移动到屏幕上的鼠标上。然而,我意识到从向量获取角度的唯一内置方法是使用pygame.Vector2.angle_to()
方法
我决定在子弹初始化之前创建一个角度,然后穿过它,然后使用pygame.transform.rotate(bulletImage, -angle)
(我用玩家在屏幕上的位置和鼠标点击的位置来计算)。然而,当我这样做的时候,这个角度似乎不起作用,到处都是。我将包括在火上发生什么以及子弹如何启动的代码。我检查了进入的变量,但是我不能得到一个好的角度;它返回一个相对较低的角度,总是关闭
我的问题是,是否有办法让子弹图像通过其运动矢量或玩家相对矢量旋转,或者我是否需要找到另一种方法来实现这一点
枪战脚本:
def checkFire(self):
for event in self.game.events:
if event.type == pygame.MOUSEBUTTONUP: ## Checks on click release
mPos = pygame.Vector2(pygame.mouse.get_pos()) ## Gets mouse position and stores it in vector. This will be translated into the vector that moves the bullet
pPos = self.game.cam.apply(self.player) ## Gets actual position of player on screen
pPosVec = pygame.Vector2((pPos.x, pPos.y))
angle = pPosVec.angle_to(mPos) ## Gets angle between player vector and mouse vector
mPos.x -= pPos.centerx ## Finds the x and y relativity between the mouse and player and then calculates the offset
mPos.y -= pPos.centery
bullet(self.game, self.rect.center, mPos, angle) ## Inputs values.
self.lastFire = pygame.time.get_ticks()
我在游戏对象中设置了一个摄像头,它将玩家保持在tilemap内,并使其滚动,因此我必须使用该功能来获取玩家的绝对坐标,当测试时,绝对坐标非常好。问题应该在这里的某个地方
子弹脚本
class bullet(pygame.sprite.Sprite):
pos = pygame.Vector2((0,0))
image = pygame.image.load(asset('objects/bullet2.png'))
vel = 20
def __init__(self, game, pos, target, angle, **kwargs):
self.groups = game.sprites, game.bullets, game.layer2
pygame.sprite.Sprite.__init__(self, self.groups)
for k, v in kwargs.items():
self.__dict__[k] = v
print(angle)
self.pos = pygame.Vector2(pos)
self.dir = pygame.Vector2(target).normalize()
self.image = pygame.transform.rotate(self.image, angle)
self.rect = pygame.Rect(0, 0, self.image.get_width(), self.image.get_height())
self.rect.center = self.pos
def update(self):
self.pos += self.dir *self.vel
self.rect.center = self.pos
子弹的方向运动是完美的,只是角度的偏差不好
目前没有回答
相关问题 更多 >
编程相关推荐