Questions tagged «java»

Java既是一种流行的面向对象的编程语言,又是运行时环境,它允许Java程序在大多数硬件和软件平台上保持不变地运行。

12
游戏币种应使用哪种数据类型?
在一个简单的业务模拟游戏(用Java + Slick2D内置)中,玩家当前的钱应该存储为float还是int或其他? 在我的用例中,大多数交易将使用美分(0.50美元,1.20美元等),并且涉及简单的利率计算。 我见过有人说你不应该用float货币,也有人说你不应该用int货币。我觉得我应该使用int并舍入任何必要的百分比计算。我应该使用什么?
96 java  data  economy 

8
Java是否适合进行认真的游戏开发?[关闭]
我已经在Internet上进行搜索,但是Java游戏开发的资源并不多,几乎不及C ++。实际上,大多数引擎都是用C ++编写的。我试图玩用jMonkeyEngine制作的游戏,但是游戏速度非常慢,以至于我的计算机死机了。我没有其他Java应用程序在运行,也没有占用太多资源。相反,我的计算机可以轻松玩大多数现代3D游戏。如果我现在继续学习和改进Java,事实证明以后需要学习C ++,那么切换可能会很困难。 Java是否可以用于认真的游戏开发?认真地说,我的意思是高质量的图形,而在现代计算机上没有太大的滞后。我也想考虑为游戏机制作游戏。

5
游戏中的演员应该负责吸引自己吗?
我对游戏开发非常陌生,但对编程却不是。 我(再次)使用JavaScript的canvas元素在玩Pong类型的游戏。 我创建了一个Paddle具有以下属性的对象... width height x y colour 我也有一个Pong具有诸如...的属性的对象 width height backgroundColour draw()。 该draw()方法当前正在重置canvas,这就是出现问题的地方。 如果Paddle对象具有draw()负责其绘制的方法,或者draw()该Pong对象的负责负责其演员的绘制(我认为这是正确的术语,如果我不正确,请更正我)。 我发现在Paddle实例化两个对象Player和时,绘制自身会很有利Enemy。如果在没有Pong的draw(),我需要两次写类似的代码。 最佳做法是什么? 谢谢。


6
保存游戏数据的良好文件格式是什么?[关闭]
我需要保存一些自定义游戏数据。地图,播放器等 它们都将具有“子对象”。例如,地图和地图将具有图块的“阵列”。即分层数据。希望没有二进制文件。 什么是这些的好格式? 到目前为止,我已经考虑过: 序列化:这是快速且容易的,但是当我更改基础类时往往会中断:( XML:我真的很讨厌解析这个。我的测试用例超过了100多行代码,即使是非常简单的格式,也似乎需要大量的“忙碌工作”。 INI:对于分层数据来说真的很笨拙。 Protobuf:从未使用过它,但请阅读,如果您更改班级,则必须做很多手动修改,然后休息。 还有其他选择吗?这就是为什么我在这里! 编辑:这是Java顺便说一句。 编辑2: 我选择了“受控二进制序列化”(见下文)。 优点: 它很快 它很小(在磁盘上),可以在读/写过程中轻松压缩/解压缩。 从游戏和工具集读取/写入非常容易。 我可以决定要包含/排除对象的内容。 对象/数据可以嵌套。 缺点: 无法手动编辑(例如XML,YAML等) 使用脚本无法轻松读取/修改它 与其他实现相比,默认情况下,Java序列化速度相当慢/膨胀,但它稳定且有效
37 java  file-format  xml  data  file 

7
如何提高Voxel / Minecraft类型游戏的渲染速度?
我正在编写自己的Minecraft副本(也用Java编写)。现在效果很好。在40米的可视距离下,我可以轻松地在MacBook Pro 8,1上达到60 FPS。(英特尔i5 +英特尔高清显卡3000)。但是,如果将可视距离设为70米,则只能达到15-25 FPS。在真实的《我的世界》中,我可以毫无问题地将视距扩大到256m。所以我的问题是我应该怎么做才能使我的游戏变得更好? 我实现的优化: 仅将本地块保留在内存中(取决于玩家的观看距离) 视锥剔除(首先在块上,然后在块上) 只画出真正可见的方块面 对包含可见块的每个块使用列表。可见的块将自己添加到此列表中。如果它们不可见,则会自动从此列表中删除。通过构建或销毁相邻的块,块变得(不可见)。 每个包含更新块的块使用列表。与可见阻止列表相同的机制。 new在游戏循环内几乎不使用任何语句。(我的游戏运行大约20秒钟,直到调用了垃圾回收器) 我目前正在使用OpenGL呼叫列表。(glNewList(),glEndList(),glCallList())一类块的每个侧面。 目前,我什至没有使用任何照明系统。我已经听说过VBO。但是我不知道到底是什么。但是,我将对其进行一些研究。他们会提高性能吗?在实施VBO之前,我想尝试使用glCallLists()并传递呼叫清单列表。而是使用了千次glCallList()。(我想尝试一下,因为我认为真正的MineCraft不使用VBO。对吗?) 还有其他提高性能的技巧吗? VisualVM配置文件向我展示了这一点(仅33帧配置文件,可视距离为70米): 用40米(246帧)进行分析: 注意:我正在同步许多方法和代码块,因为我正在另一个线程中生成块。我认为在游戏循环中进行大量操作时,获取对象的锁是性能问题(当然,我所说的是只有游戏循环而没有新块生成的时间)。这是正确的吗? 编辑:删除一些synchronised块和其他一些小的改进之后。性能已经好得多了。这是我对70米的新分析结果: 我认为这很明显selectVisibleBlocks是这里的问题。 提前致谢! 马丁 更新资料:经过一些额外的改进(例如,使用for循环代替每个循环,在循环外缓冲变量,等等...),我现在可以很好地查看距离60。 我想我将尽快实施VBO。 PS:所有源代码都可以在GitHub上找到:https: //github.com/mcourteaux/CraftMania

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

4
如何实现永不重启的测试世界?
我正在寻找有关如何执行以下操作的想法:我想用Java编写一个简单的“世界”。我可以先启动一个,然后在以后再添加新对象,以模拟/观察现有对象之间的不同行为。然后计划是在观看旧对象一段时间之后,对较新的对象进行编码,然后将其加载/放置到现有环境中。问题是,我不想在启动世界后就停止或重新启动它,我希望它运行几周,但我确实需要能够放入对象并重做/重写/删除/创建/更改它们的功能。随着时间的流逝,无需重启。这个世界可能像X / Y位置的100 x 100数组一样简单,并且可以使用平铺的图形用户界面直观地表示世界。我知道我需要某种滴答计时器流程来监视对象并为每个对象提供“行动的机会” 示例:我在星期一对World.java进行了编码,并使其运行。然后在星期二,我编写了一个名为Rock.java的新类(不会移动)。然后,我将它加载(或以某种方式放置)到这个已经运行的世界中(这只是将它随机放置在world数组中,并且永远不会移动)。然后在星期三,我创建一个名为Cat.java的新类,并将其放到世界中,再随机放置,但是这个新对象可以在世界范围内移动(在某个时间单位内),然后在星期四,我编写一个名为Dog的类。也可以四处移动的java,但如果它在邻居位置,则可以“作用于”另一个对象,反之亦然。 就是这个 我不知道我需要对实际的世界类进行编码才能知道如何检测/加载/跟踪未来(以及当前不存在)的对象。 关于如何使用Java进行此类操作的任何想法?

2
如何在RPG等Java游戏中定义项目?
我在用Java随意开发一个RPG类型的游戏,但是我在弄清楚如何拥有可以做很多不同事情而不需要为每个物品创建不同类的物品时遇到了麻烦。 例如,如何创建可以砍树和攻击怪物的斧头? 如果我扩展斩波类或武器类,则无法扩展其他类。 如果我有斩波和武器作为接口,那么当匕首也可以攻击怪物而另一把斧头可以砍伐树木时,我将有很多重复的代码。 我希望有一种方法可以拥有一个Item类,并从文件中加载项目及其各自的功能。如果可能的话,怎么办?如果不是,那么在游戏中拥有道具的最佳方法是什么?
21 java 

3
高效寻路许多成群的敌人绕过障碍物
我正在努力改善游戏敌人的寻路能力。现在,他们基本上只是通过计算自己与玩家之间的角度并朝该方向移动,不断地朝着玩家的确切位置移动。我也有一个植绒算法,可以防止敌人相互堆叠,因此它们会成组,而不是相互夹住。 但是,既然我已经添加了基于图块的地图,那么我就需要敌人也能够绕过障碍物和墙壁。我最初尝试为“不可行走”的瓷砖添加间隔值,以使植绒算法将墙壁和障碍物视为要远离的对象。我还没有弄清楚这是否可行,因为我的初步测试显示敌人击中了一个看不见的“墙”,那里没有不可行走的瓷砖,但由于某种原因,他们击中了它并开始飞扬。 我想知道如果使用A *计算到达播放器的路径,然后使用植绒算法来防止结块,可能会导致性能负担过重。最初,我的游戏将是基于海浪的射击游戏,但我决定改以热线迈阿密为基础进行游戏,因此我可能会减少敌人的数量,偶尔会成群结队,他们更强大。 这是可行的解决方案吗?我将Java与Slick2D一起用作游戏引擎。还是有解决这些问题的更好的解决方案/算法?

4
使主游戏循环不受控制地运行是否有任何危害?
我想知道当我的游戏循环以系统允许的速度运行时是否有任何可能的危害? 我目前有一个循环,通过测量经过的时间(以纳秒为单位),可以以预定义的速度运行游戏逻辑和渲染逻辑,而不会出现问题。实际上,我在循环中执行的任何逻辑都每秒被计时到一定数量的调用。 循环本身的运行速度差不多可以达到我的计算机上每秒大约1170万个循环的速度。 循环(简单的伪代码): while(!isGameOver){ if(canPollInputs){ pollInputs() } while(canStepLogic){ stepLogic() } if(canRender){ render() } } 我的问题基本上是,如果这个简单的循环没有以受控的速度运行,是否会对系统造成危害? 编辑:这意味着我的逻辑每秒运行30次(30 tps),渲染器以60 fps的速度运行,我轮询输入每秒100次,并且还有一些逻辑可以应付逻辑或渲染花费比预期更长的时间。但是循环本身并未受到限制。 编辑:使用Thread.sleep()例如将主循环节流到每秒250个循环导致减少,但是循环以每秒570个循环而不是所需的250个循环运行(当我在台式机上时会添加代码。) 编辑:在这里,为了弄清楚事情,一个工作的Java gameloop。也可以随意使用它,但不要声称它是您的;) private void gameLoop() { // Time that must elapse before a new run double timePerPoll = 1000000000l / targetPPS; double timePerTick = 1000000000l / targetTPS; double timePerFrame = …

3
轮询与事件驱动的输入
我正在开发使用轮询输入法的游戏。但是,既然我正在更深入地研究游戏菜单和其他UI组件,我发现我可能想拥有事件驱动的输入。甚至可以同时使用事件驱动的UI和轮询的“世界”输入。我对最好的方式是很好奇。 我将轮询定义为:每个更新循环都检查按下了哪些键,鼠标在哪里,按下了按钮,然后遍历它们并根据收集到的信息执行操作。 我将事件驱动定义为:基于中断的事件,当事件发生并触发中断并基于该事件运行代码块时。 您是否认为最好进行所有事件驱动,全部轮询,或者两者都可以接受?如果您有两者的优缺点,请列出。谢谢。 编辑 该游戏基于Java / OpenGL,因此将发布到Windows / Mac / Linux。将其扩展到移动设备的可能性很小。游戏是RTS风格的第三人称3D。 编辑2 我对实现此方法的方式仍然不完全满意,但是我要转向的是在UI中捕获事件,如果事件未由我的任何UI组件处理,我会将事件传递给用于选择的“世界”。就像是: @Override private boolean handleEvent(Event event) { if(hud.handleEvent(event)) { return true; } return WORLD.handleEvent(event); } 这样,我不会从用户界面中泄漏点击以选择按钮后面的对象,而不是其他。 目前,我的摄像头控件仍然基于轮询,并且目前似乎可以正常使用,但稍后可能会进行更新。 我感谢所有答案,对不起,我只能选择其中一个!
19 java  input  events  polling 

8
不完美的乒乓球AI
因此,我开始在使用LWJGL时学习Java和一些OpenGL。首先,我正在编写Atari Pong的副本。我已经正确设置了游戏屏幕,碰撞检测,并且所有游戏大部分都可以正常运行,实际上,如果是2人游戏,我现在就可以完成,但是由于我打算做一个单人游戏,我必须想出一个简单的AI来控制第二位玩家。 知道球将击中何处似乎是微不足道的,并且创建一个总是能将球击中的AI似乎很容易,但是我希望能够赢得比赛,所以我不能总是让IA击中球。 所以这是我的问题,我该如何编写代码以将类似人的缺陷添加到AI中。我是否应该随机决定AI是否会在给定时间失效?还是我在这里缺少一件更聪明(或者也许很明显)的东西? 非常感谢你。
19 java  ai 

14
一年级CS专业的建议[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过事实和引用回答编辑此帖子。 2年前关闭。 我即将结束CS的第一学年,这主要是一门基于Java的课程。我想着手进行一些游戏开发,但是我不确定从哪里开始。 有人建议我从具有C样式脚本语言(应该很容易上手)的游戏制作者开始,因为它可能是最简单的,并且允许我主要关注游戏设计以及整个游戏如何组合。 我看到很多人推荐XNA,因为XNA通过其API具有对opengl和DirectX的良好抽象。我还听说C#与Java非常相似。 我也考虑过用Java进行游戏编程,因为我对此非常满意,并且一直在多线程和2D图形API上进行额外的阅读。 最后,一个朋友最近向我展示了pygame,尽管我对此并不十分了解,但它听起来也很不错。 我不知道C ++是否是一个很好的起点,我在初学者游戏开发人员中看到的许多帖子都不推荐将其用于第一个游戏项目。 我将不胜感激,尤其是那些从Java背景参与游戏开发的人。
17 game-design  java 

1
OpenGL:调整显示大小和glOrtho / glViewport
我已经从多个来源研究了这个问题,但还没有找到一个明确的答案,说“是的,这是正确的想法”或“否,这是怎么做的”。 我正在尝试确保OpenGL渲染的分辨率独立性。我认为应该采用的方法是使用glOrtho我想要的世界坐标系来创建投影。例如,glOrtho(-50.0, 50.0, -50.0, 50.0, 1.0, -1.0)。接下来,将视口设置为屏幕分辨率,即- glViewport(0, 0, 800, 600)。最后,每当调整窗口大小时,以glViewport更新的屏幕分辨率进行调用。这将扩展您的数字。 这是确保模型在不同分辨率下占据相同比例的屏幕空间的正确方法吗?我是否也应该使用与分辨率相等的投影?我发现一些答案说glOrtho应该使用窗口的分辨率,而其他人则说应该/可以不同。 有什么想法吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.