如何制作一款FPS游戏? [关闭]

2023-12-28

我想知道如何使用 SDL 库创建 fps 游戏?

有没有什么书籍可以举例说明?


这对于大多数开放式问题来说是胜利。你真的可以写一本书。但让我们确定指向正确的方向......

第一步,对于这样的项目,您需要良好的调试技能。阅读 Steve McConnell 的《Code Complete》。阅读全文。投入的时间比你可以阅读/实验的任何其他东西都更值得。

获得一些游戏的源代码。任何游戏。确保在看到大而复杂的东西之前先看到简单的东西,并记住,当您查看任何游戏代码时,他们可能有一个联合团队投入了比您更多的时间。重点是看代码结构。

获得 3D 数学的参考,不必那么深入,但您需要了解点积之类的东西,能够弄清楚如何在世界中为您的相机创建矩阵等。(即使你写了 0% 的渲染代码)

(edit)这是一本关于 3D 数学的好书3D 游戏编程和计算机图形学数学,第二版(游戏开发系列) https://rads.stackoverflow.com/amzn/click/com/1584502770这不是你在大学里学到的那种,它更像是三角函数和更高级的实用概念之间的交叉:如何为自己创建一个简单的物理、高效的碰撞检测等工具箱。

您需要了解一些有关渲染和管道的知识。 SDL 可以为您提供帮助,但请确保您了解其功能的概念。

阅读有关实用系统设计的内容。您的各种系统必须互锁。好好想想吧。你的系统在 C 或 C++ 中可能只是一个很好的系统,重要的是你的数据/控制如何流动的想法,而不是你模拟设计模式的完美程度(尽管这些也非常有用)

人工智能的基础知识,不是“真正的”人工智能,而是功能性人工智能;有一个很大的不同。状态机非常适合入门,对于简单的 FPS 来说已经足够了。

了解一些有关估算和规划的知识。您将没有时间去做您想要做的所有事情来正确地制作 FPS。您必须进行分类并学习如何分类;它们是两件不同的事情,后者更困难。经验是粗俗最好的老师。 (尽管传奇人物麦康奈尔也有这方面的书)

拥有一个将游戏玩法插入关卡的系统。如果您只是一名程序员,那么您最好的选择是为现有的编辑程序(例如 3DS Max)编写插件。对于程序员来说,我强烈推荐 Max,而不是 Maya。 Maya 脚本很好,但它更适合聪明的非程序员。我发现 3DS Max 的思考更多地类似于程序员如何创建和编辑你的世界。

您可以花费数年时间来制作工具来让您正确完成此操作,因此您希望以可以快速准确地编辑的方式做事 如果您制作自己的编辑器,请将其合并到您的游戏世界中。 如果您的世界不是真正的 3D 并且您想快速制作大量关卡,您可以将关卡数据保存为类似这样的内容,这将为您节省大量时间 其中 X 是墙,其他字母是游戏对象,简单的解析器可以将其转换为游戏对象和世界坐标

 xxxxxxxxxxxxxxxxxxxxxxxx
 xx..........P..........x
 xxxxxxx...........I....x
 xR....xxx...........E..x
 xx.................0xxxx
 xxxxxxxxxxxxxxxxxxxxxxxx

但这一切都取决于你的游戏。我的观点是,你需要诉诸“贫民区编码”,如何将游戏数据带入你的世界非常重要,你需要考虑一些既可以快速实施又可以快速使用的东西。

归根结底是你的目标是什么?如果要学习以绝对正确的方式编写代码,则需要花费大部分时间迭代一个月前看起来不错的代码,但现在您意识到自己的要求是什么,它真的可以使用另一遍。不要害怕重写,通过这样做你可以学到很多东西,但是如果你的目标是功能,你可能需要弄清楚在哪里破解一些东西(比如将游戏数据和坐标嵌入到代码文件中)IS只要您知道自己在哪里进行了黑客攻击,并且小心地将其与您的良好代码分开,那么您就可以进行黑客攻击,以便您有机会时可以回去正确编写代码。

最重要的是,您需要决定您的目标是什么,学习还是功能,并找到两者之间的折衷方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何制作一款FPS游戏? [关闭] 的相关文章

  • 创建无丢帧的无尽 cgpath

    我需要不断创建一个cgpath 目前我是这样做的 func createLine var rand randomBetweenNumbers 1 2 currentY if rand lt 1 5 currentX CGPathAddLin
  • AVAudioPlayer - 帧率下降

    我有一个简单的问题 我正在将 mp3 文件加载到 NSData 对象中 然后在游戏中使用 AVAudioPlayer 来播放它 大约每隔一秒 帧速率就会下降 您可以看到屏幕上出现卡顿现象 这并不是一个重大的减速 但明显明显并且对游戏玩法造成
  • 在 Spritekit 中取消暂停视图时,fps 显着下降

    当在 SpriteKit 中取消暂停视图时 我注意到 fps 显着下降 帧速率下降在 5 10fps 之间 我用空项目 Spritekit 游戏模板 尝试了这个 这是代码 if self view paused self view paus
  • ffmpeg CLI 设置 -r 30 如果输入 => 30 fps,否则 -r 如果 < 30 fps 则采用输入 fps

    我发布了我的原来的问题在这里 Tried 建议的解决方案 但这并不能解决我的问题 这就是我所做的 下载这个视频来自 Youtube 作为测试 使用 ffprobe 给出 Stream 0 0 Video h264 High yuv420p
  • 实时生成(泊松?)随机变量

    我有一个实时运行的程序 具有可变的帧速率 例如可以是 15 fps 也可以是 60 fps 我希望平均每 5 秒发生一次事件 每一帧 我想调用一个函数 该函数将自上一帧以来的时间作为输入 并在调用它的情况下平均每 5 秒的运行时间返回 Tr
  • 如何使用Camera API实现慢动作和延时视频录制

    有没有办法使用Camera API实现慢动作和延时录制 我尝试使用MediaRecorder环境VideoFrameRate VideoBitRate VideoCaptureRate但对我来说没有任何作用 我已经成功地使用 JNI 实现了
  • 使用 Thread.sleep() 限制 Libgdx 游戏中的 FPS 不起作用

    我正在使用 libgdx 为 android 开发一个小游戏 并希望将 fps 限制为 30 以节省电池 问题是它不起作用 fps 只是从 60 下降到 56 这是代码部分 位于渲染部分的末尾 System out print nFPS G
  • 尽管值在 getPreviewFpsRange 的范围内,但 setPreviewFpsRange 不起作用

    这个简单的代码 Camera Parameters params currentCamera getParameters params setPreviewFpsRange 10000 15000 currentCamera setPara
  • 游戏开发:如何限制FPS?

    我正在编写一个游戏 我看到 FPS 算法无法正常工作 当他必须计算更多时 他会睡更长的时间 所以 问题很简单 如何计算具有正确 FPS 的睡眠时间 我知道以微秒为单位更新游戏一帧需要多长时间 当然还有我想要达到的 FPS 我正在疯狂地寻找一
  • 循环 FPS 下降的可能原因?

    我正在用 opengl 编写一个新的代码库 很早就遇到了一个奇怪的错误 这是重复且可预测的帧速率明显波动 我知道它绝对与渲染的对象成正比 它还与屏幕尺寸成正比 不是视口尺寸 不是窗口尺寸 只是物理设备尺寸 大约是 0 2 1 低 高 帧的比
  • Pydub - 如何在不改变播放速度的情况下改变帧速率

    我有几个在 Pydub 中打开的音频文件AudioSegment 我想将音频质量从帧速率 22050 降低到 16000 Hz 一个通道文件 如果我简单地更改 AudioSegment 的帧速率 我得到的是以较慢的速度播放的完全相同的波形
  • 在 Android 上访问高 fps 相机

    有些手机官方支持高 fps 录制 例如 Galaxy S5 和 S6 我尝试了两者 两者都可以使用默认相机应用程序录制高 fps 视频 60 甚至 120 fps 或者在 S6 上使用 Gear VR 的 直通相机 功能 但是 当您通过标准
  • 获取OpenCV当前的FPS

    我正在编写一个 OpenCV 应用程序 FPS 非常重要 如何计算主循环的处理时间以获得当前和平均 FPS 这样 我就可以知道我的应用程序运行速度有多快 顺便说一句 我在 SSD 上使用 imread 所以处理器是这 里的瓶颈 你可以做这样
  • android NDK 可能实现最快的 2D 帧速率,我的尝试包括在内,有更好的选择吗?

    android NDK 可能实现最快的 2D 帧速率 我的尝试包括在内 有更好的选择吗 我使用 NDK 和 OpenGL ES 2 0 将帧显示为 GL TRIANGLE STRIP 上的纹理 这是在 HTC Desire 上完成的 其硬件
  • 是否可以在 libGDX 中禁用帧限制?

    更具体地说 是一个桌面 libGDX LWJGL 应用程序 有一些配置选项可以禁用 CPU 同步以及垂直同步 但不管应用程序以 60 fps 运行 这对于所有实际用途来说都很好 但出于好奇 如果没有别的原因 我想看看帧速率可以达到多高 罗德
  • Linux:通过网络进行屏幕桌面视频捕获和 VNC 帧速率

    抱歉 文字墙很长 TL DR VNC 连接的帧速率是多少 以帧 秒为单位 或者更确切地说 由谁决定 客户端还是服务器 对于桌面屏幕捕获的任何其他建议 但 正确的时间编码 具有不抖动的帧速率 具有稳定的周期 并有可能将其作为未压缩 或无损 图
  • 如何在 Java 中将帧速率限制为 60 fps?

    我正在编写一个简单的游戏 我希望将帧速率限制在 60 fps 而不会让循环占用我的 CPU 我该怎么做 您可以阅读游戏循环文章 https dewitters com dewitters gameloop 在尝试实现任何内容之前 首先了解游
  • 使用 ffmpeg 将 mp4 转换为 gif 时帧率较低

    我正在使用 ffmpeg 将高质量视频转换为 gif 大多数视频都是 60fps 及以上720p 但是当我使用下面的代码将视频转换为 gif 时 我得到的 gif 输出的 fps 非常低 usr bin env palette tmp pa
  • WGL:没有双缓冲 + 多重采样 = 失败?

    我通常使用创建像素格式wglChoosePixelFormatARB 与这些论点 除其他外 WGL DOUBLE BUFFER ARB GL TRUE WGL SAMPLE BUFFERS ARB GL TRUE WGL SAMPLES A
  • requestAnimationFrame 报告的帧速率有时高于显示器的刷新速率

    我使用以下内容来记录应用程序的帧速率 let lastCalledTime let fps let frame 0 let csv Frame Timestamp FPS const refreshLoop gt window reques

随机推荐

  • 如何在 jersey 2.0 中使用 hk2 注入常量?

    如何在球衣中使用 HK2 将常量注入某个类 有了Guice 我可以上一些像这样的课程 public class DependsOnFoo Inject public DependsOnFoo Named FOO String foo 我会在
  • python 中基于 websocket 的 MQTT

    python 是否支持通过端口 8080 订阅 mqtt 代理 import sys import paho mqtt client as mqtt def on connect mqttc obj flags rc print rc st
  • 访问图中重复访问次数最少的所有节点

    我有一个基于图块的地图 其中几个图块是墙壁 其他图块是可步行的 可步行的瓷砖构成了我想在路径规划中使用的图表 我的问题是他们有什么好的算法可以找到访问图中每个节点的路径 从而最大限度地减少重复访问吗 例如 地图示例http img220 i
  • app:srcCompat 不适用于 ImageView

    我正在向库项目添加矢量可绘制支持 并使用app srcCompat引用可绘制的矢量 唯一有效的视图是 ImageButton 我不知道为什么 这是我的 build gradle 的相关部分 android defaultConfig vec
  • 从另一台具有不同 Gradle 版本的 PC 导入 Android Studio 项目?

    我有一个用 Android Studio 版本 1 3 2 编写的 Android studio 项目 现在 在另一台装有 Android Studio 2 1 2 的 PC 上 我想导入或打开该项目 但是当我尝试打开时 我的 Gradle
  • 发送 XMLHttpRequest 时缓存结果出现问题?

    我对 AJAX 和缓存的想法很陌生 On the AJAX 向服务器发送请求 http www w3schools com ajax ajax xmlhttprequest send asp来自 W3Schools 它说你应该添加 t Ma
  • 为什么不允许 movl 从内存到内存?

    我想知道集会中是否允许这样做 movl edx eax 我猜它会访问第一个操作数中的内存并放入 第二个操作数的内存 例如 a b 但我还没有看到任何处理此类问题的示例 所以我猜这是不允许的 另外 我被告知这是不允许的 leal esi ed
  • 什么是 Git 修剪?

    我不小心修剪了一些远程分支 我真的不知道这样做的后果是什么 我单击了 Git 扩展中的 修剪远程分支 按钮 认为它会删除远程分支 官方文档说 git prune 从对象数据库中删除所有无法访问的对象 我实在不明白这是什么意思 我猜这可能会删
  • 需要帮助使用 Perl 修复此正则表达式代码吗?

    我需要您的专业帮助来使用 perl 修复此正则表达式代码 我有这个数据文件 Data SCSI test A ccccccccccccccccc aaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbb Data SCSI t
  • 如何在 python 代码中利用 locals() ?

    我在阅读时偶然发现了以下警告像 Pythonista 一样编码 惯用的 Python http python net goodger projects pycon 2007 idiomatic handout html作者 大卫 古杰 文章
  • 如何使用 on_delete 属性在用户模型的外键字段中设置用户全名?

    我在 django 中有一个模型 它具有带有用户模型的外键 class News models Model user models ForeignKey AUTH USER MODEL on delete models SET messag
  • 内容和 div 之间的边距溢出滚动条

    我使用以下代码来保持菜单项固定 同时允许内容滚动 因为它似乎是所有浏览器中最稳定的方法 body overflow hidden div content height 100 overflow auto 我的问题很简单 但我似乎无法弄清楚
  • Mongodb聚合框架|对多个值进行分组?

    我想使用 mongoDB 的聚合框架来运行 SQL 中的内容 看起来有点像 SELECT SUM A B C from myTable GROUP BY B C 文档指出 您可以指定管道中文档中的单个字段 先前计算的值或由多个传入字段组成的
  • 在 Azure Web App 上打开其他端口

    我最近将 NET Web API 2 应用程序从 Azure 云服务迁移到 Azure Web 应用程序 但是 我们有一个遗留应用程序需要与端口 8080 和 444 上的 API 进行通信 有没有办法在网络应用程序上打开额外的端口 你不能
  • django 1.9 和注册/login.html

    我正在开发 django 1 9 项目 在 Django 1 7 7 中 登录功能可以正常工作 但现在我一直有 registration login html Template Does Not Exist 模板 login html lo
  • 将 OpenIdConnect 与 AzureFunctions 结合使用

    我使用 azure 函数来托管 React 应用程序的 API 但我也使用相同的 azure 函数来托管应用程序的 html js css 通过 Blob 存储上的静态文件的代理函数 我一直在使用 EasyAuth 为其提供身份验证 效果非
  • 从 javascript 数组中查找匹配的字符串

    我有一组字符串 我需要找到以某个键开头的所有字符串 例如 如果有一个数组 apple ape open soap 当使用键 ap 搜索时 我应该只得到 苹果 和 猿 而不是 肥皂 这是在 JavaScript 中 Use indexOf h
  • 从 GWT 调用 JQuery 函数

    我正在启动一个使用 GWT 的项目 设计团队使用 HTML 和 JQuery 制作了一个原型 我实际上正在使用 UIBinder 来 重建 UI 我的问题是应用程序有一个使用 JQuery 的下拉菜单 但它不起作用 到目前为止 我尝试的是在
  • std::map 可以在调用 const 函数期间重新平衡吗?

    我有一个const std map
  • 如何制作一款FPS游戏? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi