我正在开发Android游戏(2.1+),使用加速度计作为用户输入.我使用传感器监听器,我在活动开始时使用传感器管理器注册,如下所示:
mSensorManager.registerListener(SystemRegistry.inputSystem.mSensorListener,
accSensor, SensorManager.SENSOR_DELAY_UI);
Run Code Online (Sandbox Code Playgroud)
这很好用,我只是读取加速度计值onSensorChanged(SensorEvent event),以便在我的游戏循环中使用它:
public void onSensorChanged(SensorEvent event){
accX = event.values[0];
accY = event.values[1];
accY = event.values[2];
}
Run Code Online (Sandbox Code Playgroud)
我正在写一个实时游戏,所以我试图避免在我的代码中进行任何内存分配,因为我想最小化垃圾收集.问题是,每次存在时SensorEvent,传感器管理器实际上都会分配内存.以下是ddms分配跟踪器的输出:
51 28 android.hardware.SensorEvent 9 android.hardware.SensorManager$ListenerDelegate createSensorEvent
50 28 float[] 9 android.hardware.SensorEvent <init>
Run Code Online (Sandbox Code Playgroud)
表示在每个事件中分配28*2 = 56个字节.这似乎有经常触发垃圾收集器的效果,这会导致一些滞后......所以这是我的问题:有没有办法实现相同的事情(获取当前的加速度向量),而不分配任何内存?有没有办法在不等待事件的情况下实际读取此向量的值?
我正在脚本中编写一些迭代图像处理算法(我不想使用iPython),我希望可视化每次迭代后生成的图像.在Matlab中很容易做到,而不会阻塞主线程,但我很难在Python中做到这一点.
在pylab中,show()函数是阻塞的,我需要关闭窗口以继续执行我的脚本.我看到有些人使用了ion()函数,但在我的情况下没有效果,例如:
pylab.ion()
img = pylab.imread('image.png')
pylab.imshow(img)
pylab.show()
Run Code Online (Sandbox Code Playgroud)
还在阻止.我也看到有人说"使用绘画代替情节"可以解决这个问题.但是,我不是在使用情节,而是使用imshow/show,这里有什么我想念的吗?
另一方面,PIL也有一些显示功能,但它似乎生成一个临时图像然后用imagemagick显示它,所以我假设这里没有办法显示图像并用这种方法在同一窗口中更新它.
我正在使用Ubuntu 10.10.
有没有人知道如何简单地做,或者我是否必须开始使用像Qt这样的东西来拥有一个我可以轻松更新的最小GUI?
我有很多工作要运行,比如100.它们可以并行运行,但每个都占用了大量内存,所以我只能同时运行8个.
我目前有这个shell脚本:
(
(python run.py $arg1 &)
(python run.py $arg2 &)
(python run.py $arg3 &)
(python run.py $arg4 &)
(python run.py $arg5 &)
(python run.py $arg6 &)
(python run.py $arg7 &)
(python run.py $arg8 &)
) 2>&1 | cat -u
(
(python run.py $arg9 &)
(python run.py $arg10 &)
(python run.py $arg11 &)
(python run.py $arg12 &)
(python run.py $arg13 &)
(python run.py $arg14 &)
(python run.py $arg15 &)
(python run.py $arg16 &)
) 2>&1 | cat -u
...
Run Code Online (Sandbox Code Playgroud)
这具有运行第一批八个的效果,当它们全部完成时,它开始下一批8个.问题是每个作业的运行时间不是恒定的,有些在其他作业之前完成,所以它是对于每批8个完成重量不是最佳的,因为我实际上正在等待8个中最慢的完成. …