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) {}
}
相关推荐
kyriewen5 小时前
微软用Go重写TypeScript编译器,速度提升10倍,网友:这是“背叛”还是“救赎”?
前端·typescript·ecmascript 6
Ceelog5 小时前
久坐党自救指南:屏幕前 8 小时,身体到底在经历什么
前端·后端
西陵6 小时前
Agent 为什么会陷入 Doom Loop?OpenClaw 的破解之道
前端·人工智能·ai编程
Hyyy6 小时前
普通前端续命周报——第2周
前端
swipe6 小时前
DeepAgents 实战:用多 Agent 架构搭一个深度调研助手
javascript·面试·llm
wuxinyan1236 小时前
工业级大模型学习之路030:Streamlit 企业级智能体前端工作台
前端·学习·streamlit·智能体
修己xj7 小时前
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
前端
anOnion8 小时前
构建无障碍组件之Slider Pattern
前端·html·交互设计
云水一下8 小时前
JavaScript 从零基础到精通系列:前世今生与编程启蒙
前端·javascript
月亮邮递员6168 小时前
Markdown语法总结
开发语言·前端·javascript