Tag: 游戏循环

如果没有触摸事件发生,Android SurfaceView会变慢

我正在制作一个游戏,除了游戏循环外,一切都很顺利。 我正在使用SurfaceView并绘制2D Sprites(位图)。 目前游戏是一艘穿越小行星场的船。 船停留在屏幕的中心,手机向任一方向倾斜以移动小行星(小行星改变位置而不是玩家)。 新的小行星产生的旧小行星从屏幕上掉下来,形成无限的小行星场感。 在我的Nexus 5上运行时,我注意到大约3秒后,尽管我的游戏循环设置为60fps,但小行星在屏幕上移动变得不稳定。 这是代码: @Override public void run() { Canvas canvas; long startTime; long timeTaken; long sleepTime; while (running) { canvas = null; //Update and Draw try { startTime = System.nanoTime(); canvas = gameView.getHolder().lockCanvas(); //Update gameModel.update(gameController.getPlayerShots(), gameController.getCurrentTilt()); //Game Over? if (gameModel.isGameOver()) { running = false; } //Draw synchronized (gameView.getHolder()) { […]

在不冻结UI线程的情况下实现游戏循环的最佳方法

我正在尝试用Java制作一个简单的2D游戏。 到目前为止,我有一个带有菜单栏的JFrame ,以及一个扩展JPanel并覆盖它的paint方法的类。 现在,我需要进行游戏循环,在那里我将更新图像的位置等等。 但是,我坚持如何最好地实现这一目标。 我应该使用multithreading,因为当然,如果你在主线程上放置一个无限循环,UI(以及我的菜单栏)会冻结吗? 到目前为止,这是我的代码: import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; @SuppressWarnings(“serial”) public class GameCanvas extends JPanel { public void paint(Graphics g) { while (true) { g.setColor(Color.DARK_GRAY); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; @SuppressWarnings(“serial”) public class Main extends […]

用于游戏循环的Java TimerTick事件

我尝试使用java.util.Timer中的Timer在Java中进行游戏循环。 在计时器滴答声期间,我无法让我的游戏循环执行。 以下是此问题的示例。 我试图在游戏循环期间移动按钮,但它没有继续计时器滴答事件。 import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; import javax.swing.JButton; public class Window extends JFrame { private static final long serialVersionUID = -2545695383117923190L; private static Timer timer; private static JButton button; public Window(int x, int y, int width, int height, String title) { this.setSize(width, height); this.setLocation(x, y); this.setTitle(title); this.setLayout(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); timer = […]