Articles of Java

在LWJGL VBO的纹理问题

我在VBO地形渲染器上工作。 现在我有两个烦恼: 虽然尝试呈现100×100地形,我有一个50×200的地形 纹理不是渲染。 我花了很多时间,我真的没有想法… 我怎样才能解决这个问题? 图片: http://img.ufgame.com/java/GiNFKOT.png 我的部分代码: public class NGINE2 { public static int MAX_PICKING_DISTANCE = 20; public static int RAY_RADIUS = 5; static int w = 640; static int h = 480; static float oldX = 0; static float oldY = 0; static float oldZ = 0; static FloatBuffer cBuffer; static FloatBuffer […]

LWJGL / OpenGL – 纹理方块不显示在其他透明纹理方块的后面

我有一个MapView类,它包含许多贴图(MapTile类,一个贴图可以在后台),顶点数组对象和用于渲染地图的顶点缓冲区对象。 我也有一个更新缓冲区的函数: // FloatBuffer(s) and IntBuffer for indices positionsBuffer = MemoryUtil.memAllocFloat( this.tiles.size() * 4 * 3 ); colorsBuffer = MemoryUtil.memAllocFloat( this.tiles.size() * 4 * 3 ); texCoordsBuffer = MemoryUtil.memAllocFloat( this.tiles.size() * 4 * 2 ); indicesBuffer = MemoryUtil.memAllocInt( this.vertexCount = this.tiles.size() * 2 * 3 ); TextureDefinition textureDefinition = game.getTexturesManager().getTextureDefinition("tiles"); int i = 0; for […]

Java – 实体冲突只适用于实体数组的最后一个索引

我正在创建一个Java 2d平台游戏/ sidescroller游戏的早期阶段,其中实体类需要(在这一点上)基本的矩形边界碰撞检测。 在我的代码中,我检查Player对象的静态Rectangle边界是否与Screen类中的“entities []”实体对象的Rectangle边界相交。 我的实现方法是在每个实体的顶部,底部,左侧和右侧渲染一个矩形。 我的代码几乎完全工作,因为它确实提供了碰撞检测,但是这只适用于数组中的最后一个实体对象。 即使Rectangle对象被正确定位和渲染,但除最后一个之外的每个实体对象都没有碰撞检测。 例如,如果我在我的屏幕类构造函数中调用方法“addEntities(3)”,只有第三个和最后的实体将实际上利用碰撞检测。 我知道碰撞检测工作,因为我已经调整了“checkCollision()”方法来检查不是最后一个实体数组的特定索引。 Rectangle边界也被正确渲染到每个实体精灵的屏幕上,所以我知道每个实体的Rectangle对象都在那里。 这里是我的一些Screen类的代码,它是Entitiy和Game类之间的中介: public Screen (int width, int height) { this.width = width; this.height = height; addEntities(2); // amount of entities to spawn } public void tick() { checkCollision(); // checks collision } public void render(Graphics g) { // renders all entities based on size of […]

使用lwjgl VBO – 缓冲区

有什么更好的使用java的lwjgl – 创建和绑定一个缓冲区到VBO和存储在这个缓冲区的全部世界,如果需要更新或为每个世界块创建分离的缓冲区,或为每个对象创建分离的vbo。 那么是什么,为什么更好;) 世界是相当大= 500 * 500 * 2三角形+对象 – 树,草…我必须从其他线程更新部分od缓冲区的每一帧。 对不起我的英语不好 :)

如何在JOML和LWJGL3中使用四元数

我正在使用LWJGL3和JOML(math库)实现一个太空fps游戏(太空中没有太多的空间!)。 我游戏中的实体有一个基于向前,向上和向右的旋转。 我使用俯仰,偏航和滚转方法来旋转我的实体。 这些方法可以进一步在伪代码中看到。 当我为实体构建模型matrix时,我将根据上述3个向量计算旋转matrix并应用它。 在伪代码中可以进一步看到。 我也使用角和线性加速度和速度旋转和移动一个实体。 在伪代码中可以进一步看到。 实体: Vector3f position Vector3f scale Vector3f forward Vector3f up Vector3f right private Vector3f linearAcc private Vector3f linearVel private Vector3f angularAcc private Vector3f angularVel public void pitch(double angle) { forward.mul((float) Math.cos(angle), tempVector1).add(up.mul((float) Math.sin(angle), tempVector2)).normalize(forward); right.cross(forward, up); } public void roll(double angle) { right.mul((float) Math.cos(angle), tempVector1).add(up.mul((float) Math.sin(angle), tempVector2)).normalize(right); right.cross(forward, […]

二维坦克晃动时,以较高的角度移动

我在2D游戏中遇到了坦克运动的问题。 如果坦克的方向是0/180/90 / -90度,似乎没有问题,但是当它不是坦克(和炮塔)开始摆动 这里是渲染代码: public void render(Graphics2D g) { AffineTransform old = new AffineTransform(); AffineTransform cur = new AffineTransform(); cur.setToIdentity(); cur.rotate(tankAngle, position.x + Models.getTank().getWidth() / 2 – field.getCamera().getXOffset(), position.y + Models.getTank().getHeight() / 2 – field.getCamera().getYOffset()); g.setTransform(cur); g.drawImage(Models.getTank(), (int) position.x – field.getCamera().getXOffset(), (int) position.y – field.getCamera().getYOffset(), null); cur.setToIdentity(); cur.rotate(turretAngle, position.x + Models.getTurret().getWidth() / 2 – […]

屏幕对象有时不能渲染

我是一个温和的经验丰富的程序员谁已经创建了几个游戏引擎模板和Java小型2D游戏。 我目前正在扩展到3D游戏引擎,并且正在重写以前的引擎,使其更具适应性和面向对象。 我的问题是,而且一直定期,只是有时渲染的对象。 这使我不得不不断地重新运行程序来显示任何图像。 我还没有find任何直接的答案来解决这个问题,而且没有其他人似乎也有同样的问题(甚至当观察源代码完全相同的代码设置时)。 这个问题显然存在于render()方法中,有时在main方法调用的线程内部不能正确创建或使用Graphics&BufferStrategy对象。 以下是“Main”类的一些代码: public Main() { addScreenAndFrame(); } public static void main(String[] args) { main = new Main(); frame.add(main); thread = new Thread(main); running = true; thread.start(); } public void run() { while (running) { render(); tick(); } } public void tick() { screen.tick(); } public void render() { bs = […]

AI没有出现或工作

在我的游戏中,我试图调用我的AI类(“bot”),但没有任何反应。 我正在尝试更换玩家,以便玩家可以select让电脑对抗他们。 我是不是正在初始化一些东西,或者有没有我没有实现的东西? 这是我的板级: //Sets up the board //Coded by Gordon, Jack, Johnson, Wayne public class Board extends JPanel implements Trade, ActionListener, MouseListener{ protected Scanner in = new Scanner( System.in); private Random rand = new Random(); JButton = new JButton("confirm"); private JTextArea playerAmount = new JTextArea("4"); private JTextArea botAmount = new JTextArea("0"); private JTextArea pbAmountText […]

如何在android数据库中存储更新的分数?

我想在MySQL数据库中存储更新的分数。 那么,我为此做了什么? private void updateScore() { if (winner.equalsIgnoreCase("You")) { tally = 100 – computer.getId(); MainActivity.userScore += tally; if (MainActivity.userScore >= MainActivity.maxEnd) { MainActivity. stat++; MainActivity.totTurn++; MainActivity.userScore = 0; MainActivity.computerScore = 0; } } if (winner.equalsIgnoreCase("computer")) { tally = 100 – buddy.getId(); MainActivity.computerScore += tally; if (MainActivity.computerScore >= MainActivity.maxEnd) { MainActivity.totTurn++; MainActivity.userScore = 0; MainActivity.computerScore = […]

服务器上的可变时间步骤循环问题

我开发了一个类似的游戏,它使用HTML5 websockets和java作为后台,最近我在游戏上运行在Digitalocean雾滴上的Glassfish服务器上。 我一直在多台机器上本地testing我的游戏,从来没有遇到任何问题,但是当我在服务器上部署我的游戏并尝试玩游戏时,球似乎比普通速度快得多。 我不知道我在这里失踪,因为在本地托管服务器时,thread.sleep工作正常。 可变时间循环: @Override public void run() { long lastLoopTime = System.nanoTime(); long lastFpsTime = 0; while (gameRunning) { long currentTime = System.nanoTime(); long updateLength = currentTime – lastLoopTime; lastLoopTime = currentTime; double delta = updateLength / ((double) OPTIMAL_TIME); lastFpsTime += updateLength; if (lastFpsTime >= 1000000000) { lastFpsTime = 0; } if (!gamePaused) […]