Java 数学/物理游戏引擎问题(与近项相关的远项移动)

Java 数学/物理游戏引擎问题(与近项相关的远项移动),java,android,math,game-engine,physics,Java,Android,Math,Game Engine,Physics,我正在开发一个游戏引擎。这更复杂,但我会将环境简化为一个非常小的情况,以便轻松解释我的问题: 游戏是在2D中使用简单视图制作的。屏幕上出现了一些视图。游戏引擎模拟这些视图进入屏幕,对视图执行scaleX和scaleY动画,这些视图将碰撞到屏幕上 游戏在屏幕上有一个操纵杆,它可以产生从-10到+10px的运动,用户可以使用它来避开物体 如果将操纵杆移动到最右侧,则+10将添加到屏幕上的所有对象中,并且每10毫秒屏幕将重新绘制一次,因此,当移动操纵杆时,每10毫秒对象将移动一次,用户将具有避免对象

我正在开发一个游戏引擎。这更复杂,但我会将环境简化为一个非常小的情况,以便轻松解释我的问题:

  • 游戏是在2D中使用简单视图制作的。屏幕上出现了一些视图。游戏引擎模拟这些视图进入屏幕,对视图执行scaleX和scaleY动画,这些视图将碰撞到屏幕上
  • 游戏在屏幕上有一个操纵杆,它可以产生从-10到+10px的运动,用户可以使用它来避开物体
  • 如果将操纵杆移动到最右侧,则+10将添加到屏幕上的所有对象中,并且每10毫秒屏幕将重新绘制一次,因此,当移动操纵杆时,每10毫秒对象将移动一次,用户将具有避免对象的模拟3d效果
  • 我想表示距离较远的对象的移动速度不如离屏幕很近的对象快,因此我这样做:

    view = new ImageView(context){
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);                       
            float currentScale = (Float) scaleX.getAnimatedValue();             
            float factor= currentScale/MAX_SCALE; 
            view.setX(view.getX()-((float)GameState.getInstance().getJoyX()*factor));
            view.setY(view.getY()-((float)GameState.getInstance().getJoyY()*factor));
        }
    };
    
如你所见,我计算了一个系数。最远的对象的比例因子为0.1f,最近的对象的比例因子为4.0f,因此这些是该因子的一些可能值:

0.1/4 = 0.025
0.5/4 = 0.125
1.0/4 = 0.250
2.0/4 = 0.500
4.0/4 = 1.000
当我乘以该因子的上方向运动时,我可以重现最远的物体比最近的物体移动得慢

问题是,当对象太远时,运动不真实,因此我需要帮助找到一个更真实的因子来乘以对象的超高运动,并在移动操纵杆时获得更真实的3D效果

*游戏更加复杂,y轴也出现在运动中,但我用x轴解释它只是为了让它更简单


谢谢你

我很难想象你的问题。或者我不明白你所说的
是什么意思。问题是当物体太远时,运动就不真实了。你有没有试过一个因子查找表,这样比例就不是线性的了?嗯。。。要获得一个完全自然的外观而不“思考3D”可能有点复杂。我的猜测是,从“操纵杆”到“视图”的角度应至少关联为
1/r
,其中r是到视图的距离。如果我们将操纵杆移动x距离,与对象的角度将随着~
tan(角度)=x/r
而改变。但这仅适用于正前方的对象,靠近屏幕边缘的对象的值会有所不同。听起来你想要某种3D平截头体?@MorrisonChang问题是,当物体非常远(0.1-0.2比例等)时,它的移动速度非常慢,当比例突然增加时,它会以更真实的方式移动。我没有尝试使用非线性因子,因为我不知道如何生成非线性因子。你知道如何实现吗?@pingul没有角度,因为这是一个2d游戏,而且物品之间没有距离。距离由比例因子模拟。这是一个模拟物体进入玩家视野的游戏,玩家必须避免它们在x-y方向移动车辆directions@NullPointerException查找表可以是散列或数组,其中输入是您的比例,因子是其他数字(不一定是4,但可以是)。至于生成实际的数字-尝试和错误。我很难想象你的问题。或者我不明白你所说的
是什么意思。问题是当物体太远时,运动就不真实了。你有没有试过一个因子查找表,这样比例就不是线性的了?嗯。。。要获得一个完全自然的外观而不“思考3D”可能有点复杂。我的猜测是,从“操纵杆”到“视图”的角度应至少关联为
1/r
,其中r是到视图的距离。如果我们将操纵杆移动x距离,与对象的角度将随着~
tan(角度)=x/r
而改变。但这仅适用于正前方的对象,靠近屏幕边缘的对象的值会有所不同。听起来你想要某种3D平截头体?@MorrisonChang问题是,当物体非常远(0.1-0.2比例等)时,它的移动速度非常慢,当比例突然增加时,它会以更真实的方式移动。我没有尝试使用非线性因子,因为我不知道如何生成非线性因子。你知道如何实现吗?@pingul没有角度,因为这是一个2d游戏,而且物品之间没有距离。距离由比例因子模拟。这是一个模拟物体进入玩家视野的游戏,玩家必须避免它们在x-y方向移动车辆directions@NullPointerException查找表可以是散列或数组,其中输入是您的比例,因子是其他数字(不一定是4,但可以是)。至于生成实际的数字-尝试和错误。