
控制玩家只可以在屏幕尺寸的范围内移动,不能越界,所以需要边界控制,需要先在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) {}
}