大家发现是什么问题了吗?没错!就是在旋转的时候鼠标在窗口上面晃来晃去的(也许还碍手碍脚的?),更糟的是只有当鼠标在窗口上方的时候才会捕获到鼠标移动事件,一旦不小心移到了外面窗口就不动了,真是烦人!有什么方法能解决这个问题呢?
解决方案 1有的有的,有一个叫set_exclusive_mouse
函数可以捕获到鼠标焦点,从而做到这一点,让我们来修改一下代码:
...
if __name__ == '__main__':
...
win.set_exclusive_mouse(True)
pyglet.app.run()
情况貌似好一点了。哎不对啊,这样一来,不就点不到窗口上的那个“叉叉”了吗?而且应该只有在捕获到焦点的时候才能旋转窗口,没捕获到的时候是不行的。看来还得在两种模式中切换了。
解决方案 2先重载父类pyglet.window.Window
的set_exclusive_mouse
方法,在调用时修改这个属性:
class Window(...):
...
def set_exclusive_mouse(self, exclusive):
pyglet.window.Window.set_exclusive_mouse(self, exclusive)
# 嘻嘻,其实这个属性在第九篇中就已经定义了哦
self.exclusive = exclusive
接下来在on_mouse_motion
中加一个判断,只有在捕获到鼠标焦点时才能旋转:
class Window(...):
...
def on_mouse_motion(...):
if self.exclusive:
m = 0.15
...
最后我们规定:鼠标点击窗口一次就鼠标就被捕获,按一下Esc就取消鼠标捕获(不喜欢可以改哦):
class Window(...):
...
def on_key_press(self, symbol, modifiers):
...
elif symbol == pyglet.window.key.ESCAPE:
self.set_exclusive_mouse(False)
# 这个是鼠标点击事件的处理函数哦,忘了的赶紧看看第十三篇
def on_mouse_press(self, x, y, button, modifiers):
if button == pyglet.window.mouse.LEFT:
self.set_exclusive_mouse(True)
这样我们就解决这个问题了。撒花!
接着我们把跳跃的功能也给实现了吧,空格键跳跃哦:
class Window(...):
...
def on_key_press(self, symbol, modifiers):
...
elif symbol == pyglet.window.key.SPACE:
# 这是为了防止二段跳
if self.dy == 0:
# 忘记啦?看看第二篇
self.dy = Settings.jump_speed
这段代码很简单,对吧?那么我们这一篇文章就先讲到这里了,同时我们的开发也告一段落,下一篇文章讲一些有趣的内容。最后,点一个赞哦~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)