问题标签 [game-engine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1616 浏览

mobile-phones - 智能设备(手机)游戏引擎

我正在寻找适合移动设备(不是 iPhone)的 3d 游戏引擎。

有没有像这样的知名 3d 游戏引擎?

它必须积极开发,易于使用,并且应该支持各种各样的设备。

0 投票
1 回答
1353 浏览

android - 基于 Android 和 Windows Phone 的 SDL 支持

我在哪里可以找到有关 Windows Mobile 操作系统或 Android 的信息。我需要知道它们是否支持 SDL。

所有安卓手机都支持SDL吗?

0 投票
7 回答
7715 浏览

game-engine - 3D游戏编程模型?

我是游戏开发和游戏编程的初学者。我有计算机图形方面的经验 - 主要是 OpenGL 那些日子最后,我有一些空闲时间来磨练我的游戏编码技能。但是在编写一个简单的 3d 游戏时,我找不到任何用于 3d 图形的免费纹理和模型的好资源(例如,对于 2d 游戏,我找到了许多精灵表等资源)。

有没有你熟悉的 3d 游戏纹理/模型的好资源?

0 投票
1 回答
344 浏览

c++ - DirectDraw:如果表面大于后缓冲区,则裁剪失败

我正在为移动设备编写游戏引擎,并且正在尝试支持多种分辨率。游戏世界可能比屏幕大得多,所以我使用剪辑器在世界上创建视口。

我的设备的分辨率为 240x320。当我将视口设置为 240x320 并将我的世界设置为 240x320 时,一切都很好。我可以毫无问题地将世界滑出屏幕。但是,当我的视口为 220x320 且我的世界为 240x320时,DDERR_INVALIDPARAMS当表面移动到左侧屏幕之外时,blitting 会失败:

将表面移到右侧屏幕外可以正常工作,表面被正确裁剪。

当表面大于后备缓冲区时,如何在我的后备缓冲区上剪辑表面?

提前致谢

0 投票
13 回答
7969 浏览

javascript - 用 Javascript 制作防黑客游戏

假设您使用 HTML5/JavaScript 创建了一个在线游戏。所有代码都将下载到用户的浏览器中,然后他们将运行游戏。

你如何阻止某人将游戏复制到他们的计算机上,并注入函数和模块来作弊?例如,他们可以编写一个自动瞄准最近的敌人精灵的函数。

有没有什么基本的方法可以通过以某种方式设计游戏代码来保护人们免于做这种事情?

0 投票
3 回答
3033 浏览

game-engine - 任何代码示例开源引擎或开源 hex tile 游戏,编写基于 Hex Tile 的游戏的参考资料?

使用此处的其他问题,我找到了 Amit 的游戏页面,包括有关Hex Tiles的部分,该部分还链接到此处的游戏编码 wiki 。

我正在寻找建议:

(a) 任何语言的库、引擎或代码示例。我在 python PGU+pygame中找到了一个,但正在寻找更多。

(b) 开源六角棋战术或策略游戏。

因为谷歌可以为我找到东西,我希望你真的用过一个。因此,如果您在 Google 上搜索然后发布,那么这就是让我在 Google 上为您提供的最佳选择。非常感谢(i)你使用过它,(ii)认真地,任何语言都可以,C/C++、python、java、flash/flex 等等。

相关问题和另一个相关问题,但 .net

0 投票
2 回答
4148 浏览

winapi - 为什么我的 Win32 gdi+ 游戏在 Windows 7 上运行缓慢?

[重要的新信息位于本条目底部]

我有一个我认为是使用 GDI+ 的非常标准的游戏循环。它在 Vista 和 XP 上运行良好(复杂游戏大约 25 fps,简单游戏 40 fps)。当我在 Windows 7 上运行它时(具有明显更快的 CPU 和更多内存),它会减慢很多游戏无法使用(我从 0 fps 到 4 fps)。我在下面包含了我认为是代码的相关部分。正如我所说,我相信这是使用 GDI+ 的最简单的(基于内存位图的)游戏循环。您可以在下面看到我为加快速度所做的两次尝试。首先,我担心如果调用 InvalidateRect() 的频率比发送 WM_PAINT 消息的频率高得多,那么系统会将此作为我的程序坏/慢并且扣留我的时间片的线索。所以我添加了 paintIsPending 标志以确保我没有 t 每次油漆无效一次以上。这没有改善。其次,我在下面的 OPTIONAL SECTION 中添加了代码,认为如果我自己触发 WM_PAINT 消息而不是等待它被发送,事情会更好。再次,没有改善。

对我来说,像这样的简单 GDI+ 游戏循环会在 Windows 7 上死掉,这对我来说似乎很疯狂。我知道 Windows 7 处理 2D 图形加速的方式存在一些差异,但同样,这段代码看起来很基础,很难相信它不会-功能性。另外,我知道我可以切换到 DirectX,而且我可能会这样做,但目前在下面的 DrawGameStuff(graphics) 调用所代表的代码库中投入了大量资金,如果可能的话,我宁愿不重写它。

谢谢你的帮助。

啊哈!根据 Chris Becke 的线索,我现在掌握了更多且非常相关的信息。我确信是 BitBlt() 很慢,而不是 graphics->Clear(),但是当我注释掉 graphics->Clear() 时,我突然在 Windows 7 上获得 40 FPS。然后我将 graphics->Clear() 更改为

瞧,它仍然以 40 FPS 运行。我不知道为什么 FillRectangle() 调用比 Clear() 调用快。

于是我开始重新添加我的游戏绘制代码,我立即找到了另一个杀死它的调用:为了绘制游戏内容,我将精灵绘制到 memoryDC 中

而且这些电话也很慢。作为一个实验,我从我的 PNG 文件中预先绘制到与 screenDC 兼容的第二个 memoryDC 中。然后,为了绘制我的精灵,我从这个辅助 memoryDC 中绘制到我的主 memoryDC 中。所以我没有上面的 DrawImage 调用:

当我这样做时,你瞧,整个游戏在 Windows 7 上以 40 FPS 运行。

然而,这不是一个真正的解决方案,因为在预渲染到该辅助内存 DC 时,我丢失了 PNG 文件中的透明度信息,所以我的精灵现在都是不透明且丑陋的。

所以看起来我的问题是memoryDC(创建为与screenDC兼容)和PNG源文件之间的不兼容。我不明白为什么这种不兼容性仅在 Windows 7 上存在(或者至少,为什么它会减慢速度)。有没有办法保存 PNG 文件以从一开始就与屏幕兼容?或者一开始就在内部重新渲染以获得与屏幕兼容的新PNG文件?嗯……

好的,所以我能够通过将其渲染为 32bpp HBITMAP 来正确渲染我的 PNG 文件,如下所示:

然后用 AlphaBlend() 渲染它:

所以现在我的游戏可以在 Windows 7 上快速运行。

但我仍然不明白为什么我必须在 Windows 7 上完成所有这些操作。为什么在 Windows 7 上使用 DrawImage() 从我的 PNG 图像中绘制的默认绘图如此缓慢?

0 投票
2 回答
548 浏览

c# - 具有动态属性的游戏引擎设计

我目前正在开发一个 C# .net XNA 游戏引擎。

我有一个关于引擎设计的问题。首先,我希望我的引擎能够包含我自己的脚本语言。为此,我想我必须能够访问游戏中所有对象的所有属性,或者只是我想要更改的那些。

我开始做的第一件事是尝试通过字符串进行访问。为此,我制作了每个“实体”,可以绘制到屏幕上的东西,都有一个包含所有属性的字典。属性的添加是在实体类中手动完成的。我从那以后读到,当你有很多字典但里面的东西不多时,它会减慢 GC。我相信这就是我现在的比赛中正在发生的事情。在开始丢失 fps 之前,我最多只能获得大约 1000 个具有基本属性(即颜色、位置、纹理)的实体。

我想知道除了我正在做的事情或使用反射之外,是否还有其他方法可以动态访问对象的属性,因为这比字典还要慢。还是我应该重新考虑整个设计?

0 投票
5 回答
1769 浏览

c# - xna 游戏中的 C# 委托性能

我目前正在开发一个 C# .net xna 游戏引擎。

我一直在想办法拥有一个更新管理器/调度器/事件系统。我目前正在使用委托来提供一种创建动态计划任务和事件的方法。

我最近读到代表可能很慢。我的游戏中的代理每帧都被调用,我想知道这是否会影响性能?

更新:

我也刚刚发现了这个http://blogs.msdn.com/b/shawnhar/archive/2007/07/09/delegates-events-and-garbage.aspx

这就是我担心的问题,我想有办法解决它。感谢您提供所有其他信息。

0 投票
3 回答
342 浏览

actionscript-3 - Several second computation in a game while maintaining 60 FPS

I've got an algorithm that takes more than several seconds to complete. I'm trying to implement it into a 60fps flash game i'm creating. I am wondering if there is some provision in ActionScript3 to interrupt a computation in order to update the frame and continue the computation afterwards. There probably isn't, so I'm assuming the best method would be to perform the computation for x milliseconds, measure what the frame rate is after, then adjust the time the computation will run for next frame if the frame rate is less than or greater than 60 fps. The drawback with this is that the game won't run at a steady 60fps...

Any other ideas on how to (optimally) perform a large computation in AS3 while maintaining the framerate?

EDIT: For the curious (the calculation, perhaps I should have said algorithm): I'm creating a motion planning library for game AI objects (one use for motion planning). The algorithm is along the lines of a RRT (rapidly exploring random tree) that iterates thousands of times.

Demo link: http://www.swfcabin.com/open/1279044355

Click to motion plan. The circle can "thrust" at a fixed magnitude in any direction.

Also - there is no linear velocity damping (i.e. friction).