已知角度,求朝某角度移动到边界

一个弹珠类游戏,player是玩家弹珠,A是弹珠;
两个需要发生碰撞,并产生反弹效果;
最初使用的是物理碰撞,开启了重力,重力值为0,控制的是刚体速度,发现并不能很好的向角度进行移动;

目前使用的碰撞组件,使用的moveTO移动坐标,我想实现的效果并不是移动到这个目标,而是控制好角度后,朝这个角度按指定的速度移动;(发现使用碰撞组件后,碰撞效果还得自己来写动画…)

上之前自己写的代码:

this.beijing.on(cc.Node.EventType.TOUCH_END, this.playerx, this); // 离开屏幕时调用player函数 ;
playerx(event: cc.Event.EventTouch) { // 手指离开时 ,同 第35行代码作用一样 ;
let chumo = event.getLocation(); // 获取触摸手指X、Y坐标
let x = chumo.x - this.player.node.x + cc.Camera.main.node.position.x //获取两点之间X距离
let y = chumo.y - this.player.node.y + cc.Camera.main.node.position.y //获取两点之间Y距离
let zb = Math.atan2(chumo.x - this.player.node.x + cc.Camera.main.node.position.x, chumo.y - this.player.node.y + cc.Camera.main.node.position.y) //获取触摸手指到对象的弧度
let jiaodu = zb * 180 / Math.PI //弧度转化为角度
this.move = cc.moveTo(1, chumo.x + cc.Camera.main.node.position.x, chumo.y + cc.Camera.main.node.position.y) // 移动到目标坐标
this.player.node.runAction(this.move) // player 对象移动到move坐标;
}

该代码只能实现移动到某个点,而不能实现朝这个角度一直移动到边界的功能;

萌新小白,还请大佬指导!~ @lbeeboy

没仔细看你说的,貌似可以理解成 求方向向量和边界向量的交点 然后移动到交点

嗯,可以这么理解;

移动到边界

目前能想到两个方案:
1.直线斜率计算向
已知球所在的点和触摸点,求过这两点直线的斜率;确定这条直线与边界相交的点的一个坐标(x或者y),能求得最终点。
难点是怎么确定是哪个边界,你说启用了碰撞,如果真这么搞,碰撞的意义何在
2.方向单位向量向
已知球所在的点和触摸点,求球指向触摸点的方向向量,方向向量标准化一下,按这个方向移动就是了,当碰到边界,enter触发时做其他逻辑就好了。
类似这种逻辑:
private speed:number = 1;
private isCanMove:boolean = false;
private moveDir:cc.Vec2 = new cc.Vec2(0,0);

playerx(event: cc.Event.EventTouch) {
this.isCanMove = true;
let chumo = event.getLocation();
this.moveDir = this.player.node.position.sub(chumo).normalize();
}

update(dt:number){
if(this.isCanMove){
this.player.node.setPosition(this.node.position.add(this.moveDir.mul(this.speed*dt)));
}
}

onCollisionEnter(other:any, self:any) {
this.isCanMove = false;
this.moveDir = new cc.Vec2(0,1);//temp
}

伪代码,慎用,哈哈,感觉没用Action的必要。

pos.mul(cc.winSize.width*pos.normalizeSelf());

1赞

我试试看