问题如下:
我在我的RPG游戏中使用pygame。 我有一个响应向左,向右,向上,向下并相应地移动坐标的玩家(即0,0 - > 1,0 - > 2,0 - > 3,0 - > 2,0)
每次我向左或向右按下指定的移动按钮时,我都可以启动计数器。
问题是我的玩家在按住时可以移动ie。左键。 这是注册为"永久"释放前的动作。
每次按下按钮1,计数器都会亮起。 现在我想要o计算运动而不需要计算每次按下,因为玩家可以在不释放的情况下移动整个地图,这只算一步。
count = 0
while True:
for e in pygame.event.get():
if e.type == KEYDOWN and e.key == K_UP:
player.changespeed(0, -3)
if e.type == KEYDOWN and e.key == K_DOWN:
player.changespeed(0, 3)
if e.type == KEYDOWN and e.key == K_RIGHT:
player.changespeed(3, 0)
if e.type == KEYDOWN and e.key == K_LEFT:
player.changespeed(-3, 0)
if e.type == KEYDOWN and e.key == K_i:
player_menu = Player_menu()
if e.type == KEYUP and e.key == K_UP:
player.changespeed(0, 3)
count += 1
if e.type == KEYUP and e.key == K_DOWN:
player.changespeed(0, -3)
count += 1
if e.type == KEYUP and e.key == K_RIGHT:
player.changespeed(-3, 0)
count += 1
if e.type == KEYUP and e.key == K_LEFT:
player.changespeed(3, 0)
count += 1
我如何定义,只要X改变了玩家,步骤以相同的速率增加1,如果没有对玩家进行任何更改,则不会计算步数?
答案 0 :(得分:0)
每当玩家的x或y速度为!= 0时,玩家正在移动,因此我们可以在主循环中将每个帧的count
变量递增1。 (我已经将玩家的速度提高到25,因此更容易看到一步。)
import sys
import pygame as pg
pg.init()
screen = pg.display.set_mode((640, 480))
FONT = pg.font.Font(None, 32)
class Player(pg.sprite.Sprite):
def __init__(self, pos, *groups):
super().__init__(*groups)
self.image = pg.Surface((20, 35))
self.image.fill(pg.Color('sienna1'))
self.rect = self.image.get_rect(center=pos)
self.vel_x = 0
self.vel_y = 0
def update(self):
self.rect.x += self.vel_x
self.rect.y += self.vel_y
def changespeed(self, x, y):
self.vel_x = x
self.vel_y = y
def main():
clock = pg.time.Clock()
sprite_group = pg.sprite.Group()
player = Player((300, 300), sprite_group)
count = 0
done = False
while not done:
for e in pg.event.get():
if e.type == pg.QUIT:
done = True
if e.type == pg.KEYDOWN:
if e.key == pg.K_UP:
player.changespeed(0, -25)
if e.key == pg.K_DOWN:
player.changespeed(0, 25)
if e.key == pg.K_RIGHT:
player.changespeed(25, 0)
if e.key == pg.K_LEFT:
player.changespeed(-25, 0)
if e.key == pg.K_i:
player_menu = Player_menu()
if e.type == pg.KEYUP:
player.changespeed(0, 0)
# If the player is moving increment the step count.
# You also need to check whether the player can move
# or is blocked by obstacles.
if player.vel_x != 0 or player.vel_y != 0:
count += 1
sprite_group.update()
screen.fill((85, 81, 66))
sprite_group.draw(screen)
txt_surf = FONT.render(
'Steps: {}'.format(count), True, pg.Color('sienna1'))
screen.blit(txt_surf, (10, 4))
pg.display.flip()
clock.tick(30)
if __name__ == '__main__':
main()
pg.quit()
sys.exit()