Quick-cocos2d-x事件触摸机制

C++和Quick项目在监听触摸事件调用接口的区别:

对于node,按是否自带监听器可分为2类,带监听器的node,比如按钮;和不带监听器的node,比如sprite;

关于事件监听,详细介绍可参考【cocos2dx之event事件(二):事件监听器EventListener

传送门:http://blog.youkuaiyun.com/ellis1970/article/details/79303486

C++监听按钮:

pBtn->addClickEventListener(CC_CALLBACK_1(HelloWorld::btnRunCB, this));
void HelloWorld::btnRunCB(Ref* sender)
{
   CCLOG("Clicking btn")
}

C++监听精灵:

Sprite* apple = (Sprite*)_rootNode->getChildByName("apple");
EventListenerTouchOneByOne* listenerTouchOne1 = EventListenerTouchOneByOne::create();
listenerTouchOne1->onTouchBegan = [&](Touch* touch, Event* event)->bool {
	Sprite* apple = (Sprite*)_rootNode->getChildByName("apple");
	Point clickingPoint = touch->getLocation();
	int rectOriginalX = apple->getPosition().x - apple->getContentSize().width / 2;
	int rectOriginalY = apple->getPosition().y - apple->getContentSize().height / 2;
	Rect rect = Rect(rectOriginalX, rectOriginalY, apple->getContentSize().width, apple->getContentSize().height);
	if (rect.containsPoint(clickingPoint))
	{
		CCLOG("clicking apple");
	}
	return true;
};
dispatcher->addEventListenerWithSceneGraphPriority(listenerTouchOne1, apple);

Lua监听按钮:

local images = {normal = "btn5.png", pressed = "btn6.png"}
local btnRunAction = cc.ui.UIPushButton.new(images)
btnRunAction:setPosition(800,100)
btnRunAction:addTo(self)
local function btnRunActionCB(event)
    print("clicking btn")
end
btnRunAction:onButtonPressed(btnRunActionCB)

Lua监听精灵:

local sprite = display.newSprite("a0.png")
sprite:setPosition(100, 320)
sprite:addTo(self)
local function spriteClickingCB(event)
    print("clicking sprite")
    return false
end
sprite:setTouchEnabled(true)
sprite:addNodeEventListener(cc.NODE_TOUCH_EVENT,spriteClickingCB)
对比可以看出,C++对于自身不带listener的对象,触摸时需要判断触摸点是否落在对象占据的矩形内; Lua则对于所有的node都可以直接监听触摸.

通过改变addNodeEventListener的第一个参数可以改变监听事件的类型:

node:addNodeEventListener(cc.NODE_EVENT,function(event)end)--节点事件
node:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,function(dt)end)--帧事件
node:addNodeEventListener(cc.KEYPAD_EVENT,function(event)end)--键盘事件(只对安卓有效)
node:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)end)--触摸事件

setTouchEnabled(bool)和setTouchCaptureEnabled(bool)这两个API可以控制node是否响应触摸事件;

区别是前者只对当前Node有效,后者对Node及其子Node有效.
另外对于新创建的node,默认状态是:

setTouchEnabled(false)--不响应触摸

setTouchSwallowEnabled(true)--吞噬事件,不向下传递

ESP32-S3在STA模式下设置静态IP通常涉及到配置网络接口的接口配置结构体,比如`esp_netif_t`。以下是一个基本步骤: 1. 首先,你需要在你的应用程序初始化阶段包含必要的头文件,如`esp_wifi.h`和`esp_netif.h`。 ```c #include "esp_wifi.h" #include "esp_netif.h" ``` 2. 定义你的静态IP、子网掩码、默认网关和DNS服务器地址。例如: ```c static const char* ssid = "your_SSID"; static const char* password = "your_PASSWORD"; static ip4_addr_t static_ip = { IP4_ADDR(192, 168, 1, 100) }; // 你的静态IP static ip4_addr_t subnet_mask = { IP4_ADDR(255, 255, 255, 0) }; static ip4_addr_t gateway = { IP4_ADDR(192, 168, 1, 1) }; static ip4_addr_t dns_server = { IP4_ADDR(8, 8, 8, 8)}; // 示例DNS服务器地址 ``` 3. 初始化WiFi模块,并连接到指定的SSID: ```c esp_err_t ret = esp_wifi_init(); if (ret == ESP_OK) { wifi_config_t wifi_config = { .sta = { .ssid = ssid, .password = password, .bssid_set = false, // 如果你知道AP的BSSID可以设置为true }, }; ret = esp_wifi_set_mode(WIFI_MODE_STA); if (ret == ESP_OK) { ret = esp_wifi_start(); if (ret == ESP_OK) { // 等待WiFi连接成功 while (!esp_wifi_get_connect_status() == WIFI_STATUS_CONNECTED) { vTaskDelay(pdMS_TO_TICKS(500)); } } } // 连接成功后再配置静态IP } ``` 4. 创建并配置静态IP网络接口: ```c esp_netif_create StaIf, NULL, &espnetif sta_if; if (esp_netif_create_data斯塔If(&sta_if)) { esp_netif_set_ip4(&sta_if, &static_ip, &subnet_mask, &gateway); esp_netif_set_dhcp_client_data(&sta_if, NULL); // 关闭DHCP服务,使用静态IP esp_netif_set_dns_server_num(&sta_if, 1, &dns_server); esp_netif_start(&sta_if); } // 然后你可以开始发送和接收数据包了 ``` 记得检查错误代码`esp_err_t`,处理可能出现的问题。此外,如果ESP32-S3需要访问互联网,你还可能需要配置路由器的端口转发规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ellis1970

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值