Articles of Java

如何为多个可执行文件制作启动程序?

我正在尝试为我喜欢的游戏制作一个启动器,将香草版本和mods编译成一个启动器。 我想要做到这一点,所以我可以select不同的版本,也许有一个基本的GUI。 游戏的原始版本是用Java编写的,但是我用Launch4j把它们转换成了.EXE,而且工作正常。

Java Thread.sleep()VS获取最后和当前时间

我正在使用Java创建一个简单的游戏。 我没有使用任何游戏库。 我只是想知道在调用repaint()之前调用Thread.sleep(40)是否可以。 public void run() { while(isGameRunning) { try { Thread.sleep(40); repaint(); } catch(Exception e) { } } } 或者我应该使用: private long last_time = System.nanoTime(); private double ns = 1000000000/25D; private double delta = 0; @Override public void run() { while(Universe.IsGameRunning) { long time = System.nanoTime(); delta += (int)(time – last_time)/ns; last_time = time; […]

如何使这种Flock行为在Java中工作?

我在执行Flock行为时遇到了麻烦。 我期望的是,boids应该移向鼠标坐标,但他们不。 提前致谢。 import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JPanel; public class MainPanel extends JPanel implements Runnable, MouseMotionListener{ private Target mouse; private List<Boid> boids; int delay = 20; private int width = 900, height = 900; Thread thread; public MainPanel() { setPreferredSize(new […]

如何从图像中获取一个2Dvector地形以进行Java碰撞检测?

我正在尝试使用如下所示的地形来制作2D纯Java游戏。 在之前的游戏中,我使用了基于瓷砖的collsions,但现在我想使用基于vector的collsions,因为不平坦的地形需要小块瓷砖。 我想知道的是,我如何从上图中获取vector,以及如何使用它们。 对于第一部分,我可以手动测量每个坐标,如下所示,但特别是对于更详细的更详细的地图,这将是一个巨大的工作量。 我想知道是否有办法做到这一点更容易。 我见过的工具可以让你在图像上绘制vector,但是这些工具只能导出到像Box2D和Unity这样的引擎,这些引擎是用不同的代码语言编写的。 正如我之前所说,我只想使用Java。 对于第二部分,如果我有vector的坐标,我该怎么处理它们呢? 我以前使用矩形,但现在我需要使用连接每个坐标的线或多边形。 另外,如何检查玩家的多边形或矩形与形成地形的多边形或线条之间的碰撞? 当使用长方形时,我可以使用playerR.Intersects(terrainR) ,但我怎样才能做到这一点与地形? 一个易于理解的教程的链接也是一个很好的答案,特别是对于我的问题的最后一部分。 提前致谢。

为什么我的libGDX TextureRegion.split代码无法正常工作?

我在Android上的libGDX中使用scene2d作为我正在开发的游戏的一部分。 我有一个简单的启animation面,我试图显示一个单一的图像。 该图像来自其中包含两个图块的文件,我使用TextureRegion.split()来访问它。 我的问题是,整个图像显示,而不是只是第一个瓷砖。 这里是代码片段来说明我在做什么。 你应该能够把它放在一个基本的libGDX应用程序来testing它。 我正在使用的图像是尺寸为460宽X 342,(2砖460X171)的PNG。 我正在使用最新的libGDX,从libGDX安装工具中获得。 我的代码有什么问题? TextureRegion[][] tiles = new TextureRegion( new Texture( Gdx.files.internal( "foo.png" ) ) ) .split( 460, 171 ); Stage stage; Table table; stage = new Stage(); table = new Table(); table.setFillParent(true); stage.addActor(table); Texture fooTex = tiles[ 0 ][ 0 ].getTexture(); Image fooImg = new Image( fooTex ); […]

爪哇 – 同时地面和墙壁碰撞

我一直在研究一个基于Line2D的碰撞系统: public void update() { for (int i = 0; i < lines.size(); i++) { line = lines.get(i); if (line.line.intersects(player.hitbox)) playerCollision(); } } public void playerCollision() { if (Math.abs(line.angle) <= 45) { player.jumped = false; if (player.speedY > 0) player.speedY = 0; // inefficient? while (line.line.intersects(player.hitbox)) { player.centerY–; player.hitbox.setRect(player.centerX – player.WIDTH / 2, player.centerY – […]

这个单例类可以导致内存泄漏吗?

在我使用LibGdx编写的游戏中,我想知道是否在Android主键被按下或接到电话并且游戏暂停时会发生内存泄漏。 我有一个Singleton类,它拥有我所有的游戏资产,我使用静态方法来访问它。 public class Assets { private static Assets assetsInstance; private Assets() { //load assets…. } public static Assets getInstance() { if (assetsInstance == null) { assetsInstance = new Assets(); } return assetsInstance; } public void nullAssets() { //here things are set to null assetsInstance = null; } } 在我的主类: public class Main extends ApplicationAdapter […]

当我拖动JLabel时,为什么出现在不同的位置?

我正在做一个跳棋比赛,performance的很奇怪。 到目前为止,我只是想要获得网格布局等基础知识,并且能够获得可移动的部分。 我的8乘8格开放得很好,所有的部分都正确地放在面板上,使用两个组件: 面板 : JPanels在一个单独的class级,64总黑色和白色,并使用GridLayout填充到中心centerPanel 。 每个面板都有一个特定的行和列值( checkerPanel[row][col] )。 PIECES :他们实际上是JLabels的文本“•”他们被放大,以便他们填写面板。 他们被放置在红队前3排的白色面板上,并放在灰色队的最后3排。 当我尝试拖动一块时,从左上方的一块打开一个新的块。 当左上角的一块被拖到不动的旧件上时,旧件被删除,新的件代替。 我怎样才能使这些作品的行为正确,从旧的地方,而不是左上角? 查看java.awt.Graphics会更容易吗? 我已经看了这个StackOverflow的问题 ,并search了Oracle JavaDocs ,但仍然无法弄清楚什么是错的。 这是我目前的计划: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Checkers extends JFrame { private static final long serialVersionUID = 1l; private static final int GRIDSIZE = 8; private CheckerPanel[][] checkerPanel = new CheckerPanel[GRIDSIZE][GRIDSIZE]; public […]

这是一个固定的时间步游戏循环的正确实施?

public static void main(String[] args) { long newTime, delta, timeSince1Second, startTime, oldTime; long ticks = 0; double frameCap = 1000/60; double time_passed = 0; startTime = System.currentTimeMillis(); oldTime = System.currentTimeMillis(); while(true) { newTime = System.currentTimeMillis(); delta = newTime – oldTime; timeSince1Second = newTime – startTime; currentTime = newTime; //update game based on dynamic time step […]

如何检测密钥是否被保留?

我试图做一个躲闪的游戏,从玩家必须躲避或收集的窗口顶部落下物体,这取决于它是三角形还是圆形。 现在我正在做布局,并制作一个可笑的图标,这是一个笑脸表情符号。 我正在使用keyListener来移动图标(使用WASD控件)。 现在当你想用keyPressed方法移动图像时,你必须按下并释放按键,而不是按住它们。 我怎样才能让图标移动只需按住键,而不是快速按下和释放键? 信息:背景是玩家通过JOptionPaneselect的JLabel 。 所有的背景图片都在源文件夹中,都是500 * 300像素的JPG。 我的应用程序运行在Mac OS X上,如果有帮助的话。 谢谢,这是我的程序: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Dodge extends JFrame { private static final long serialVersionUID = 1l; String[] backDrops = {"space", "sky", "snow", "rain", "beach", "grass"}; ImageIcon backDrop; String[] options = {"Easy", "Medium", "Difficult"}; String result; String bd; int […]