我有一个:
@Override
public boolean onTouchEvent(MotionEvent event) {
synchronized (event)
{
try {
Thread.sleep(16);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(event.getAction() == MotionEvent.ACTION_DOWN){
isDown = true;
}else if(event.getAction() == MotionEvent.ACTION_MOVE){
isDown = true;
}else if(event.getAction() == MotionEvent.ACTION_UP){
isDown = false;
}
return true;
}
}
然后在我的MainGame thread
我使用setCharacterPosition();
public void setCharacterPosition(){
if(isDown){
CharacterX += 32;
}
}
但是这让我的角色太快了,所以我试着添加:
Thread.sleep(500);
因为我只希望我的角色每半秒增加32点。
IT可行,但我的FPS降至2-3。
我该怎么做?
//西蒙
答案 0 :(得分:3)
我对Java或Android知之甚少,但这似乎是一种错误的方法。
你所追求的是建立一个游戏循环(一个循环,连续运行并逐帧更新游戏逻辑)。
此循环以定时间隔执行(通常为每秒60帧,或者在移动平台上可能更少)。
在每个帧上,您可以根据自上一帧开始经过的时间缩放游戏对象的移动。
这会产生缩放的移动,与您正在使用的设备的时钟速度无关。
在这些优质资源中阅读更多abot游戏循环:
答案 1 :(得分:0)
Android UI基于单线程模型,因此请勿阻止UI线程。你的onTouchEvent在UI线程中执行...当你调用Thread.sleep时,你正在让你的UI线程在特定的时间段内休眠。
希望这有帮助。参考:Painless Threading