gpt4 book ai didi

python - Sprite 没有朝它所面对的同一方向移动

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:11 27 4
gpt4 key购买 nike

我有一个问题,我的 sprite 没有朝着它所面对的相同方向移动。它是一只甲虫的俯 View ,10 幅动画其腿部运动的图像。 Sprite 动画效果很好,通过旋转图像并重新居中到以前的中心来选择新的“随机”方向也很有效。

我无法开始工作的是“向前”移动的 Sprite ,即每隔一秒左右向它选择/面对的新方向移动。新方向只是从以前的位置向左或向右旋转 10-15 度。取而代之的是,每次 Sprite 选择一个新方向时,它都会以一种看似随机的方式移动。例如面东向西南移动,面南向北移动等。

我怀疑问题出在 move() 方法中,其中运动未通过触发值正确转换。我添加到 rect.x 值,因为它与笛卡尔坐标系统相同,同时从 rect.y 值中减去,因为它在 pygame 中与笛卡尔坐标系相比是倒置的。向下是正向增加,向上 - 减小 y 值,负向增加。

甲虫 Sprite 类如下:

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

最佳答案

sin(), cos() 等三角函数使用radians -> cos(math.radians(angle) )

关于python - Sprite 没有朝它所面对的同一方向移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47464814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com