首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为python中的游戏创建一个冷却时间

为python中的游戏创建一个冷却时间
EN

Stack Overflow用户
提问于 2022-10-13 23:40:59
回答 2查看 49关注 0票数 -1

我想创造太空入侵者。我想让它,所以你不能只是像疯狂射击,有一个冷却时间,你可以多快射击。

我有这样的代码:

代码语言:javascript
复制
class Laser(Turtle):
    def __init__(self):
        super().__init__()
        self.penup()
        self.lasers = []

    def shoot(self):
        new_laser = Turtle(shape="square")
        self.lasers.append(new_laser)
        new_laser.penup()
        new_laser.setheading(90)
        global PLAYER_X
        new_laser.goto(x=PLAYER_X, y=-260)
        new_laser.shapesize(stretch_wid=0.2, stretch_len=2)
        new_laser.color("white")

这是在一个文件中,然后在main.py中的代码

代码语言:javascript
复制
from player import Player, Laser
from turtle import *
import time

screen = Screen()
player = Player()
laser = Laser()

screen.setup(height=600, width=550, starty=-50)
screen.bgcolor("black")
screen.title("Space Invaders")
screen._root.resizable(False, False)
screen.tracer(0)

screen.listen()
screen.onkey(player.go_left, "Left")
screen.onkey(player.go_right, "Right")
screen.onkey(laser.shoot, "space")

while True:
    screen.update()
    time.sleep(0.02)

    for item in laser.lasers:
        item.forward(10)

我想让它,所以我可以增加一个冷却的射击速度,因为如果我投入time.sleep(1),它冻结了整个东西。有人有什么想法吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-14 00:25:51

您应该使用time来控制它。

开始时,您可以设置变量self.next_shoot = 0,然后在拍摄时检查time.time() >= self.next_shoot,如果是拍摄时间,则创建新的激光并设置self.next_shoot = time.time() + self.delay

完整的工作代码(与其他更改:即。现在您可以继续按下space拍摄)。

代码语言:javascript
复制
import turtle  # PEP8 `import *` is not preferred
import time

class Player(turtle.Turtle):
    
    def __init__(self):
        self.x = 0
        self.y = -250
        
        self.speed = 0
        self.left = False
        self.right = False
        
        self.player = turtle.Turtle(shape="square")
        self.player.penup()
        self.player.setheading(90)
        self.player.color("white")
        self.player.goto(self.x, self.y)
        
    def go_left(self):
        self.left = True
        
    def go_right(self):
        self.right = True

    def stop_left(self):
        self.left = False
        
    def stop_right(self):
        self.right = False

    def move(self):
        self.speed = 0
        
        if self.left:
            self.speed -= 10
        if self.right:
            self.speed += 10
            
        self.x += self.speed
        
        if self.x < -250:
            self.x = -250
        if self.x > 250:
            self.x = 250
            
        self.player.goto(self.x, self.y)
        
class Laser(turtle.Turtle):

    def __init__(self, player):
        super().__init__()

        self.player = player # access player position (without using global variables)

        self.shooting = False
        
        self.penup()
        self.lasers = []
        self.next_shoot = 0  # value as start
        self.delay = 1       # 1 second 

    def start_press(self):
        self.shooting = True
        
    def stop_press(self):
        self.shooting = False
        
    def shoot(self):
        #print(self.next_shoot, time.time())
            
        if time.time() >= self.next_shoot:
            self.next_shoot = time.time() + self.delay
            
            new_laser = turtle.Turtle(shape="square")
            self.lasers.append(new_laser)
            
            new_laser.penup()
            new_laser.setheading(90)
            new_laser.goto(x=player.x, y=-260)
            new_laser.shapesize(stretch_wid=0.2, stretch_len=2)
            new_laser.color("white")

    def move(self):
        if self.shooting:
            self.shoot()
            
        for item in self.lasers:
            item.forward(10)
        
        
screen = turtle.Screen()
player = Player()
laser = Laser(player)

screen.setup(height=600, width=550, starty=-50)
screen.bgcolor("black")
screen.title("Space Invaders")
screen._root.resizable(False, False)
screen.tracer(0)

screen.listen()
screen.onkeypress(player.go_left, "Left")
screen.onkeypress(player.go_right, "Right")
screen.onkeyrelease(player.stop_left, "Left")
screen.onkeyrelease(player.stop_right, "Right")

screen.onkeypress(laser.start_press, "space")
screen.onkeyrelease(laser.stop_press, "space")

while True:
    screen.update()
    time.sleep(0.02)
    player.move()
    laser.move()
票数 0
EN

Stack Overflow用户

发布于 2022-10-14 00:03:35

使用游戏的滴答系统每2秒钟就会改变屏幕的颜色,你可以在你的项目中用这个来拍摄下来。

代码语言:javascript
复制
import random
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Hello World")
start_ticks = pygame.time.get_ticks()  # starter tick

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    seconds = (pygame.time.get_ticks() - start_ticks)/1000  # convert millisecond to seconds
    if seconds > 2:  # if more than 2 seconds 
        screen.fill((random.randint(0,225), random.randint(0,225), random.randint(0,225)))
        start_ticks = pygame.time.get_ticks()  # reset tick
    pygame.display.update()

示例:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74062897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档