Заикание изображения в Java ⇐ JAVA
Заикание изображения в Java
Мои Java-изображения тормозят, как вы можете видеть в клипе. Я перепробовал все, но ничего не помогло.
объект пакета; импортировать java.awt.Color; импортировать java.awt.Graphics2D; импортировать main.GamePanel; общественный класс Cop расширяет Entity { GamePanel gp; общественный полицейский (GamePanel gp) { this.gp = gp; установитьЗначения по умолчанию(); } недействительный setDefaultValues () { скорость = 2; } общественное недействительное обновление () { int screenX = (int) (worldX - gp.player.worldX + gp.player.screenX); int screenY = (int) (worldY - gp.player.worldY + gp.player.screenY); if (Math.sqrt(Math.pow((gp.player.screenX - screenX), 2) + Math.pow((gp.player.screenY - screenY), 2)) > 200) { if (gp.player.screenX > screenX && gp.player.screenY > screenY) { worldX += скорость * Math.sqrt(0.5); worldY += скорость * Math.sqrt(0.5); } else if (gp.player.screenX > screenX && gp.player.screenY < screenY) { worldX += скорость * Math.sqrt(0.5); worldY -= скорость * Math.sqrt(0.5); } else if (gp.player.screenX < screenX && gp.player.screenY > screenY) { worldX -= скорость * Math.sqrt(0.5); worldY += скорость * Math.sqrt(0.5); } else if (gp.player.screenX < screenX && gp.player.screenY < screenY) { worldX -= скорость * Math.sqrt(0.5); worldY -= скорость * Math.sqrt(0.5); } else if (gp.player.screenX == screenX && gp.player.screenY > screenY) { мирX += скорость; } else if (gp.player.screenX == screenX && gp.player.screenY < screenY) { мирX -= скорость; } else if (gp.player.screenY == screenY && gp.player.screenX > screenX) { мирY += скорость; } else if (gp.player.screenY == screenY && gp.player.screenX < screenX) { worldY -= скорость; } } еще { стрелять(); } } общественная недействительная съемка () { gp.aSetter.spawnBullet(); } общественная недействительная ничья (Graphics2D g2) { int screenX = (int) (worldX - gp.player.worldX + gp.player.screenX); int screenY = (int) (worldY - gp.player.worldY + gp.player.screenY); //g2.drawLine((int) gp.player.screenX, (int) gp.player.screenY, screenX, screenY); if (worldX + gp.tileSize > gp.player.worldX - gp.player.screenX && worldX - gp.tileSize < gp.player.worldX + gp.player.screenX && worldY + gp.tileSize > gp.player.worldY - gp.player.screenY && worldY - gp.tileSize < gp.player.worldY + gp.player.screenY) { g2.setColor(Цвет.белый); g2.fillRect(screenX, screenY, gp.tileSize, gp.tileSize); } } } Возможно, это проблема с моим игровым циклом? Я понятия не имею, что происходит. Мой плеер двигается нормально, а два других изображения - нет.
https://imgur.com/a/2EG2BmI
Игровая панель:
пакет основной; импортировать java.awt.*; импортировать javax.sql.ConnectionPoolDataSource; импортировать javax.swing.JPanel; импортировать объект.Cop; импортировать объект.Player; импортировать объект.СуперОбъект; импортировать объект.Пуля; импортировать плитку.TileManager; публичный класс GamePanel расширяет JPanel и реализует Runnable { окончательный int originalTileSize = 16; окончательный масштаб int = 3; общественный окончательный int tileSize = originalTileSize * масштаб; публичный финал int maxScreenCol = 16; публичный финал int maxScreenRow = 12; публичный окончательный int screenWidth = tileSize * maxScreenCol; публичный окончательный int screenHeight = tileSize * maxScreenRow; публичный финал int maxWorldCol = 50; публичный финал int maxWorldRow = 50; публичный финал int worldWidth = tileSize * maxWorldCol; публичный финал int worldHeight = tileSize * maxWorldRow; интервал FPS = 60; TileManager tileM = новый TileManager(this); KeyHandler keyH = новый KeyHandler(); Поток игрыThread; публичный игрок Player = новый игрок (this, keyH); общественный AssetSetter aSetter = новый AssetSetter (это); публичный SuperObject obj[] = новый SuperObject[10]; публичный полицейский полицейский[] = новый полицейский[4]; public Bullet Bullet[] = новый Bullet[4]; общедоступная логическая играRunning; общественные int fps, кадры; общественная плавающая дельта; public int WantFPS = 60; общественная GamePanel() { this.setPreferredSize(new Dimension(screenWidth, screenHeight)); this.setBackground(Color.black); this.setDoubleBuffered(истина); this.addKeyListener(keyH); this.setFocusable(истина); } общественная недействительность setupGame() { aSetter.setObject(); aSetter.setCops(); } общественный недействительный startGameThread () { gameThread = новая тема (это); gameThread.start(); } @Override общественный недействительный запуск () { двойной drawInterval = 1000000000/FPS; двойная дельта = 0; longlastTime = System.nanoTime(); длинный currentTime; while (gameThread != null) { currentTime = System.nanoTime(); дельта += (currentTime - LastTime) / drawInterval; ПоследнееВремя = ТекущееВремя; если(дельта = 1) { обновлять(); перекрасить(); дельта —; } } } общественное недействительное обновление () { игрок.обновление(); копы[0].update(); } public voidpaintComponent(Graphics g) { супер.paintComponent(г); Графика2D g2 = (Graphics2D)g; tileM.draw(g2); for (int i = 0; i < Bullets.length; i++) { if (bullets != null) { пули.draw(g2, это); } } for (int i = 0; i
Мои Java-изображения тормозят, как вы можете видеть в клипе. Я перепробовал все, но ничего не помогло.
объект пакета; импортировать java.awt.Color; импортировать java.awt.Graphics2D; импортировать main.GamePanel; общественный класс Cop расширяет Entity { GamePanel gp; общественный полицейский (GamePanel gp) { this.gp = gp; установитьЗначения по умолчанию(); } недействительный setDefaultValues () { скорость = 2; } общественное недействительное обновление () { int screenX = (int) (worldX - gp.player.worldX + gp.player.screenX); int screenY = (int) (worldY - gp.player.worldY + gp.player.screenY); if (Math.sqrt(Math.pow((gp.player.screenX - screenX), 2) + Math.pow((gp.player.screenY - screenY), 2)) > 200) { if (gp.player.screenX > screenX && gp.player.screenY > screenY) { worldX += скорость * Math.sqrt(0.5); worldY += скорость * Math.sqrt(0.5); } else if (gp.player.screenX > screenX && gp.player.screenY < screenY) { worldX += скорость * Math.sqrt(0.5); worldY -= скорость * Math.sqrt(0.5); } else if (gp.player.screenX < screenX && gp.player.screenY > screenY) { worldX -= скорость * Math.sqrt(0.5); worldY += скорость * Math.sqrt(0.5); } else if (gp.player.screenX < screenX && gp.player.screenY < screenY) { worldX -= скорость * Math.sqrt(0.5); worldY -= скорость * Math.sqrt(0.5); } else if (gp.player.screenX == screenX && gp.player.screenY > screenY) { мирX += скорость; } else if (gp.player.screenX == screenX && gp.player.screenY < screenY) { мирX -= скорость; } else if (gp.player.screenY == screenY && gp.player.screenX > screenX) { мирY += скорость; } else if (gp.player.screenY == screenY && gp.player.screenX < screenX) { worldY -= скорость; } } еще { стрелять(); } } общественная недействительная съемка () { gp.aSetter.spawnBullet(); } общественная недействительная ничья (Graphics2D g2) { int screenX = (int) (worldX - gp.player.worldX + gp.player.screenX); int screenY = (int) (worldY - gp.player.worldY + gp.player.screenY); //g2.drawLine((int) gp.player.screenX, (int) gp.player.screenY, screenX, screenY); if (worldX + gp.tileSize > gp.player.worldX - gp.player.screenX && worldX - gp.tileSize < gp.player.worldX + gp.player.screenX && worldY + gp.tileSize > gp.player.worldY - gp.player.screenY && worldY - gp.tileSize < gp.player.worldY + gp.player.screenY) { g2.setColor(Цвет.белый); g2.fillRect(screenX, screenY, gp.tileSize, gp.tileSize); } } } Возможно, это проблема с моим игровым циклом? Я понятия не имею, что происходит. Мой плеер двигается нормально, а два других изображения - нет.
https://imgur.com/a/2EG2BmI
Игровая панель:
пакет основной; импортировать java.awt.*; импортировать javax.sql.ConnectionPoolDataSource; импортировать javax.swing.JPanel; импортировать объект.Cop; импортировать объект.Player; импортировать объект.СуперОбъект; импортировать объект.Пуля; импортировать плитку.TileManager; публичный класс GamePanel расширяет JPanel и реализует Runnable { окончательный int originalTileSize = 16; окончательный масштаб int = 3; общественный окончательный int tileSize = originalTileSize * масштаб; публичный финал int maxScreenCol = 16; публичный финал int maxScreenRow = 12; публичный окончательный int screenWidth = tileSize * maxScreenCol; публичный окончательный int screenHeight = tileSize * maxScreenRow; публичный финал int maxWorldCol = 50; публичный финал int maxWorldRow = 50; публичный финал int worldWidth = tileSize * maxWorldCol; публичный финал int worldHeight = tileSize * maxWorldRow; интервал FPS = 60; TileManager tileM = новый TileManager(this); KeyHandler keyH = новый KeyHandler(); Поток игрыThread; публичный игрок Player = новый игрок (this, keyH); общественный AssetSetter aSetter = новый AssetSetter (это); публичный SuperObject obj[] = новый SuperObject[10]; публичный полицейский полицейский[] = новый полицейский[4]; public Bullet Bullet[] = новый Bullet[4]; общедоступная логическая играRunning; общественные int fps, кадры; общественная плавающая дельта; public int WantFPS = 60; общественная GamePanel() { this.setPreferredSize(new Dimension(screenWidth, screenHeight)); this.setBackground(Color.black); this.setDoubleBuffered(истина); this.addKeyListener(keyH); this.setFocusable(истина); } общественная недействительность setupGame() { aSetter.setObject(); aSetter.setCops(); } общественный недействительный startGameThread () { gameThread = новая тема (это); gameThread.start(); } @Override общественный недействительный запуск () { двойной drawInterval = 1000000000/FPS; двойная дельта = 0; longlastTime = System.nanoTime(); длинный currentTime; while (gameThread != null) { currentTime = System.nanoTime(); дельта += (currentTime - LastTime) / drawInterval; ПоследнееВремя = ТекущееВремя; если(дельта = 1) { обновлять(); перекрасить(); дельта —; } } } общественное недействительное обновление () { игрок.обновление(); копы[0].update(); } public voidpaintComponent(Graphics g) { супер.paintComponent(г); Графика2D g2 = (Graphics2D)g; tileM.draw(g2); for (int i = 0; i < Bullets.length; i++) { if (bullets != null) { пули.draw(g2, это); } } for (int i = 0; i
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение