Rumah >pembangunan bahagian belakang >Tutorial Python >Cara menggunakan modul acara Acara Pygame dalam Python
Acara ialah salah satu modul penting Pygame Ia adalah teras membina keseluruhan program permainan, seperti klik tetikus yang biasa digunakan, ketik papan kekunci, pergerakan tetingkap permainan dan pelarasan. Saiz tetingkap, mencetuskan plot tertentu, keluar dari permainan, dsb., semuanya boleh dianggap sebagai "peristiwa".
Pygame mentakrifkan struktur yang khusus digunakan untuk mengendalikan acara, iaitu baris gilir acara ini mengikut prinsip asas "dahulu dilayan" dalam baris gilir beratur, kami Operasi pengguna (peristiwa tercetus) boleh diproses dengan teratur dan satu demi satu. Jadual berikut menyenaraikan acara permainan yang biasa digunakan dalam Pygame:
名称 | 说明 |
---|---|
QUIT |
用户按下窗口的关闭按钮 |
ATIVEEVENT |
Pygame被激活或者隐藏 |
KEYDOWN |
键盘按下 |
KEYUP |
键盘放开 |
MOUSEMOTION |
鼠标移动 |
MOUSEBUTTONDOWN |
鼠标按下 |
MOUSEBUTTONUP |
鼠标放开 |
JOYAXISMOTION |
游戏手柄(Joystick or pad) 移动 |
JOYBALLMOTION |
游戏球(Joy ball) 移动 |
JOYHATMOTION |
游戏手柄(Joystick) 移动 |
JOYBUTTONDOWN |
游戏手柄按下 |
JOYBUTTONUP |
游戏手柄放开 |
VIDEORESIZE |
Pygame窗口缩放 |
VIDEOEXPOSE |
Pygame窗口部分公开(expose) |
USEREVENT |
触发一个用户事件 |
Perhatikan bahawa apabila menggunakan Pygame untuk pembangunan permainan, tidak semua acara di atas boleh digunakan, jadi semasa proses pembelajaran, Kita mesti tahu cara membuat inferens dan membuat inferens.
名称 | 说明 |
---|---|
pygame.event.get() |
从事件队列中获取一个事件,并从队列中删除该事件 |
pygame.event.wait() |
阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态 |
pygame.event.set_blocked() |
控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入 |
pygame.event.set_allowed() |
控制哪些事件允许进入队列 |
pygame.event.pump() |
调用该方法后,Pygame 会自动处理事件队列 |
pygame.event.poll() |
会根据实际情形返回一个真实的事件,或者一个None |
pygame.event.peek() |
检测某类型事件是否在队列中 |
pygame.event.clear() |
从队列中清除所有的事件 |
pygame.event.get_blocked() |
检测某一类型的事件是否被禁止进入队列 |
pygame.event.post() |
放置一个新的事件到队列中 |
pygame.event.Event() |
创建一个用户自定义的新事件 |
Apabila kami menggunakan Pygame untuk mengendalikan acara, logiknya pada umumnya serupa. Anda perlu menentukan jenis acara dahulu, dan kemudian mengambil tindakan permainan yang berbeza untuk setiap jenis acara. Oleh itu, pernyataan if & else sesuai untuk situasi ini. Seperti yang ditunjukkan di bawah:
import pygame while True: # 等待事件发生 event = pygame.event.wait() if event.type == pygame.QUIT: exit() if event.type == pygame.MOUSEBUTTONDOWN: print('鼠标按下', event.pos) if event.type == pygame.MOUSEBUTTONUP: print('鼠标弹起') if event.type == pygame.MOUSEMOTION: print('鼠标移动') # 键盘事件 if event.type == pygame.KEYDOWN: # 打印按键的英文字符 print('键盘按下', chr(event.key)) if event.type == pygame.KEYUP: print('键盘弹起')
Kita boleh menggunakan atribut kekunci yang disediakan oleh acara papan kekunci untuk mendapatkan kekunci papan kekunci yang ditekan. Pygame mentakrifkan kekunci huruf, kekunci angka, kekunci gabungan dan kekunci lain pada papan kekunci dalam bentuk pemalar Jadual berikut menyenaraikan pemalar beberapa kekunci yang biasa digunakan:
名称 | 说明 |
---|---|
K_BACKSPACE |
退格键(Backspace) |
K_TAB |
制表键(Tab) |
K_CLEAR |
清除键(Clear) |
K_RETURN |
回车键(Enter) |
K_PAUSE |
暂停键(Pause) |
K_ESCAPE |
退出键(Escape) |
K_SPACE |
空格键(Space) |
K_0...K_9 |
0…9 |
K_a...Kz |
a…z |
K_DELETE |
删除键(delete) |
K_KP0...K_KP9 |
0(小键盘)…9(小键盘) |
K_F1...K_F15 |
F1…F15 |
K_UP |
向上箭头(up arrow) |
K_DOWN |
向下箭头(down arrow) |
K_RIGHT |
向右箭头(right arrow) |
K_LEFT |
向左箭头(left arrow) |
KMOD_ALT |
同时按下Alt键 |
Berikut ialah contoh. "pergerakan gambar" Untuk memahami proses pemprosesan peristiwa papan kekunci, seperti yang ditunjukkan di bawah:
import pygame import sys # 初始化pygame pygame.init() # 定义变量 size = width, height = 600, 400 bg = (255, 255, 255) # 加载logo图 img = pygame.image.load("./python.png") # 获取图像的位置 position = img.get_rect() # 创建一个主窗口 screen = pygame.display.set_mode(size) # 标题 pygame.display.set_caption("Python自学网") # 创建游戏主循环 while True: # 设置初始值 site = [0, 0] for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() # 图像移动 KEYDOWN 键盘按下事件 # 通过 key 属性对应按键 if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: site[1] -= 8 if event.key == pygame.K_DOWN: site[1] += 8 if event.key == pygame.K_LEFT: site[0] -= 8 if event.key == pygame.K_RIGHT: site[0] += 8 # 移动图像 position = position.move(site) # 填充背景 screen.fill(bg) # 放置图片 screen.blit(img, position) # 更新显示界面 pygame.display.flip()
Pygame menyediakan tiga acara tetikus, iaitu pergerakan tetikus (MOUSEMOTION) dan tetikus tekan (MOUSEBUTTONDOWN), pelepas tetikus (MOUSEBUTTONUP), jenis acara yang berbeza sepadan dengan atribut ahli yang berbeza. Seperti yang ditunjukkan di bawah:
pygame.event.MOUSEMOTION acara pergerakan tetikus
event.pos relatif kepada penjuru kiri sebelah atas tetingkap, nilai koordinat semasa tetikus (x, y)
event.rel mouse Jarak pergerakan relatif (X, Y), relatif kepada acara terakhir
event.buttons Keadaan awal butang tetikus (0,0,0), sepadan dengan (butang kiri, takal, kanan butang) masing-masing, butang mana yang diklik semasa pergerakan, Kedudukan yang sepadan akan bertukar kepada 1pygame.event.MOUSEBUTTONUP acara pelepasan butang tetikus
acara.pos berbanding sudut kiri atas tetingkap, nilai koordinat semasa tetikus (x, y)
acara .butang Nombor kunci pelepas tetikus (integer) Butang kiri ialah 1, roda skrol ditekan 2, butang kanan ialah 3pygame.event.MOUSEBUTTONDOWN Acara tekan butang tetikus
event.pos relatif kepada Sudut kiri atas tetingkap, nilai koordinat semasa tetikus (x, y)
event.butang butang tetikus nombor (integer), butang kiri ialah 1, tekan roda skrol 2, butang kanan ialah 3, tatal ke hadapan 4, Takal guling ke belakang 5
import pygame from random import randint # 初始化程序 pygame.init() screen = pygame.display.set_mode((450, 400)) pygame.display.set_caption("Python自学网") # 更新显示 pygame.display.flip() while True: # 等待事件发生 event = pygame.event.wait() if event.type == pygame.QUIT: exit("成功退出") if event.type == pygame.MOUSEBUTTONDOWN: # pos 获取鼠标当前位置 print('鼠标按下', event.pos) mx, my = event.pos # 调用 pygame.draw 模块画圆 pygame.draw.circle(screen, (255, 255, 0), (mx, my), 50) # 处理完,更新显示 pygame.display.update() if event.type == pygame.MOUSEBUTTONUP: print('鼠标弹起') pass if event.type == pygame.MOUSEMOTION: print('鼠标移动') mx, my = event.pos # 随机生成 RGB 颜色值 r = randint(0, 255) g = randint(0, 255) b = randint(0, 255) pygame.draw.circle(screen, (r, g, b,), (mx, my), 50) # 处理完,更新显示 pygame.display.update()
Atas ialah kandungan terperinci Cara menggunakan modul acara Acara Pygame dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!