栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Pygame中每隔几秒钟移动一个对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Pygame中每隔几秒钟移动一个对象

您可以将

Event
搭配使用
pygame.time.set_timer()

pygame.time.set_timer()
在事件队列上重复创建一个事件

set_timer(eventid, milliseconds) -> None


设置事件类型以每给定的毫秒数出现在事件队列中


这是一个简单的完整示例。请注意敌人如何每1000毫秒向侧面移动一次,每3500毫秒向下移动一次,并且您可以每450毫秒射击一次(全部使用事件进行射击)。


import pygame# you'll be able to shoot every 450msRELOAD_SPEED = 450# the foes move every 1000ms sideways and every 3500ms downMOVE_SIDE = 1000MOVE_DOWN = 3500screen = pygame.display.set_mode((300, 200))clock = pygame.time.Clock()pygame.display.set_caption("Micro Invader")# create a bunch of events move_side_event = pygame.USEREVENT + 1move_down_event = pygame.USEREVENT + 2reloaded_event  = pygame.USEREVENT + 3move_left, reloaded = True, Trueinvaders, colors, shots = [], [] ,[]for x in range(15, 300, 15):    for y in range(10, 100, 15):        invaders.append(pygame.Rect(x, y, 7, 7))        colors.append(((x * 0.7) % 256, (y * 2.4) % 256))# set timer for the movement eventspygame.time.set_timer(move_side_event, MOVE_SIDE)pygame.time.set_timer(move_down_event, MOVE_DOWN)player = pygame.Rect(150, 180, 10, 7)while True:    clock.tick(40)    if pygame.event.get(pygame.QUIT): break    for e in pygame.event.get():        if e.type == move_side_event: for invader in invaders:     invader.move_ip((-10 if move_left else 10, 0)) move_left = not move_left        elif e.type == move_down_event: for invader in invaders:     invader.move_ip(0, 10)        elif e.type == reloaded_event: # when the reload timer runs out, reset it reloaded = True pygame.time.set_timer(reloaded_event, 0)    for shot in shots[:]:        shot.move_ip((0, -4))        if not screen.get_rect().contains(shot): shots.remove(shot)        else: hit = False for invader in invaders[:]:     if invader.colliderect(shot):         hit = True         i = invaders.index(invader)         del colors[i]         del invaders[i] if hit:     shots.remove(shot)    pressed = pygame.key.get_pressed()    if pressed[pygame.K_LEFT]: player.move_ip((-4, 0))    if pressed[pygame.K_RIGHT]: player.move_ip((4, 0))    if pressed[pygame.K_SPACE]:         if reloaded: shots.append(player.copy()) reloaded = False # when shooting, create a timeout of RELOAD_SPEED pygame.time.set_timer(reloaded_event, RELOAD_SPEED)    player.clamp_ip(screen.get_rect())    screen.fill((0, 0, 0))    for invader, (a, b) in zip(invaders, colors):         pygame.draw.rect(screen, (150, a, b), invader)    for shot in shots:         pygame.draw.rect(screen, (255, 180, 0), shot)    pygame.draw.rect(screen, (180, 180, 180), player)        pygame.display.flip()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号