Pygame、Python 3 中的对角精灵运动
Diagonal Sprite Movement in Pygame, Python 3
我目前正在使用 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_speed
到 8
,导致子弹最终穿过点 (98, 112)
。但是,如果bullet_speed是5
,那么子弹会穿过点(99, 132)
。
在 pygame 中有什么办法可以解决这个问题吗?
在此先感谢您的帮助!
我对 Pygame 了解不多,但您是否考虑过将您的位置存储为非整数值,只在显示时转换为整数?内部表示可能比显示给用户的更精确。
我目前正在使用 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_speed
到 8
,导致子弹最终穿过点 (98, 112)
。但是,如果bullet_speed是5
,那么子弹会穿过点(99, 132)
。
在 pygame 中有什么办法可以解决这个问题吗?
在此先感谢您的帮助!
我对 Pygame 了解不多,但您是否考虑过将您的位置存储为非整数值,只在显示时转换为整数?内部表示可能比显示给用户的更精确。