今天还在做那个遥控器,UI基本上弄完了。昨天做到按住按键后连续触发事件,今天编写了具体的事件处理逻辑,比如引擎功率+1,顺手更新一下UI。目前有个问题在于,表示方向的SeekBar能拖动,但拖动了并没有用,再次点击转向会被打回去。已知的解决方案是继承SeekBar然后重写掉onStartTrackingTouch、onStopTrackingTouch和onProgressChanged这三个方法,不过今天就先不折腾了。
UDP包也能发送,就差填好具体发送的内容了。明天做这个。
今天踩到了一个坑,是关于Integer, int, Double, double的,虽然Double是double的内建引用类型,但不能把它简单理解成一个“指针”,因为它没有提供修改内容的方法。
使用一段简单的代码来说明这个问题:
class Main{ static void fky(Double a) { ++a; } public static void main(String[] args) { Double var = 0.0; //Double targetVar = var; //targetVar += 1; fky(var); System.out.println(var); } }
我需要在两个线程间共享一个double类型的变量,按照最基本的思路,我只要传一个引用作为参数就可以了。不过我发现,修改了Double之后,原值不变。比如这段代码,就输出0。
这是因为,Double没有提供修改其中的值的方法,如果对Double进行了计算,就相当于新造了一个Double,然后指向了它的引用。
也就是说,这个++a,意味着程序构造了一个新的Double,然后把a指向了它,而不是将其中的内容+1。类比C的写法:
void fky(double *a) { double *b = (double*) malloc(sizeof(double)); *b = *a + 1; a = b; }
这肯定没用的啦……而且Java又不提供&a这种引用传法,只好老老实实的构造了一个pDouble“指针”类。