我有一堆不同坐标的物体,我需要动画它们移动到另一个坐标 即。 一个对象是coodinate(234,30),我需要它去(310,540)。
我如何在pygame中执行此操作?我试着用斜坡和类似的东西弄乱,但我无法得到我的物体,平稳地去那里。
答案 0 :(得分:2)
好吧,你应该在游戏循环中改变它的坐标。
有两种方法可以做到这一点。
首先,例如,如果您希望对象每秒移动50px,则应在每个帧中发送更新函数标记,然后将对象的x和y坐标更改为x + x_speed * ticks / 1000
(此处,标记为以毫秒为单位,所以你应该将它转换为秒。)
def update_object(ticks):
object.x += float(x_speed) * ticks / 1000 # converting to float is needed
# this is your main game loop
time = pygame.time.Clock()
ticks = 0
while running:
...
update_object(ticks)
ticks = time.tick(30) # this 30 means time.tick() waits enough to make your max framerate 30
请注意,当您将object.x
blitting(或绘制)到曲面时,可能需要将def update_object():
object.x += object_vx
object.y += object.vy
# this is your main game loop
while running:
...
update_object()
转换为int。这样,您的对象每秒都会移动相同的数量。
第二种方法是在每一帧中移动你的对象。这意味着您的对象的速度可能会根据您的帧速率而变化(例如,在拥挤的场景中,您的帧速率可能会下降,这会使您的对象移动得更慢)。
character = pygame.Rect(10, 10, 20, 30)
character_image = pygame.image.load(...)
screen.blit(character_image, character) # screen is you surface
顺便说一句,我忘了提及你的对象实现。我在对象中保存坐标的首选方法是使用pygame.Rect。 pygame.Rect有4个属性,x,y,height和width。有了它,你还可以保持对象的精灵的长度和高度。
例如:
character.x += x_amount
character.y += y_amount
当你想改变角色的坐标时:
{{1}}