基本上,我正在制作一款可以更新玩家位置的游戏,它使用以下线程:
@Override
public void run() {
while(true) {
System.out.println();
updatePos(x, y);
}
}
效果很好,但是如果我删除System.out.println(),它将停止运行。我不知道为什么会这样,整个班级如下:
public class Player extends Block implements KeyListener, Runnable {
int x;
int y;
int speed;
boolean upPressed;
boolean downPressed;
boolean rightPressed;
boolean leftPressed;
static Sprite sprite = new Sprite("grass.png");
public Player(int x, int y, int speed) {
super(x, y, sprite);
this.x = x;
this.y = y;
this.speed = speed;
Thread playerThread = new Thread(this, "Player Thread");
playerThread.start();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
y -= speed;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN)
downPressed = true;
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
rightPressed = true;
if (e.getKeyCode() == KeyEvent.VK_LEFT)
leftPressed = true;
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP)
upPressed = false;
if (e.getKeyCode() == KeyEvent.VK_DOWN)
downPressed = false;
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
rightPressed = false;
if (e.getKeyCode() == KeyEvent.VK_LEFT)
leftPressed = false;
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void run() {
while(true) {
System.out.println();
updatePos(x, y);
}
}}
最后说明:传入布尔值upPresses和downPressed,我唯一要关注的是:
if (e.getKeyCode() == KeyEvent.VK_UP) {
y -= speed;
}
像这样的循环
while(true) {
updatePos(x, y);
}
会完全占用CPU。它开始表现更好的原因println
可能是因为您为I / O每次迭代产生了数百个周期。
我建议您根据所需的帧速率添加一个小的睡眠方法:
while (true) {
try {
Thread.sleep(10); // for 100 FPS
} catch (InterruptedException ignore) {
}
updatePos(x, y);
}
甚至更好的是使用 事件驱动的方法
(例如使用)java.util.Timer
。(那将是Java惯用的。)
我正在寻求帮助,以解决从一个剧本中运行具有相同角色的应用程序的多个版本(不同变量)的问题。 我们有一个具有多个产品系列的应用程序,这些产品系列是不同的代码版本。每个版本都有单独的uWSGI附庸配置和Nginx虚拟主机配置(/api/v2,/api/v3,...). 理想的状态应该是运行剧本并用指定的所有版本配置服务器。 遗憾的是,ansible的< code > import _ role/imp
问题内容: 我有2张桌子- : 第二张桌子- : 我只需要选择未取消的预订(在此示例中仅为ID 3)。我可以轻松地选择带有简单条件的已取消,但由于未在此处取消工作,因此我在努力避免未取消。 问题答案: 要么: 第一个版本更直观,但是我认为第二个版本通常可以获得更好的性能(假设您在联接中使用的列上有索引)。 第二个版本有效,因为返回第一个表中所有行的一行。当条件成功,这些行会包括从第二表中的列,就像
当我执行这段代码时,输出是“140”,也就是“28*5”,但它应该是“150”,也就是“28+31+30+31+30”,它应该计算两个月“2月”和“7月”之间的天数...所以这意味着for循环不能正常工作还是怎么的?为什么会这样!你能帮我一下吗??PS:我试图将循环中的j++更改为j+1,但Android Studio说“这不是一个声明”
问题内容: 我的JSP页面(jQuery 1.7.2)中有以下jQuery代码: 在执行此代码之前,将注册一个和侦听器。像这样: 整个页面可以在http://alpha.sertal.ch:8181/VisionWeb/data- details/#data:12300923 下访问 您甚至可以登录。用户:Alsoft03密码:密码 第一次进行ajax调用时应该发生的是401错误,因为用户未登录。
问题内容: 我是Java中的多线程和同步的新手。我正在尝试实现一项任务,其中给了我5个文件,每个文件将由一个特定线程读取。每个线程应从文件读取一行,然后将执行转发到下一个线程,依此类推。当所有5个线程都读取第一行时,然后再次从线程1运行行号开始。文件1中的2,依此类推。 并且在ReadFile(在run方法中实现Runnable的情况下,我正在尝试在bufferreader对象上进行同步。 需要帮
我是java多线程和同步的新手。我试图实现一个任务,其中我给了5个文件,每个文件将由一个特定的线程读取。每个线程应该从文件中读取一行,然后将执行转发给下一个线程,依此类推。当所有5个线程读取第一行时,再次从线程1开始运行文件1的第2行,依此类推。 并且在ReadFile(实现Runnable的,在run方法中,我正在尝试在缓冲区读取器对象上同步。 需要帮助