我在Java中有一些编码来计算自上次检查变量以来虚拟摄像机中的移动。更具体地说,这段代码如下:
float movementX, movementY, movementZ;
movementX = (int) (camX - sectorSize[1]);
movementY = (int) (camY - sectorSize[2]);
movementZ = (int) (camZ - sectorSize[3]);
/*
* If the variable is below 0
* then get the absolute value
* of the movement since the
* last camera position.
*/
if (movementX < 0) movementX *= -1;
if (movementY < 0) movementY *= -1;
if (movementZ < 0) movementZ *= -1;
if (movementX > 60 || movementY > 60 || movementZ > 60)
{
//Reset the sector size to allow for new points,
//don't store to save memory (may be changed later).
sectorSize[0] = 0;
}
如果您需要更多代码,请与我们联系。 sectorSize变量在其[0]值中存储0-500,前一个camX在它的[1]值中,前一个camY在它的[2]值中,最后是前一个camZ在它的[3]值中。 camX,camY和camZ由其他代码处理(未显示)。删除了除了代码之外的所有内容以保持整洁。
此代码按原样运行,但每次输入“if(a_int_value&gt; an_other_value || etc)”有点单调乏味。
答案 0 :(得分:0)
将片刻放入int数组。
迭代数组搜索所有真实条件。如果遇到真实条件,请将标志标记为true并中断循环。最后,如果没有条件,则您的标志为false。
像这样。
boolean ok = false;
for ( int v : momentArray ) {
if ( v > 60 ) {
ok = true;
break;
}
}
if ( ok ) {
// ok, do something...
}
或
public static boolean checkForValues( int[] array, int min ) {
for ( int v : array ) {
if ( v > min ) {
return true;
}
}
return false;
}
// in another class...
if ( checkForValues( momentArray, 60 ) ) {
// ok, do something...
}
我假设所有条件都相同。如果它们不同,你也可以概括代码,但是你需要创建一个classe来存储条件......它不值得工作,因此最好编写条件。
另一件事。你只有树的价值。如果你有很多值(具有相同条件),我认为迭代会很好,但在你的场景中,我认为编写每个条件更好,因为Ghost说更容易理解代码。
[]的
答案 1 :(得分:0)
我会创建一个Movement类并对&#34; legal&#34;的参数进行编码。内在的运动。
然后你可以测试:movementX.isValid()。您还可以保留一个List或创建另一个类来包装三个轴,并使用一个isValid()方法进行测试。
您应该考虑将扇区大小存储在比数组更具描述性的内容中。
最后,为什么要将你的花车投射到int?这可以带来什么好处?如果您要删除小数,则有更好的方法可以截断或降低/降低值。
答案 2 :(得分:0)
在方法中创建一个本地类:
void myMethod ( )
{
class Movements
{
float movementX = (int) (camX - sectorSize[1]);
float movementY = (int) (camY - sectorSize[2]);
float movementZ = (int) (camZ - sectorSize[3]);
boolean check3Axes ( int commonValue )
{
return
movementX > commonValue
||
movementY > commonValue
||
movementZ > commonValue ;
}
void negate ( )
{
if (movementX > 0) movementX *= -1;
if (movementY > 0) movementY *= -1;
if (movementZ > 0) movementZ *= -1;
}
};
Movements m = new Movements( );
// This can be replaced with m.negate( )
if (m.movementX > 0) m.movementX *= -1;
if (m.movementY > 0) m.movementY *= -1;
if (m.movementZ > 0) m.movementZ *= -1;
if (m.check3Axes(60))
{
//do something..
}
if (m.check3Axes(120))
{
//do something else..
}
}
顺便说一句,您可能会发现可以向Movements类添加更多常用方法,例如negate()
。
但是,在某些时候,最好让运动成为常规课程。
答案 3 :(得分:0)
内在阶层看起来是最好的方式。太糟糕的java没有提供任何资源密集程度较低的东西,但是将一堆变量与同一个表达式进行比较的能力有很大帮助!