gpt4 book ai didi

java - 将操纵杆绑定(bind)到一个圆圈

转载 作者:行者123 更新时间:2023-11-29 10:13:47 24 4
gpt4 key购买 nike

这是我的一段代码。我试图将我的对象限制在一个圆圈而不是一个正方形中,但是我的代码有一些我无法弄清楚的错误。我有有效的矩形边界和无效的圆形边界。

        // get the pos
_touchingPoint.x = (int)event.getX();
_touchingPoint.y = (int)event.getY();

angle = Math.atan2(_touchingPoint.y , _touchingPoint.x);

// bound to a box
if( _touchingPoint.x < 75){
_touchingPoint.x = 75;
}
if ( _touchingPoint.x > 225){
_touchingPoint.x = 225;
}
if (_touchingPoint.y < 300){
_touchingPoint.y = 300;
}
if ( _touchingPoint.y > 450 ){
_touchingPoint.y = 450;
}
//bound to a circle
if( _touchingPoint.x < 75 * Math.cos(angle))
{
_touchingPoint.x = (int) (75 * Math.cos(angle));
}
if ( _touchingPoint.x > 225 * Math.cos(angle))
{
_touchingPoint.x = (int) (225 * Math.cos(angle));
}
if ( _touchingPoint.y < 300 * Math.sin(angle))
{
_touchingPoint.y = (int) (300 * Math.sin(angle));
}
if ( _touchingPoint.y > 450 * Math.sin(angle))
{
_touchingPoint.y = (int) (450 * Math.sin(angle));
}

_touchingPoint.x 和 _touchingPoint.y 代表我试图约束的对象(操纵杆)。我想我可以尝试简单的触发来将操纵杆限制为一个圆圈,但我想我错了。

设置圆约束的最佳方法是什么?

最佳答案

你似乎试图将位置限制在一个圆盘上,而不是一个作为其边界的圆。我将通过从中心重新缩放偏移 vector 来完成此操作:

    double dx = event.getX() - 150;
double dy = event.getY() - 375;
double len = Math.hypot(dx, dy);
if (len > 75) {
dx = dx*75/len;
dy = dy*75/len;
}
_touchingPoint.x = (int)dx + 150;
_touchingPoint.y = (int)dy + 375;

关于java - 将操纵杆绑定(bind)到一个圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24392603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com