事件钩子¶
Pygame Zero会自动识别并调用你定义的事件钩子.这种机制把你从自己实现事件循环机制中 拯救出来.
事件循环钩子¶
典型事件循环钩子如下:
while game_has_not_ended():
process_input()
update()
draw()
Input processing is a bit more complicated, but Pygame Zero allows you to
easily define the update()
and draw()
functions within your game
module.
输入处理要更复杂一些, 但是在Pygame Zero可以便捷的定义 update()
he draw()
函数.
-
draw
()¶ Called by Pygame Zero when it needs to redraw your game window. 需要重绘游戏窗口时Pygame Zero调用的函数.
draw()
必须没有任何参数.Pygame Zero尝试实现当需要重绘的时候工作, 如果没有变化避免重绘节约资源.每个游戏 循环在下列情形下会重绘屏幕:
- 定义了
update()
函数 - 如果有时钟时间
- 如果触发了输入事件
如果你尝试在draw函数修改或者让某些元素动起来就会让你很抓狂.比如,下列代码是挫的: alien不一定会在屏幕上移动的,也就是修改应该放到update函数:
def draw(): alien.left += 1 alien.draw()
正确代码是用
update()
方法来修改或者让元素动起来,draw函数仅仅是用来绘制屏幕- def draw():
- alien.draw()
- def update():
- alien.left += 1
- 定义了
-
update
() or update(dt)¶ Pygame Zero调用来一步步实现你的游戏逻辑.会重复调用, 60次/秒.
有两种编写update函数的方式.
In simple games you can assume a small time step (a fraction of a second) has elapsed between each call to
update()
. Perhaps you don’t even care how big that time step is: you can just move objects by a fixed number of pixels per frame (or accelerate them by a fixed constant, etc.)A more advanced approach is to base your movement and physics calculations on the actual amount of time that has elapsed between calls. This can give smoother animation, but the calculations involved can be harder and you must take more care to avoid unpredictable behaviour when the time steps grow larger.
To use a time-based approach, you can change the update function to take a single parameter. If your update function takes an argument, Pygame Zero will pass it the elapsed time in seconds. You can use this to scale your movement calculations.
事件处理钩子¶
Similar to the game loop hooks, your Pygame Zero program can respond to input events by defining functions with specific names.
Somewhat like in the case of update()
, Pygame Zero will inspect your
event handler functions to determine how to call them. So you don’t need to
make your handler functions take arguments. For example, Pygame Zero will
be happy to call any of these variations of an on_mouse_down
function:
def on_mouse_down():
print("Mouse button clicked")
def on_mouse_down(pos):
print("Mouse button clicked at", pos)
def on_mouse_down(button):
print("Mouse button", button, "clicked")
def on_mouse_down(pos, button):
print("Mouse button", button, "clicked at", pos)
It does this by looking at the names of the parameters, so they must be spelled exactly as above. Each event hook has a different set of parameters that you can use, as described below.
-
on_mouse_down
([pos][, button])¶ Called when a mouse button is depressed.
参数: - pos – A tuple (x, y) that gives the location of the mouse pointer when the button was pressed.
- button – A
mouse
enum value indicating the button that was pressed.
-
on_mouse_up
([pos][, button])¶ Called when a mouse button is released.
参数: - pos – A tuple (x, y) that gives the location of the mouse pointer when the button was released.
- button – A
mouse
enum value indicating the button that was released.
-
on_mouse_move
([pos][, rel][, buttons])¶ Called when the mouse is moved.
参数: - pos – A tuple (x, y) that gives the location that the mouse pointer moved to.
- rel – A tuple (delta_x, delta_y) that represent the change in the mouse pointer’s position.
- buttons – A set of
mouse
enum values indicating the buttons that were depressed during the move.
To handle mouse drags, use code such as the following:
def on_mouse_move(rel, buttons):
if mouse.LEFT in buttons:
# the mouse was dragged, do something with `rel`
...
-
on_key_down
([key][, mod][, unicode])¶ Called when a key is depressed.
参数: - key – An integer indicating the key that was pressed (see below).
- unicode – Where relevant, the character that was typed. Not all keys will result in printable characters - many may be control characters. In the event that a key doesn’t correspond to a Unicode character, this will be the empty string.
- mod – A bitmask of modifier keys that were depressed.
-
on_key_up
([key][, mod])¶ Called when a key is released.
参数: - key – An integer indicating the key that was released (see below).
- mod – A bitmask of modifier keys that were depressed.
-
on_music_end
()¶ Called when a music track finishes.
Note that this will not be called if the track is configured to loop.
鼠标按键和键盘¶
Built-in objects mouse
and keys
can be used to determine which buttons
or keys were pressed in the above events.
Note that mouse scrollwheel events appear as button presses with the below
WHEEL_UP
/WHEEL_DOWN
button constants.
-
class
mouse
¶ A built-in enumeration of buttons that can be received by the
on_mouse_*
handlers.-
LEFT
¶
-
MIDDLE
¶
-
RIGHT
¶
-
WHEEL_UP
¶
-
WHEEL_DOWN
¶
-
-
class
keys
¶ A built-in enumeration of keys that can be received by the
on_key_*
handlers.-
BACKSPACE
¶
-
TAB
¶
-
CLEAR
¶
-
RETURN
¶
-
PAUSE
¶
-
ESCAPE
¶
-
SPACE
¶
-
EXCLAIM
¶
-
QUOTEDBL
¶
-
HASH
¶
-
DOLLAR
¶
-
AMPERSAND
¶
-
QUOTE
¶
-
LEFTPAREN
¶
-
RIGHTPAREN
¶
-
ASTERISK
¶
-
PLUS
¶
-
COMMA
¶
-
MINUS
¶
-
PERIOD
¶
-
SLASH
¶
-
K_0
¶
-
K_1
¶
-
K_2
¶
-
K_3
¶
-
K_4
¶
-
K_5
¶
-
K_6
¶
-
K_7
¶
-
K_8
¶
-
K_9
¶
-
COLON
¶
-
SEMICOLON
¶
-
LESS
¶
-
EQUALS
¶
-
GREATER
¶
-
QUESTION
¶
-
AT
¶
-
LEFTBRACKET
¶
-
BACKSLASH
¶
-
RIGHTBRACKET
¶
-
CARET
¶
-
UNDERSCORE
¶
-
BACKQUOTE
¶
-
A
¶
-
B
¶
-
C
¶
-
D
¶
-
E
¶
-
F
¶
-
G
¶
-
H
¶
-
I
¶
-
J
¶
-
K
¶
-
L
¶
-
M
¶
-
N
¶
-
O
¶
-
P
¶
-
Q
¶
-
R
¶
-
S
¶
-
T
¶
-
U
¶
-
V
¶
-
W
¶
-
X
¶
-
Y
¶
-
Z
¶
-
DELETE
¶
-
KP0
¶
-
KP1
¶
-
KP2
¶
-
KP3
¶
-
KP4
¶
-
KP5
¶
-
KP6
¶
-
KP7
¶
-
KP8
¶
-
KP9
¶
-
KP_PERIOD
¶
-
KP_DIVIDE
¶
-
KP_MULTIPLY
¶
-
KP_MINUS
¶
-
KP_PLUS
¶
-
KP_ENTER
¶
-
KP_EQUALS
¶
-
UP
¶
-
DOWN
¶
-
RIGHT
¶
-
LEFT
¶
-
INSERT
¶
-
HOME
¶
-
END
¶
-
PAGEUP
¶
-
PAGEDOWN
¶
-
F1
¶
-
F2
¶
-
F3
¶
-
F4
¶
-
F5
¶
-
F6
¶
-
F7
¶
-
F8
¶
-
F9
¶
-
F10
¶
-
F11
¶
-
F12
¶
-
F13
¶
-
F14
¶
-
F15
¶
-
NUMLOCK
¶
-
CAPSLOCK
¶
-
SCROLLOCK
¶
-
RSHIFT
¶
-
LSHIFT
¶
-
RCTRL
¶
-
LCTRL
¶
-
RALT
¶
-
LALT
¶
-
RMETA
¶
-
LMETA
¶
-
LSUPER
¶
-
RSUPER
¶
-
MODE
¶
-
HELP
¶
-
PRINT
¶
-
SYSREQ
¶
-
BREAK
¶
-
MENU
¶
-
POWER
¶
-
EURO
¶
-
LAST
¶
-
Additionally you can access a set of constants that represent modifier keys: