我想创造太空入侵者。我想让它,所以你不能只是像疯狂射击,有一个冷却时间,你可以多快射击。
我有这样的代码:
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中的代码
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),它冻结了整个东西。有人有什么想法吗?谢谢
发布于 2022-10-14 00:25:51
您应该使用time来控制它。
开始时,您可以设置变量self.next_shoot = 0,然后在拍摄时检查time.time() >= self.next_shoot,如果是拍摄时间,则创建新的激光并设置self.next_shoot = time.time() + self.delay
完整的工作代码(与其他更改:即。现在您可以继续按下space拍摄)。
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()发布于 2022-10-14 00:03:35
使用游戏的滴答系统每2秒钟就会改变屏幕的颜色,你可以在你的项目中用这个来拍摄下来。
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()示例:

https://stackoverflow.com/questions/74062897
复制相似问题