如何解决我的投射物改变方向,空中Pygame需要帮助
设计:扔kunais的忍者。
问题:如果将kunai扔到屏幕左侧,她会不断翻转直到离开屏幕并被删除。
CODE(仅是射弹文件或刀):
import pygame
class Projectile(pygame.sprite.Sprite):
def __init__(self,player):
if player.face_direction == "RIGHT":
self.direction="Right"
else:
self.direction="Left"
super().__init__()
self.player=player
self.velocity=4
self.image=pygame.image.load('assets/kunai.png')
self.image=pygame.transform.scale(self.image,(80,50))
self.rect=self.image.get_rect()
self.rect.x=player.rect.x+20
self.rect.y=player.rect.y+50
self.origin_image=self.image
def remove(self):
self.player.all_projectiles.remove(self)
def move(self):
if self.direction=="Right":
self.image=self.origin_image
self.rect.x+=self.velocity
elif self.direction=="Left":
self.image=pygame.transform.flip(self.image,True,False)
self.rect.x-=self.velocity
if self.rect.x>1080 or self.rect.x<-30:
self.remove()
解决方法
您只需要在__init__
中将图像设置为正确的朝向即可。如果您这样做了,move()
方法就不需要在每一帧上做太多的工作。您可以使用弹丸的velocity
做类似的事情,如果需要向左移动,请设置负值,从而大大简化move()
中的逻辑:
class Projectile(pygame.sprite.Sprite):
def __init__(self,player):
super().__init__()
self.player = player
self.image = pygame.image.load('assets/kunai.png')
self.image = pygame.transform.scale(image,(80,50))
self.velocity = 4
self.rect=self.image.get_rect()
self.rect.x=player.rect.x+20 # you might want this to depend on direction
self.rect.y=player.rect.y+50
self.origin_image=self.image # you may not need this
if player.face_direction == "RIGHT":
self.direction = "Right"
else:
self.direction = "Left"
self.image = pygame.transform.flip(self.image,True,False) # do the flip here
self.velocity = -self.velocity # negate the velocity
def move(self):
self.rect.x += self.velocity # now this sum can be unconditional
# and no image manipulation is needed
if self.rect.x > 1080 or self.rect.x < -30:
self.remove()
您可能不再需要direction
属性,因为move
不使用它。对于remove()
,如果要从PyGame Group
而不是列表中删除自己,则可能不需要此方法。 Sprite已经跟踪了它们所在的组,您可以使用继承的kill()
方法自动将自己从所有组中删除。这可能意味着您不再需要引用player
。
这看起来像是问题:
Formatter
您每次循环翻转self.image=pygame.transform.flip(self.image,False)
。您应该在第一次投掷kunai时将其翻转一次。
解决此问题的一种方法是创建单独的图像:普通图像和翻转图像。然后根据方向将self.image
设置为正确的图像。
尝试以下代码:
self.image
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。