我试图用一个名为“python”的库(v1.9.2)制作一个游戏,我已经为玩家制作了一个角色这个字符应该“射击”“子弹”或“咒语”到Pygame的点,我需要帮助的是,“子弹”有一个恒定的速度分配给1mouse_pos,如果我试图提高速度,当子弹到达鼠标位置时,它将导致闪烁效果,因为self.pos将高于或低于鼠标位置。
我怎样才能使这个子弹像子弹一样快速平滑,并且仍然到达鼠标位置的精确位置?
self.speed=1的示例
self.speed=2的示例
http://4.1m.yt/d_TmNNq.gif
相关代码在update()函数中
sprites.py(拼写/子弹类)

class Spell(pygame.sprite.Sprite):
    def __init__(self,game,x,y,spelltype,mouse_pos):
        pygame.sprite.Sprite.__init__(self)
        self.game = game
        self.width = TILESIZE
        self.height = TILESIZE
        self.type = spelltype
        self.effects = [
                'effect_'+self.type+'_00',
                'effect_'+self.type+'_01',
                'effect_'+self.type+'_02'
        ]
        self.image = pygame.image.load(path.join(IMG_DIR,"attack/attack_"+self.type+".png")).convert_alpha()
        self.image = pygame.transform.scale(self.image,(self.width,self.height))
        self.rect = self.image.get_rect()
        self.rect.x = x+self.width
        self.rect.y = y+self.height
        self.speed = 1
        self.mouse_pos = mouse_pos
        self.idx = 0

    def update(self):
        if not self.rect.collidepoint(self.mouse_pos):
            if self.mouse_pos[0] < self.rect.x:
                self.rect.x -= self.speed
            elif self.mouse_pos[0] > self.rect.x:
                self.rect.x += self.speed

            if self.mouse_pos[1] < self.rect.y:
                self.rect.y -= self.speed
            elif self.mouse_pos[1] > self.rect.y:
                self.rect.y += self.speed
        else:
            self.image = pygame.image.load(path.join(IMG_DIR,"effects/"+self.effects[self.idx]+".png"))
            self.idx += 1
            if self.idx >= len(self.effects):
                self.kill()

最佳答案

如果你的子弹跑得太快以至于穿过目标,你可能想测试子弹当前点和最后一点之间的线是否与你的目标相交。
更多详情请点击:https://gamedev.stackexchange.com/questions/18604/how-do-i-handle-collision-detection-so-fast-objects-are-not-allowed-to-pass-thro

关于python - Pygame从A点到B点的子弹运动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43951409/

10-12 23:15