Pygame中的对角线精灵运动,Python 3

时间:2016-07-22 20:31:56

标签: python python-3.x pygame sprite pygame-surface

我目前正在使用Pygame制作游戏,Python 3和其中的一个错误就是它们的移动方式。该游戏是2D自上而下的射击游戏,玩家射击机制的代码如下:

player_rect是播放器的Rect,bullet_speed是预定义的int

if pygame.mouse.get_pressed()[0]:
    dx = mouse_pos[0]-player_rect.centerx
    dy = mouse_pos[1]-player_rect.centery
    x_speed = bullet_speed/(math.sqrt(1+((dy**2)/(dx**2))))
    y_speed = bullet_speed/(math.sqrt(1+((dx**2)/(dy**2))))
    if dx < 0:
        x_speed *= -1
    if dy < 0:
        y_speed *= -1
    #surface, rect, x-speed, y-speed
    player_shots.append([player_shot_image, player_shot_image.get_rect(centerx=player_rect.centerx, centery=player_rect.centery), x_speed, y_speed])

稍后在循环中,有这部分代码:

for player_shot_counter in range(len(player_shots)):
    player_shots[player_shot_counter][1][0] += player_shots[player_shot_counter][2]
    player_shots[player_shot_counter][1][1] += player_shots[player_shot_counter][3]

除了一个主要错误之外,这个机制大多数工作都很好:镜头越慢,pygame.Rect[0]pygame.Rect[1]只能是整数值的准确度越低。例如,如果player_rect.center(0, 0),则鼠标的位置为(100, 115),bullet_speed为10,则x_speed将自动舍入为7 }和y_speed8,导致子弹最终通过点(98, 112)。但是,如果bullet_speed为5,则项目符号将通过(99, 132)点。

有没有办法在pygame中解决这个问题?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我不太了解Pygame,但您是否想过将您的位置存储为非整数值,只转换为显示的整数?内部表示可以比向用户显示的内容更精确。