对象坐标莫名其妙地陷入0

时间:2015-03-03 11:40:08

标签: python pygame

我在pygame中进行了一次小小的shmup,当敌人被击败时,他们很少有机会在死敌的位置产生一个“buff”物体,然后在随机方向慢慢漂浮。我遇到的问题是当对象在x或y轴上的坐标= 0时,对象将停止在该平面上移动。换句话说,它骑在屏幕的左边缘和顶边缘。但是,如果x或y坐标跳过0并且例如为-1,则它继续在正确的轨迹上。

以下是相关课程:

class Buff(pygame.sprite.Sprite):
    def __init__(self,name,origin): ###origin is simply the dead enemy's rect coords
        pygame.sprite.Sprite.__init__(self)
        self.name = name
        if name == "shield":
            self.images = [pygame.image.load("p_1.png").convert_alpha(),pygame.image.load("p_2.png").convert_alpha()]
        elif name == "health":
            self.images = [pygame.image.load("m_1.png").convert_alpha(),pygame.image.load("m_2.png").convert_alpha()]
            self.sound = pygame.mixer.Sound("healed.wav")
    self.image = self.images[0]
    self.rect = self.image.get_rect()
    self.rect.x = origin[0]
    self.rect.y = origin[1]
    self.index = 0
    self.anim = 0
    self.angle = random.randrange(0,360) #### direction is set to a random degree
    self.rads = math.radians(self.angle) #### converted to radians for funtionality
    def Barrier(self,): #### Cleanup
        if self.rect.x > DISPLAY[0]: #### DISPLAY is a tuple holding the screen size value (x,y)
            return True
        if self.rect.x < 0-self.rect[2]:
            return True
        if self.rect.y > DISPLAY[1]:
            return True
        if self.rect.y < 0-self.rect[3]:
            return True
        return False
    def update(self,): ####This update function is run every gameloop iteration
        if self.Barrier():
            buffs.remove(self)
        self.anim+=1
        if self.anim > 30:
            self.anim = 0
            self.index+=1
            if self.index > 1:
                self.index = 0
            self.image = self.images[self.index]
###### BELOW IS RELEVANT MOVEMENT CODE #######
        self.rect.x+=math.cos(self.rads)*1.2 
        self.rect.y+=math.sin(self.rads)*1.2

没有外部代码操纵对象的坐标,任何更改都由包含的更新功能处理。我只是不明白为什么一个特定的坐标(在这种情况下为0)可以否定加法。

0 个答案:

没有答案