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中如何实现用户触摸 本章到此结束!希望大家亲自实现一下此功能