python检测按键按下_如何检测按键是否被按下?

对于Python,作为一个新手,我尝试着用一本指南来编写我自己的游戏。不过,在这个游戏中,我试着检测什么时候一个键一直被按住而不是仅仅按下。我使用的当前代码不会使字符移动,而且如果没有实现halt(self, evt)代码,会导致飞船在按住按钮足够长时间后无法控制地加速。在from tkinter import *

import random

import time

class Game:

def __init__(self):

self.tk = Tk()

self.tk.title("Shooter")

self.tk.resizable(0, 0)

self.tk.wm_attributes("-topmost", 1)

self.canvas = Canvas(self.tk, width=500, height=1000, highlightthickness=0)

self.canvas.pack()

self.tk.update()

self.canvas_height = 1000

self.canvas_width = 500

self.bg = PhotoImage(file="background.gif")

w = self.bg.width()

h = self.bg.height()

for x in range(0, 5):

for y in range(0, 10):

self.canvas.create_image(x * w, y * h, \

image=self.bg, anchor='nw')

self.sprites = []

self.running = True

def mainloop(self):

while 1:

if self.running == True:

for sprite in self.sprites:

sprite.move()

self.tk.update_idletasks()

self.tk.update()

time.sleep(0.01)

class Coords:

def __init__(self, x1=0, y1=0, x2=0, y2=0):

self.x1 = x1

self.y1 = y1

self.x2 = x2

self.y2 = y2

class Sprite:

def __init__(self, game):

self.game = game

self.endgame = False

self.coordinates = None

def move(self):

pass

def coords(self):

return self.coordinates

class PlayerSprite(Sprite):

def __init__(self, game):

Sprite.__init__(self, game)

self.renderimage = [

PhotoImage(file="player_1.gif"),

PhotoImage(file="player_2.gif"),

PhotoImage(file="player_3.gif"),

PhotoImage(file="player_4.gif"),

]

self.image = game.canvas.create_image(225, 900, \

image=self.renderimage[0], anchor='nw')

self.x = 0

self.y = 0

self.velx = 0

self.current_image = 0

self.current_image_add = 1

self.shoot_timer = 0

self.last_time = time.time()

self.coordinates = Coords()

x_move = None

y_move = None

game.canvas.bind_all('', self.move_left)

game.canvas.bind_all('', self.move_right)

game.canvas.bind_all('', self.move_up)

game.canvas.bind_all('', self.move_down)

game.canvas.bind_all('', self.halt)

game.canvas.bind_all('', self.halt)

game.canvas.bind_all('', self.halt)

game.canvas.bind_all('', self.halt)

game.canvas.bind_all('', self.shoot)

def move_left(self, evt):

x_move = self.x - 1.5

self.x = x_move

def move_right(self, evt):

x_move = self.x + 1.5

self.x = x_move

def move_up(self, evt):

y_move = self.y - 1.5

self.y = y_move

def move_down(self, evt):

y_move = self.y + 1.5

self.y = y_move

def halt(self, evt):

time.sleep(0.01)

if x_move < 0:

x_move = -1.5

elif x_move > 0:

x_move = 1.5

elif y_move < 0:

y_move = -1.5

elif y_move > 0:

y_move = 1.5

def shoot(self, evt):

print("Placeholder")

def move(self):

self.game.canvas.move(self.image, self.x, self.y)

def coords(self):

xy = self.game.canvas.coords(self.image)

self.coordinates.x1 = xy[0]

self.coordinates.y1 = xy[1]

self.coordinates.x2 = xy[0] + 24

self.coordinates.y2 = xy[1] + 32

return self.coordinates

g = Game()

sp = PlayerSprite(g)

g.sprites.append(sp)

g.mainloop()

我的目标是让我的角色在按下相应的键时以恒定的速度移动(而不是过一段时间后无法控制的快速移动)。在

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值