精灵不会朝着它面向的方向移动

时间:2017-11-24 00:19:19

标签: python python-3.x pygame

我有一个问题,我的精灵没有朝着它面向的方向移动。它是甲虫的顶视图,10个图像动画其腿部动作。精灵动画工作正常,通过旋转图像选择新的“随机”方向,并重新定位到前一个中心也正常工作。

我无法工作的精灵是向前移动的精灵,即每隔一秒左右选择/面对的新方向。新方向只是从先前位置向左或向右旋转10-15度。相反,每当精灵选择一个新的方向时,它就会以随机运动的方式移动。例如,它将面向东方时向西南方向移动,或者朝向南方时向北移动等。

我怀疑问题出在move()方法中,其中移动未通过trig值正确转换。我正在添加到rect.x值,因为它与rectesy值相同,因为它与pyckame相比,与笛卡尔值相反。下降正在增加,上升 - 下降y值,负增长。

甲虫精灵的类别如下:

class Foe():
    def __init__(self, location):
        self.sprites = []
        for i in range(1, 11):
            file = pg.image.load("beetleprac1/000"+str(i)+"a.png").convert()  # 10 sprite files named "0001a-10a.png" last 1 is idle stance
            #file.set_colorkey((0, 255, 255))
            self.sprites.append(file)
        self.move_anim_index = 9
        self.image = self.sprites[self.move_anim_index]
        self.rotated_image = self.image.copy()
        self.rect = self.image.get_rect(center=location)
        self.move_rect_coords = [self.rect.x, self.rect.y]
        self.angle = 90
        self.speed = 3
        self.time = 0
        self.frames_counter = 0


    def move_anim(self, rate=2): # rate is in frames
        if self.frames_counter % rate == 0:
            self.move_anim_index += 1
            if self.move_anim_index >= 9:
                self.move_anim_index = 0
            self.image = self.sprites[self.move_anim_index]
            #self.rect = self.image.get_rect(center=self.rect.center)
            self.rotated_image = self.image.copy()
            self.rotated_image = pg.transform.rotate(self.image, self.angle - 90)
            self.rect = self.rotated_image.get_rect(center=self.rect.center)


    def move(self, last_tick):
        self.move_anim()   
        self.rect.x += int(self.speed * math.cos(self.angle)) 
        self.rect.y -= int(self.speed * math.sin(self.angle))
        self.move_rect_coords = [self.rect.x, self.rect.y]


    def change_direction(self, change_time): # change_time in frames
        if self.frames_counter % change_time == 0: 
            a = random.choice([-1, 1])
            self.angle += 15
            if self.angle < 0: self.angle += 360
            if self.angle > 360: self.angle -=360

        #if self.rect.x <  



    def track_time(self, last_tick, amount):
        self.time += last_tick
        self.frames_counter += 1
        if self.time >= last_tick * amount:
            self.time = 0
            self.counter = 0


    def think(self, last_tick):
        self.track_time(last_tick, FPS*2)
        self.change_direction(FPS)


    def update(self, last_tick, screen_rect):
        self.think(last_tick)
        self.move(last_tick)


    def draw(self, screen):
        screen.blit(self.rotated_image, self.move_rect_coords)

这是github上的完整代码和存储库:https://github.com/fn88/buganimprac2

1 个答案:

答案 0 :(得分:1)

sin()cos()和其他三角函数使用radians - &gt; cos(math.radians(angle))