• cocos2dx键盘监听事件

    2018-05-07 19:42:36
    //注册键盘监听事件auto listenerKey = EventListenerKeyboard::create(); //添加回调函数 listenerKey->onKeyPressed = ([=](EventKeyboard::KeyCode code, Event* event) { switch (code) { case ...
    //注册键盘监听事件
    auto listenerKey = EventListenerKeyboard::create();

    //添加回调函数

    	listenerKey->onKeyPressed = ([=](EventKeyboard::KeyCode code, Event* event)
    	{
    		switch (code)
    		{
    		case EventKeyboard::KeyCode::KEY_0:
    
    		{
    			this->pause();
    
    			auto layer = QuitLayer::create();
    
    			this->addChild(layer, 4);
    
    			break;
    		}
    			
    		default:
    			break;
    		}
    	});
    
    	auto dispatcher = Director::getInstance()->getEventDispatcher();
    
           //添加到事件分发器
    	dispatcher->addEventListenerWithSceneGraphPriority(listenerKey, this);



    展开全文
  • cocos2dx 监听键盘事件

    2019-09-16 17:25:33
    打开GameScene.h 修整下 GameScene.cpp写法 #ifndef __GAME_SCENE_H__ #define __GAME_SCENE_H__ #include "cocos2d.h" #include "knight.hpp" class GameS...

     

    打开 GameScene.h

    修整下 GameScene.cpp 写法

    #ifndef __GAME_SCENE_H__
    #define __GAME_SCENE_H__
    
    #include "cocos2d.h"
    #include "knight.hpp"
    
    class GameScene : public cocos2d::Layer
    {
    public:
    	static cocos2d::Scene* createScene();
    	virtual bool init();
    	CREATE_FUNC(GameScene);
    
        //实例化对象
    	TexturePacker::Knight *knightCache = new TexturePacker::Knight();
    	cocos2d::Sprite *knight = new cocos2d::Sprite();
    	cocos2d::Animate *knightAnimation = new cocos2d::Animate();
    
        //实例化跳跃动作
    	cocos2d::Action *jump = new cocos2d::Action();
    
    private:
        //新建指针对象listenerKeyboard,指向一个新的键盘监听
    	cocos2d::EventListenerKeyboard *listenerKeyboard = cocos2d::EventListenerKeyboard::create();
        //重载Layer::onKeyPressed
    	virtual void onKeyPressed(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event* event);
    };
    
    #endif // ___GAME_SCENE_H__

    打开 GameScene.cpp

    ...
    
    //knight initialize
    
    //添加到缓存
    this->knightCache->addSpriteFramesToCache();
    
    //引用贴图属性方法
    knight = this->knightCache->createCha_kni_f_0000Sprite();
    //设置舞台位置
    knight->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
    //引用动画方法
    knightAnimation = this->knightCache->createCha_kni_fAnimateAction(0.14f);
    //执行动画
    knight->runAction(RepeatForever::create(knightAnimation));
    //添加到舞台
    this->addChild(knight);
    
    //绑定监听回调和对象
    listenerKeyboard->onKeyPressed = CC_CALLBACK_2(GameScene::onKeyPressed, this);
    //获取事件分发器并添加以节点为顺序的监听器
    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listenerKeyboard, this);
    
    ...

    因为 GameScene 继承 cocos2d::Layer

    而 cocos2d::Layer 下已有 onKeyPressed 方法 所以方法必须重载才能定义自己的方法表达式

    virtual void onKeyPressed(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event* event);
    void GameScene::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event)
    {
        //判断 keyCode 枚举来区分所按下的按键
    	switch (keyCode) {
    	case EventKeyboard::KeyCode::KEY_SPACE:
    
            //新建jump指针,指向JumpBy::create()返回一个Action的指针对象
            Action *jump = JumpBy::create(.5, Vec2(0, 0), 20, 1);
            //执行,让它跳一下
            knight->runAction(jump);
    
            break;
    	}
    }

     

    转载于:https://my.oschina.net/dsc1025/blog/810694

    展开全文
  • local MainScene = class("MainScene", cc.Node) function MainScene:ctor() self:KeyboardEvent() end function MainScene:... --键盘按键按下回调函数 local function keyboardPressed(keyCode, event...
    local MainScene = class("MainScene", cc.Node)
    function MainScene:ctor()
    	self:KeyboardEvent()
    end
    
    
    function MainScene:KeyboardEvent()  
    	--键盘按键按下回调函数
        local function keyboardPressed(keyCode, event)  
            print(keyCode)--输出keycode
        end 
    
    	--键盘按键松开回调函数
        local function keyboardReleased(keyCode, event)
    
        end
        --注册键盘监听事件
        local listener = cc.EventListenerKeyboard:create()  
        --绑定回调函数
        listener:registerScriptHandler(keyboardPressed, cc.Handler.EVENT_KEYBOARD_PRESSED)  
        listener:registerScriptHandler(keyboardReleased, cc.Handler.EVENT_KEYBOARD_RELEASED)  
        local eventDispatcher = self:getEventDispatcher()  
        eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)  
    end 
    return MainScene
    

    原文链接:https://www.jianshu.com/p/659f75cbe62f

    展开全文
  • cocos2dx事件监听

    2015-01-07 19:00:18
    Cocos2d-x 3.0 出来已经好久了,也已经用3.0写了几个小游戏,感觉3.0的事件触发机制太赞了,所以在这里总结一下,也算是对知识的一种回忆和加深理解。 3.0的事件分发机制中,需要也仅仅需要通过创建一个...

    Cocos2d-x 3.0 出来已经好久了,也已经用3.0写了几个小游戏,感觉3.0的事件触发机制太赞了,所以在这里总结一下,也算是对知识的一种回忆和加深理解。


    3.0的事件分发机制中,需要也仅仅需要通过创建一个事件监听器来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有的事件监听器由这个分发器统一管理,即可完成事件响应。


    事件监听器有以下几种:

    1、EventListenerTouch(触摸事件)

    2、EventListenerKeyboard(键盘响应事件)

    3、EventListenerMouse(鼠标响应事件)

    4、EventListenerAcceleration(加速记录事件)

    5、EventListenerCustom(自定义事件)


    _eventDispatcher的工作由三部分组成:

    1、事件分发器EventDispatcher

    2、事件类型EventTouch,EventKeyboard,等

    3、事件监听器(上面列举的五种)


    监听器实现各种触发后的逻辑,事件分发器来分发所有注册的事件,然后调用响应的类型监听器来响应事件。


    这篇来讲一下游戏中用的最多的触摸事件监听EventListenerTouch


    3.0中的触摸监听变得非常简单,只需要注册响应的事件监听器,给事件监听器的各个响应函数赋予响应的回调函数,最后将实现的事件监听器注册到事件分发器_eventDispatcher中,实现各个回调函数的逻辑功能即可。


    第一步:穿件事件监听器,并注册到时间分发器中,这一步最好在onEnter()函数中实现。

    1
    2
    3
    4
    5
    6
    //触摸响应注册
    auto touchListener = EventListenerTouchOneByOne::create();//创建单点触摸事件监听器
    touchListener->onTouchBegan = CC_CALLBACK_2(GameLayer::onTouchBegan,this);//触摸开始
    touchListener->onTouchMoved = CC_CALLBACK_2(GameLayer::onTouchMoved,this);//触摸移动
    touchListener->onTouchEnded = CC_CALLBACK_2(GameLayer::onTouchEnded,this);//触摸结束
    _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener,this;//注册分发器


    第二步:实现上述监听器中的三个回调函数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    bool GameLayer::onTouchBegan(Touch* touch, Event* event) {
        //实现自己的逻辑代码
        return true;
    }
     
    void GameLayer::onTouchMoved(Touch* touch, Event* event) {
        //实现自己的逻辑代码
    }
     
    void GameLayer::onTouchEnded(Touch* touch, Event* event) {
    //实现自己的逻辑代码
    }


    onTouchBegan()函数中返回true,则响应事件不会向下层传递,只会响应本层中的Began、Moved、Ended三个函数,如果返回false,则本层后续的Moved、Ended函数不会被触发,但是事件会向下层传递。

    同时可以在注册响应事件时,用:

    1
    touchListener->setSwallowTouches(true);//不向下传递触摸

    来设置是否向下传递触摸事件。


    _eventDispatcher是Node的属性,通过它管理当前节点(场景、层、精灵等)的所有事件的分发。它本身是一个单例模式的引用,在Node的构造函数中,通过Director::getInstance()->getEventDispatcher();获取。


    当一个事件监听器需要重复利用时,需要用clone()方法创建一个新的克隆,因为在使用addEventListenerWithSceneGraphPriorith或者addEventListenerWithFixedPriority方法进行注册时,会对当前使用的事件监听器添加一个已注册的标记,这使得它不能够被添加多次。另外,再使用FixedPriority listeners时,添加完之后需要手动remove,SceneGraphyPriority listener和Node绑定,在Node的析构函数中会被移除。


    移除一个已注册的监听器用:

    1
    _eventDispatcher->removeEventListener(listener);

    也可以直接调用removeAllListeners函数,但是不建议这么做,这样做之后所有的事件监听器都不再响应。


    展开全文
  • cocos 2dx_lua键盘监听

    2020-06-08 09:48:00
    local function keyboardPressed(KeyCode,event) print(KeyCode) end local function keyboardReleased(KeyCode,event) end local listener = cc.EventListenerKeyboard:create() listener:...
    
    local function keyboardPressed(KeyCode,event)
            print(KeyCode)
        end
        local function keyboardReleased(KeyCode,event)
        end
        local listener = cc.EventListenerKeyboard:create()  
        listener:registerScriptHandler(keyboardPressed, cc.Handler.EVENT_KEYBOARD_PRESSED)  
        listener:registerScriptHandler(keyboardReleased, cc.Handler.EVENT_KEYBOARD_RELEASED)  
        local eventDispatcher = self:getEventDispatcher()  
        eventDispatcher:addEventListenerWithSceneGraphPriority(listener,self)
    
    
    展开全文
  • 通过上下左右控制人物
  • 关于事件:cocos2dx里面有很多种事件,比如点击事件,碰撞事件,键盘事件等等,但是处理它们的方式,大同小异 1.先获得对应事件的监听器对象 2.为对应的事件设置回调函数 3.通过导演获得事件分发器,在和对应的控件...
  • cocos2dx 3.x事件监听

    2017-01-26 13:29:08
    使用了cocos2dx 3.10,当使用到点击事件时,想像3.0之前的版本那样使用,结果却发现,基类函数无法在lambda(这是什么鬼,我其实不知道。。)中使用。。。。 [cpp] view plain copy   ...
  • 在玩cocos2d-x的时候,每次真机实测,都要按home键来‘退出’游戏,因为没有监听返回键,这让我想起了某个版本的手机QQ,也是没有监听返回键来着。 来简单写一下cocos2d-x监听安卓的返回键。   简单的用helloworld...
  • 今天练习一下触摸、键盘、重力响应。话不多说,都在代码里 .h #ifndef _SCENE$_ #define _SCENE$_ #include "cocos2d.h" USING_NS_CC; class FourthScene :public cocos2d::CCLayer { public: virtual bool ...
  • cocos-lua 键盘监听事件

    2018-06-04 16:45:26
    cocos-lua键盘监听事件,按下和弹起function GameTest:init_keyboard() local function onKeyPressed(keyCode, event) end local function onKeyReleased(keyCode, event) end local listener = cc.Eve...
  • 本文章将围绕着Cocos2dx里最简单的控制事件回调进行介绍。 对编程有基本了解的都知道关于硬件的事件回调过程(括号以触屏事件回调作例子): 1用户对硬件作出操作(用户对硬件屏幕作出单点操作)。 2硬件发出事件...
  • #include #define KEY_DOWN(vk_code) (GetAsyncKeyState(vk_code) & 0x8000 ? 1 : 0) #define KEY_UP(vk_code) (GetAsyncKeyState(vk_code) & 0x8000 ? 0 : 1) if( KEY_DOWN( VK_DOWN ) ) { ...
  • 键盘输入在Cocos2Dx分为两个部分。第一部分是一些功能键的处理:后退键和菜单键。第二部分是处理字符输入。功能键相关的代码位于cocos2dx\keypad_dispatcher。字符输入的代码位于\cocos2dx\text_input_node。 我们...
  • 返回键,因此有时需要检测设备的键盘输入,使用键盘事件代理CCKeypadDelegate处理相应的事件。 CCKeypadDelegate类的继承关系如下图所示。   布景层类CCLayer和其子类继承自CCKeypadDelegate
  • 先要监听 键盘事件 看有没有按压到我们想要的按键 然后要判断有没有一直按压 如果进入了release事件就说明松手了 我们先写个map 来存放按键的状态是不是按压中 std::map<cocos2d::EventKeyboard...
  • 同济大学软件学院每个学期会要求学生独立或者组队完成一个大项目,于是2016年大项目是用cocos2d-x这款引擎制作一个自己的游戏。 有幸能和<stroke>大神</stroke>组到了一起,形成了两人小分队。 C++语言...
  • Cocos2d-x键盘按键

    2017-05-25 22:40:05
    cocos2d-x的交互功能中,必不可免的会有键盘响应的事件(除了PC端游戏会用到键盘,现在有些手机或者平板也会插上键盘来进行辅助) 对于键盘事件的监听,许多教程或者书本上都有讲述。但是对于键盘具体按键的判断...
  • Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法 首先,在Scene中重载下面两个函数 [cpp] view plaincopy virtualvoidonKeyPressed(EventKeyboard::KeyCodekeyCode,Event*event); ...
  • layer:setKeypadEnabled(true)  layer:registerScriptKeypadHandler(function(callback)  if callback == "backClicked" then ... print("返回按钮监听")  elseif callback == "menuClicked
1 2 3 4 5 ... 20
收藏数 496
精华内容 198