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) {}
}
相关推荐
冬奇Lab7 小时前
每日一个开源项目(第137篇):Penpot - 真正开源的设计协作工具,SVG 原生格式消灭设计-开发鸿沟
前端·开源·设计
nuIl7 小时前
实现一个 Coding Agent(7):Skills
前端·agent·cursor
nuIl7 小时前
实现一个 Coding Agent(8):会话持久化与多会话
前端·agent·cursor
jt君424268 小时前
React Native JSI 深入剖析 — 第 5 部分中文技术整理:用 HostObject 把 C++ 类暴露给 JavaScript
前端·react native
胡萝卜术8 小时前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
fluffyox8 小时前
Notion 的公式栏里,藏着一台虚拟机——逆向 + 用 600 行 JS 复刻它的编译器与栈式 VM
前端
kyriewen9 小时前
2026 年了,这 6 个 npm 包可以卸载了——浏览器原生 API 已经能替代
前端·javascript·npm
铁皮饭盒11 小时前
bun直接tsx,优雅!
javascript·后端
Csvn12 小时前
Monorepo 迁移血泪史:从 Multi-Repo 到 Turborepo,这 3 个坑我帮你踩完了
前端
星栈12 小时前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架