萌新請教如何限制EventTouch的觸發範圍

各位大大好,小弟是最近才剛開始學習COCOS的萌新,目前在看B站上 “Cocos 布道师「放空」,25堂课带你零基础入门 Cocos Creator 做一款经典射击游戏!” ,整個過程還算順利。

但我發現,這個教程中飛機移動的設計,是只要點擊螢幕上任何地方,就可以控制飛機移動,這顯得有點不太合理,所以我就想自己嘗試把觸發事件判斷的範圍縮小到,只有按著飛機模型本身或者一個跟飛機模型大小差不多的範圍(類似collionsion body or rigid body那種大小)才會觸發判斷事件,但是怎麼試都試不出來,相關資訊如下,還請高手指導。

node
image

code
import { _decorator, Component, Node, input, Input, EventTouch } from ‘cc’;
const { ccclass, property } = _decorator;

@ccclass('SelfPlane')
export class SelfPlane extends Component {
    @property
    public speed: number = 0;
    
    start() {
        input.on(Input.EventType.TOUCH_MOVE, this._touchMove, this);
    }

    update(deltaTime: number) {
        
    }

    private _touchMove(event: EventTouch) {
        const delta = event.getDelta();
        let pos = this.node.position;
        this.node.setPosition(pos.x + delta.x * this.speed * 0.01, pos.y, pos.z - delta.y * this.speed * 0.01);
        
    }
}

如果把寫好的script掛在plane01的根結點plane01或body上都可以點擊螢幕任何位置移動飛機。

我原本是想,如果掛在最底層子結點plane01_child上應該可以實現我的想法吧? 結果也是一樣點擊螢幕任何位置可以移動飛機,而且移動距離會變成原本的好幾倍。

你的plane01节点大小对么

input 是监听 全局 的系统输入事件,因此你对于 input 的事件监听,不管挂载在哪个节点都是全局接收的。

如果只需要监听某个节点的触摸事件,只需要将 Input.EventType.TOUCH_MOVE 在对应节点上监听即可。比如你贴出来的脚本,只需要将 input.on 更改为 this.node.on,就可以实现脚本挂载在哪个节点,触摸该节点后跟随移动的效果。

之前我查找過相關的解決方案,也試過這個方法,但在預覽的時候滑鼠一移過去就報錯了。

code

我的project data 是調整成與教程裡面一樣的720*1280
plane01是直接create一個empty node然後把模型掛到這個node底下
底下又生成兩層node
一層是body,一層是plane01_child
我是在body調整模型的大小
不知道大大您的意思是調整plane01的哪個部分?
image

这个报错有点类似 【建议】UITransform 触摸事件监听问题

有可能是场景内的摄像机没有拍摄飞机模型节点所属的 Layer ?或者是监听事件的节点需要挂载 UITransform 组件?

我去看了下文档,上面的说的是对的,input对应的是全局,你改成this.node.on(Node.EventType.TOUCH_MOVE, this._touchMove, this);就可以了

3.0版本调整大小 需要在节点上添加 UITransform组件,你看下你的节点上是不是没有

問題解決了50%
調整步驟:
一、將script 中的input.on 改成 this.node.on
二、在根結點plane_01增加了一個UITransform的元件
三、將UITransform元件的content size預設的(100, 100) 改為 (15, 30)


這樣調整完之後可以順利運行沒有報錯,可以觸發移動的範圍,左右的部分順利縮小到與機身寬度差不多,但前後的部分還是整個螢幕的長度都可以觸發,如果試圖調整content size的第二個值(就是目前設定為30那個)來縮小前後的觸發範圍,那只要低於一定的值(大約25),就會變成完全無法觸發事件偵測,目前測試極限是(15, 30),不知道這什麼情形,請問大大有頭緒嗎?