python檢測按鍵按下 如何檢測按鍵是否被按下?

2021-10-16 21:42:02 字數 3612 閱讀 1535

對於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.mainloop()

我的目標是讓我的角色在按下相應的鍵時以恆定的速度移動(而不是過一段時間後無法控制的快速移動)。在

Linux下C語言檢測多個按鍵按下狀態的方法

在需要同時監聽多個按鍵按下狀態的情況下,可以通過監聽 dev input event事件的方法來判斷按鍵的狀態。比如對於通過鍵盤控制小車時,有可能多個方向鍵同時按下,需要同時監測到,通過前面文章的方法可以有效監控單個按鍵的訊息,但是不能同時監控多個按鍵同時按下的資訊。需要通過記錄鍵盤的按下和釋放事件...

stm32 工業按鍵檢測 STM32按鍵的檢測

stm32的按鍵檢測相對比較簡單,首先按部就班的初始化連線的到的i o,然後寫乙個按鍵掃瞄函式,這個和51微控制器的差不多。以下是乙個比較典型的例子 利用按鍵控制led key.件 ifndef key h define key h include sys.h definekey0 gpio rea...

學習總結 按下按鍵燈亮,再次按下按鍵,燈滅

1 主要實現按鍵控制燈的亮滅,按鍵按下,燈亮,再次按下,燈滅,主要對實現的邏輯進行控制,邏輯清晰,很簡單,實現的方法有兩種,方法1 將按鍵按下的值賦值給乙個變數,變數除以2的值的是基數或者偶數來確定燈亮還是燈滅,程式中設定的是變數的值除以2為0時,燈亮 變數的值除以2為1時,燈滅 程式如下 int ...