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

本文介绍了如何在cocos2d-x 3.2版本的Layer中实现用户触摸交互,通过创建Game类和Plane类,利用触摸事件监听器实现飞机的移动。详细步骤包括:定义飞机类和Game类,设置飞机的移动方法,以及添加触摸事件监听器来处理触摸开始和移动时的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值