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.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,但可以是)。至于生成实际的数字-尝试和错误。