外星人入侵项目实现按住空格全自动发射子弹
前言
实现全自动其实很简单,只要加一个定时器即可。 一共也就用到两个语句:
pygame.time.set_timer
和
key_press = pygame.key.get_pressed() if key_press[pygame.K_SPACE]:
提示:以下是本篇文章正文内容,下面案例可供参考
一、
pygame.time.set_timer
此句用于定时——多少毫秒之后响应一次循环
1.先设置一个常量 FIRE_EVENT = pygame.USEREVENT
import pygame
class Settings:
"""存储游戏《外星人入侵》中所有设置的类"""
FIRE_EVENT = pygame.USEREVENT
这里我把此常量放在了settings.py 当然也可以放进主程序,我只是为了主程序的简洁易读性
2.在主程序加入这个定时器
from settings import Settings
class AlienInvasion:
"""管理游戏资源和行为的类"""
def __init__(self):
"""初始化游戏并创建游戏资源"""
pygame.init()
self.settings = Settings()
pygame.time.set_timer(Settings.FIRE_EVENT, 250)
我这里设置了250 表示每250毫秒执行一次
二、
key_press = pygame.key.get_pressed()
if key_press[pygame.K_SPACE]:
此语句用于检测按键是否被按下并执行命令
1.先遍历按键事件并写入此代码
def _check_events(self):
for event in pygame.event.get():
key_press = pygame.key.get_pressed()
if key_press[pygame.K_SPACE]:
这种方法不同于event.type == pygame.KEYDOWN要执行循环命令需要加True,Flase开关,它可以持续响应按键被按下的情况
2.设置条件并创建子弹
def _check_events(self):
for event in pygame.event.get():
key_press = pygame.key.get_pressed()
if key_press[pygame.K_SPACE]:
"""创建一颗子弹,并将其加入编组bullets中"""
if len(self.bullets) < self.settings.bullets_allowed and event.type == Settings.FIRE_EVENT:
new_bullet = Bullet(self)
self.bullets.add(new_bullet)
self.settings.bullets_allowed这里我设置的是10 不然根本没有“哒哒哒”的感觉,当然也可以不要这个条件,重要的是event.type == Settings.FIRE_EVENT这个条件,当延迟250毫秒时在运行发射子弹的代码
总结
最后我们来看一下效果ok,大功告成!感谢您的聆阅,希望对您有所帮助!
|