cocos2d-x 3.2 |如何在Layer中实现用户触摸

cocos2d-x 3.2 |如何在Layer中实现用户触摸
前情提要:今天分享一下如何利用cocos2d-x 3.2版本实现用户触摸
cocos2d-x本身已经帮我们把触摸的实现过程和深层原理封装成函数,Layer比Node本身多了触摸属性,
主要实现:移动屏幕上的飞机为最终目的

第一步:新建Game类(逻辑)、飞机(逻辑)   此处背景、子弹、菜单、敌机暂时忽略
飞机类: Plane.h   Plane.cpp 
先来定义下飞机用到的方法:Plane.h
#include <stdio.h>
#include "cocos2d.h"
using namespace cocos2d;
//飞机方法 继承自Node
class Plane:public Node
{
public:
    CREATE_FUNC(Plane);
    float px, py;
    bool init();
    void moveTo(int x, int y);//移动后的坐标
};

第二步:在实现一下我们飞机类的方法: Plane.cpp
bool Plane::init()
{
    //初始化方法
    if (!Node::init())
    {
        return false;
    }
    //飞机图片
    auto fly1=Sprite::create("plane_3.png");
    this->addChild(fly1);
    fly1->setTag(10);
    
    return true;
}
void Plane::moveTo(int x, int y)
{
    this->getChildByTag(10)->setPosition(x,y);
    this->px=x;
    this->py=y;
}

第三步:再来定义一个Game类,并实现它的方法
Game类: Game.h   Game.cpp 
老规矩,先来定义飞机用到的方法:Game.h

#include <stdio.h>
#include "cocos2d.h"
<p class="p1">#include <span class="s1">"Plane.h"</span></p>
USING_NS_CC;
using namespace cocos2d;
class Game:Layer
{
public:
    float startX,startY;//起始 X Y 值
    CREATE_FUNC(Game);
    static Scene * CreateScene();
    bool init();
    virtual bool onTouchBegan(Touch *touch, Event *unused_event);
    virtual void onTouchMoved(Touch *touch, Event *unused_event);
};

其次再来实现飞机的方法: Game.cpp
#include "Game.h"
USING_NS_CC;
Scene * Game::CreateScene()
{
    auto scene=Scene::create();
    auto layer=Game::create();
    scene->addChild(layer);
    return scene;
}
bool Game::init()
{
    if (!Layer::init())//Layer初始化当前Game场景
    {
        return false;
    }
    //添加飞机
    auto fly1=Plane::create();
    this->addChild(fly1,1);
    fly1->moveTo(100,100);
    fly1->setTag(10);
    

    //控制飞机飞行
    auto listener=EventListenerTouchOneByOne::create();//创建侦听
    listener->onTouchBegan=CC_CALLBACK_2(Game::onTouchBegan, this);//定义侦听的回调
    listener->onTouchMoved=CC_CALLBACK_2(Game::onTouchMoved, this);
<pre name="code" class="cpp">    //将侦听添加到事件分发器中
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); return true;}//按下bool Game::onTouchBegan(Touch *touch, Event *unused_event){ this->startX=touch->getLocation().x; this->startY=touch->getLocation().y; return true;}//移动void Game::onTouchMoved(Touch *touch, Event *unused_event){ float mx=touch->getLocation().x-startX; float my=touch->getLocation().y-startY; auto fly1=(Plane *)this->getChildByTag(10); fly1->moveTo(fly1->px+mx, fly1->py+my); this->startX=touch->getLocation().x; this->startY=touch->getLocation().y;}
 
  
总结: Layer中如何实现用户触摸 本章到此结束!希望大家亲自实现一下此功能


你可能感兴趣的:(方法,实现,移动,如何,触摸)