cocos控制角色玩家飞机只可以在一定范围内移动,不能越界

控制玩家只可以在屏幕尺寸的范围内移动,不能越界,所以需要边界控制,需要先在cocos中确定最大最小的x和y的位置,然后在脚本中监听移动的时候,判断最大最小位置是否超出边界,是的话就设置为临界位置:

这里巧妙的使用了Math函数的最大值和最小值方法, 或者使用if判断也是可以的。

javascript 复制代码
// 限制玩家移动范围x (-230/230) y(-364/364)
const x = Math.max(-230, Math.min(230, playerPositon.x + event.getDeltaX()))
const y = Math.max(-364, Math.min(364, playerPositon.y + event.getDeltaY()))

然后设置玩家的位置:

javascript 复制代码
this.node.setPosition(x, y, 0)

控制玩家的脚本代码:

javascript 复制代码
import { _decorator, Component, EventTouch, Input, input, Node } from 'cc'
const { ccclass, property } = _decorator

@ccclass('player')
export class player extends Component {
    start() {
        input.on(Input.EventType.TOUCH_START, this.onTouchStart, this)
        input.on(Input.EventType.TOUCH_MOVE, this.onTouchMove, this)
        input.on(Input.EventType.TOUCH_END, this.onTouchEnd, this)
        input.on(Input.EventType.TOUCH_CANCEL, this.onTouchCancel, this)
    }

    onDestroy() {
        input.off(Input.EventType.TOUCH_START, this.onTouchStart, this)
        input.off(Input.EventType.TOUCH_MOVE, this.onTouchMove, this)
        input.off(Input.EventType.TOUCH_END, this.onTouchEnd, this)
        input.off(Input.EventType.TOUCH_CANCEL, this.onTouchCancel, this)
    }

    onTouchStart(event: EventTouch) {
        console.log('onTouchStart', event)
    }

    onTouchMove(event: EventTouch) {
        console.log('onTouchMove', event)
        const playerPositon = this.node.position
        // 限制玩家移动范围x (-230/230) y(-364/364)
        const x = Math.max(-230, Math.min(230, playerPositon.x + event.getDeltaX()))
        const y = Math.max(-364, Math.min(364, playerPositon.y + event.getDeltaY()))
        this.node.setPosition(x, y, 0)
    }

    onTouchEnd(event: EventTouch) {
        console.log('onTouchEnd', event)
    }

    onTouchCancel(event: EventTouch) {
        console.log('onTouchCancel', event)
    }

    update(deltaTime: number) {}
}
相关推荐
鹏多多1 分钟前
js使用History.replaceState实现不刷新修改浏览器url
前端·javascript·浏览器
AliciaIr1 分钟前
深入理解CSS居中:面试必备的布局技巧与底层原理(下)
前端·css
晴空雨2 分钟前
关于箭头函数和 ES6 的继承与 ES5 组合寄生式继承的区别
javascript
今禾4 分钟前
JavaScript 响应式系统深度解析:从 `Object.defineProperty` 到 `Proxy` 的演进与优化
前端·javascript·面试
闲云野鹤_5 分钟前
HTML+CSS+CSS3学习笔记
前端
zzwar20096 分钟前
实现 Symbol.iterator 方法 让一个普通对象变成 可迭代对象(iterable)
前端
鹏程十八少6 分钟前
1. Android FrameWork之系统启动的流程:Zygote、SystemServer 与 Binder 的三角博弈
前端
看晴天了6 分钟前
React学习(二),2025/5/10,笔记记录
前端
Mintopia8 分钟前
《会聊天的文件筐:用 Next.js 打造“图音双绝”的上传组件》
前端·javascript·aigc
我想说一句18 分钟前
响应式原理揭秘
前端·前端框架