美文网首页
Cocos2d for python入门(三)事件处理

Cocos2d for python入门(三)事件处理

作者: 牛逼的小伙子 | 来源:发表于2019-12-10 10:05 被阅读0次

    Cocos2d 官网文档

    http://python.cocos2d.org/doc/programming_guide/quickstart.html

    示例代码

    import pyglet
    from MouseDisplay import *
    
    
    class KeyDisplay(cocos.layer.Layer):
        is_event_handler = True
    
        def __init__(self):
            super(KeyDisplay, self).__init__()
            self.text = cocos.text.Label("", x=100, y=280)
            self.keys_pressed = set()
            self.update_text()
            self.add(self.text)
    
        def update_text(self):
            key_names = [pyglet.window.key.symbol_string(k) for k in self.keys_pressed]
            text = 'Keys: ' + ','.join(key_names)
            # 更新 self.text
            self.text.element.text = text
    
        def on_key_press(self, key, modifiers):
            """这个函数在按下一个键的时候被调用。
            'key'是一个常量,指示按下哪个键。
            'modifiers(修饰符)'是一个按位或几个常量,指示哪些
                修饰符在按下时处于活动状态(ctrl,shift,capslock等)
            """
            self.keys_pressed.add(key)
            self.update_text()
    
        def on_key_release(self, key, modifiers):
            """这个函数在释放一个键的时候被调用。
    
            'key'是一个常量,指示按下哪个键。
            'modifiers(修饰符)'是一个按位或几个常量,指示哪些
                修饰符在按下时处于活动状态(ctrl,shift,capslock等)
    
            常量来自 pyglet.window.key
            """
            self.keys_pressed.remove(key)
            self.update_text()
    
    
    if __name__ == '__main__':
        cocos.director.director.init(resizable=True)
        cocos.director.director.run(cocos.scene.Scene(KeyDisplay(), MouseDisplay()))
    
    import cocos
    
    
    class MouseDisplay(cocos.layer.Layer):
        is_event_handler = True  #: enable director.window events
    
        def __init__(self):
            super(MouseDisplay, self).__init__()
    
            self.posx = 100
            self.posy = 240
            self.text = cocos.text.Label('No mouse events yet', font_size=18, x=self.posx, y=self.posy)
            self.add(self.text)
    
        def update_text(self, x, y):
            text = 'Mouse @ %d,%d' % (x, y)
            self.text.element.text = text
            self.text.element.x = self.posx
            self.text.element.y = self.posy
    
        def on_mouse_motion(self, x, y, dx, dy):
            """当鼠标移动到应用程序窗口上并且没有按鼠标按键时
    
            (x,y)是鼠标的物理坐标
            (dx,dy)是鼠标至上次调用后经过的的距离向量
    
            """
            self.update_text(x, y)
    
        def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
            """此函数在鼠标在应用程序窗口上移动并按下鼠标按键时被调用
    
            (x,y)是鼠标的物理坐标
            (dx,dy)是鼠标至上次调用后经过的的距离向量
    
            'buttons' 是一个按位或pyglet.window.mouse常量-->LEFT,MIDDLE,RIGHT
            'modifiers' 是一个按位或pyglet.window.key修饰符常量
               (值如 'SHIFT', 'OPTION', 'ALT')
            """
            self.update_text(x, y)
    
        def on_mouse_press(self, x, y, buttons, modifiers):
            """此函数在按任何键时被调用
    
            (x,y)是鼠标的物理坐标
            'buttons' 是一个按位或pyglet.window.mouse常量-->LEFT,MIDDLE,RIGHT
            'modifiers' 是一个按位或pyglet.window.key修饰符常量
               (值如 'SHIFT', 'OPTION', 'ALT')
            """
            self.posx, self.posy = cocos.director.director.get_virtual_coordinates(x, y)
            self.update_text(x, y)
    

    相关文章

      网友评论

          本文标题:Cocos2d for python入门(三)事件处理

          本文链接:https://www.haomeiwen.com/subject/roligctx.html