我有一个问题,我的精灵没有朝着它面向的方向移动。它是甲虫的顶视图,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
答案 0 :(得分:1)
sin()
,cos()
和其他三角函数使用radians
- &gt; cos(math.radians(angle))