在接下来,我们就来举例:将鼠标的事件引入到这个动画中,要做什么呢?也就是说,在动画中,如果你按下鼠标左键,球就会停止移动,如果你松开左键,球就会移动到鼠标的位置,然后继续刚才的运动;如果你按鼠标左键,移动鼠标,球会跟着鼠标移动,感觉鼠标在拖动同一个球,鼠标松开,球在前面继续移动。
分析:
1、如果你按下鼠标左键,球就会停止移动
(1)确定鼠标按事件:event.type==pygame.MOUSEBUTTONDOWN。
怎么知道它是左键还是右键?
event.button = 鼠标按下键编号 (取值为整数,左键为1,右键为3)
(2)让球停止移动,这很简单,我们需要在主循环中创建一个新变量isstop=false,如果isstop==true,则停止执行这个小对象的move()方法。
2、如果松开左键,球就会移动到鼠标的位置,然后继续刚才的动作。
(I)鼠标松开事件;event.type==pygame.MOUSEBUTTONUP
(2)球向鼠标移动并继续移动。继续移动很简单,只需将前一个变量istop设置为false即可。
(3)如何移动到鼠标?这里您需要进行一个简单的计算,如图所示
坐标x,y是从球的左边和顶部到球体的距离( ballrect.left,ballrect.top),以及鼠标的当前坐标(event.pos[0],event.pos[1]),因此小球要到鼠标的位置就要在x方向上移动event.pos[0] - ballrect.left;y周方向移动event.pos[1] - ballrect.top。
3、如果按下鼠标左键不放,移动鼠标,小球就会跟随鼠标移动
(1)判断鼠标移动移动事件event.type == pygame.MOUSEMOTION
(2)进一步判断是哪个键被按下,event.buttons[0,0,0] 对应鼠标的三个键,鼠标移动时,这三个件处于按下状态,对应的位置值为1
(3)球移动到鼠标位置,与第二部分完全相同。
4、控制小球暂停还是运动
在监视监视器是否处于活动状态以控制游戏是否暂停的代码中,添加一个条件来监视isstop是否暂停,并找到ifpygame.display.get_active(),以更改为:if pygame.display.get_active() and not isstop:
完整的程序代码: