Python从零模仿我的世界(十五)

Python从零模仿我的世界(十五),第1张

自由移动

大家发现是什么问题了吗?没错!就是在旋转的时候鼠标在窗口上面晃来晃去的(也许还碍手碍脚的?),更糟的是只有当鼠标在窗口上方的时候才会捕获到鼠标移动事件,一旦不小心移到了外面窗口就不动了,真是烦人!有什么方法能解决这个问题呢?

解决方案 1

有的有的,有一个叫set_exclusive_mouse函数可以捕获到鼠标焦点,从而做到这一点,让我们来修改一下代码:

...
if __name__ == '__main__':
    ...
    win.set_exclusive_mouse(True)

    pyglet.app.run()

情况貌似好一点了。哎不对啊,这样一来,不就点不到窗口上的那个“叉叉”了吗?而且应该只有在捕获到焦点的时候才能旋转窗口,没捕获到的时候是不行的。看来还得在两种模式中切换了。

解决方案 2

先重载父类pyglet.window.Windowset_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

这段代码很简单,对吧?那么我们这一篇文章就先讲到这里了,同时我们的开发也告一段落,下一篇文章讲一些有趣的内容。最后,点一个赞哦~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/756029.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存