问题描述
我正在 pygame 中开发一个游戏,我想创建一个子弹,它可以根据其 pygame vector 的角度旋转它的图像。最初我想用将添加到它的位置的向量来做它,该向量在其启动时计算,使子弹行进到屏幕上的鼠标。但是我意识到从向量中获取角度的唯一内置方法是使用 pygame.Vector2.angle_to()
方法。
我决定只在子弹初始化之前创建角度,然后通过它,然后使用 pygame.transform.rotate(bulletimage,-angle)
(我根据玩家在屏幕上的位置和鼠标点击位置计算)来实现这一点。但是,当我这样做时,角度似乎不起作用并且到处都是。我将包括关于着火会发生什么以及子弹如何开始的代码。我检查了进入的变量,但我无法让它产生一个好的角度;它返回了一个相对较低的角度,始终处于关闭状态。
我的问题只是是否有办法让子弹图像通过其运动向量或玩家相对向量旋转,或者我是否需要找到另一种方法来做到这一点。
Gun checkFire 脚本:
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,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
子弹的定向运动是完美的,只是角度的推导不好。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)