我自己从事游戏项目的开发,该项目可以分为三个独立的部分(地图生成,“ Overworld”引擎和战斗引擎),但是随着开发的进行,我不确定应该如何处理该项目的管理,尤其是涉及以下三点:
由于我是独自工作,使用版本控制系统值得吗?
我应该使用一种正式的方法来注册计划中的功能/错误吗(我只记得现在需要做什么)
最重要的问题:我怎么知道首先要开发什么?现在已经完成了最基本的工作,我知道要编码的功能列表,但是我不知道应该按照什么顺序进行。
我自己从事游戏项目的开发,该项目可以分为三个独立的部分(地图生成,“ Overworld”引擎和战斗引擎),但是随着开发的进行,我不确定应该如何处理该项目的管理,尤其是涉及以下三点:
由于我是独自工作,使用版本控制系统值得吗?
我应该使用一种正式的方法来注册计划中的功能/错误吗(我只记得现在需要做什么)
最重要的问题:我怎么知道首先要开发什么?现在已经完成了最基本的工作,我知道要编码的功能列表,但是我不知道应该按照什么顺序进行。
Answers:
我会用:
GIT(和很棒的参考资料),一个分布式的源代码管理器,用于管理我的代码,如果我想不受限制的话,可以将它作为私有项目托管在GitHub上。
(这里有很多选项,只有google用于源代码管理,您甚至不需要使用GitHub或任何其他网站,Git在您的本地计算机上就可以很好地工作,但是使用GitHub将使管理备份变得很痛苦容易得多。
如果您有两台计算机,则可以在称为备份计算机的一台计算机上创建一个存储库,然后在本地网络上克隆该存储库并将其用于开发,完成某项功能后,可以将其推送到备份计算机,您将获得1:1备份!)
我将使用Trello或GitHub的内置问题管理来跟踪错误和要做的事情。
我会先设计游戏;
然后,我将原型放到一边,选择一个我希望开发的平台。然后寻找现有的引擎,并选择最适合我的游戏想法的引擎。然后,我将为我的项目制定明确的目标,将其组织为小任务,然后开始工作以完成任务。达到此状态后,您很可能会发现自己有适合自己的最佳工作方式,那就去吧!
您可以将几种不同的方法论/理念应用于您的开发风格,XP,Waterfall等。仅选择一种您认为会使您进步最快的方法论即可。
当您有可玩的东西时,请您的直属朋友尝试一下!如果他们使用Windows / Windows,请设置快速安装程序包,或者编写一些Shell脚本(如果他们使用Linux / Mac)可以自动为他们提供帮助,从而使他们轻松地为您提供帮助。在测试人员的反馈中要格外小心,不要忘了告诉他们您的游戏设计以及您要开发的游戏类型。
一旦一切顺利,我可能会为我的游戏建立一个网站-在无法将其应用于游戏进度时(例如,如果我专注于学习)保持我的创造力和内容畅通或需要中断开发!
如果我使用GitHub,我将为我的游戏设置一个项目页面,否则托管一个WordPress / Jekyll博客或类似的博客,并以此撰写我的文章。
这将使您保持动力,并有地方推荐潜在的游戏玩家/测试人员!
几乎所有时间都有很多游戏开发竞赛。如果规则允许,我会尝试将其中之一加入我的游戏。这会增加动力,并使一切变得更有趣-谁不喜欢赢!
(如果您在严格的期限内进行开发,则可以至少跳过这一点。)
我强烈建议您使用版本控制系统,即使您一个人工作。一旦不小心删除了某项内容或进行了较大的更改,它可以为您节省很多时间,但后来才意识到这是一个坏主意,则必须撤消所有更改。
编辑:有许多免费的源代码控制解决方案。
我使用了VisualSVN服务器,该服务器很容易在Windows下设置和使用。
还有其他在线替代方案,例如Codeplex(带有SVN
或Mercurial
),SourceForge或Google Code。好处是您不必建立和维护存储库,并且您的数据在云中。问题是,您不能自由托管封闭源代码项目。
关于错误和功能跟踪:如果您已经有更多的用户可能对Beta测试游戏,报告错误和请求功能感兴趣,请继续。
但是,如果只有少数这样的人(或根本没有),那就没有必要了。
至于开发优先级,这是您要决定的。谁比唯一的开发人员更了解在项目中做什么?
由于我是独自工作,使用版本控制系统值得吗?
我认同。设置起来非常琐碎,而且我经历过多次疯狂的重构工作或做其他愚蠢的事情,并且回滚更改的能力节省了很多时间。此外,如果将其托管在服务器上,则可以备份我们的代码,以防万一发生问题。
我应该使用一种正式的方法来注册计划中的功能/错误吗(我只记得现在需要做什么)
我认为没有必要。我会保留一份您打算做什么的书面清单,尽管只是为了确保您不会忘记一个小错误,而且我发现它可以帮助您从编码休息后重新开始。
最重要的问题:我怎么知道首先要开发什么?现在已经完成了最基本的工作,我知道了要编码的功能列表,但是我不知道应该按照什么顺序执行。
把上面的那个清单,闭上眼睛,随机戳它。使用您手指上的任何功能。除非项目之间相互依赖,否则与确保事情按任何特定顺序发生相比,保持流程继续前进更为重要。
版本控制就像走钢丝的人的安全网一样:它释放了您尝试疯狂事物的自由。如果您可以轻松地还原,那么删除大量代码的大型重构就没问题。如果您要在回购中的实验分支上并且可以决定不将其合并回去,那么情况就更不用说了。
如果您没有这种自由度,则可能会将注释掉的代码无处不在,以免担心您可能需要它。
我对Git进行了投票。语法有点奇怪,但是关于它的两件事很重要:
git init
,您就可以开始检入文件了。如果您确定根本不想rm -rf .git
对该文件进行版本控制,请在该文件夹中,它不再是Git存储库。通过SSH分发。Git是分布式的,这意味着您可以在不同的地方拥有仓库的多个完整副本(所有历史记录等),并使它们保持同步。您可以在具有SSH访问权限的任何计算机上设置另一个Git存储库,然后将该其他存储库添加为远程存储库。之后,您随时可以只备份git push
到该存储库。
相对于Subversion来说,这是一个很大的优势,Subversion的整个仓库都位于一台计算机上,并且该计算机必须运行Subversion服务器。
Mercurial可能支持这些观点,但我没有使用过。
是! 既然您是在问,我猜您已经很好地接受了修订控制系统。必须的!
关于第二个问题,有注册错误的正式方法,您应该使用它。对于规划功能,我认为采取任何非正式的途径都不会造成伤害(当您一个人工作时)
首先执行这些功能,使您的游戏栩栩如生。大致了解最终的比赛方式。
1)是的,当然。我建议通过BitBucket和TortoiseHg使用Mercurial。BitBucket最多可免费使用5个用户,而且由于它托管在云中,因此您可以放心一些(无需备份)。
2)在实施新功能之前,应先修复错误。我将使用简单的可访问TODO列表来跟踪事情-未完成/完成。您可能只使用纯文本文件,但不要忘记将其添加到源代码控制存储库中。
3)做任何一天想做的事情,同时要记住,交付最终用户可以玩的东西是主要目标。例如,如果您厌倦了正确使用物理,可以进行渲染,或者为该AI添加一些缺失的单元测试。
工作量应该足够小,可以在大约几天内完成。保持动力并避免倦怠至关重要。
如果架构正确完成,您应该能够轻松添加引擎/游戏的修改部分,而不会影响其他多个部分(否则从重构开始:)。
1)大家都说:是的(我什至会说,在网上租一个便宜的东西)
2)保留一个简单的列表,或者如果您的项目变大并且您获得了Beta测试人员,请安装Mantis Bug Tracker
3)我不知道,但是我会告诉你我的工作方式:首先开发出最轻松和/或最难的事情。重复直到一切完成。这样一来,开发就会变得更加有趣和轻松(并且即使遇到这种情况,您也不会解决这个问题,也就无法解决得太晚)。
感谢您提出这个问题。这正是我目前正在做的事情。
1)版本控制:必须。目前,我正在维护手动备份。当运行良好的某些事物突然抛出错误(或无法按预期运行)时,它至少很有用。我比较版本并经常发现愚蠢的错误(主要是评论一些内容)
2)我创建了一个word文档,并按类别顺序列出了游戏将要拥有的所有功能,并列出了子功能的多级缩进(以及与客户端/服务器相关的功能或适用的功能)。
3)在获得列表之后(通常不会完整完成,不断添加一些内容),我想到了我的游戏流程,并高亮显示了使游戏运行并开始执行它们所必需的所有要点。我标记为黄色,表示正在进行中。完成时为绿色。橙色表示需要改进或存在一些已知的错误
希望这可以帮助
1.)值得对任何项目使用版本控制。如果您已经知道如何使用它,即使是很小的也可以。我已经在Linux和Windows上使用TortoiseSVN使用Subversion多年了。即使创建一个较小的项目(<500行),我也将为其创建一个存储库,以便撤消更改,跟踪我放弃该项目一段时间后正在执行的操作等。
2.)取决于项目的规模。如果您打算与团队一起进行游戏测试并分发,那么可能值得拥有一个错误跟踪系统。我目前正在一个超过2万行的项目中独自工作(尽管我有一位艺术家),而我的待办事项列表仅保存在一个文本文件中,该文本文件也位于我的SVN存储库中。尽管我现在还完全不需要与他人共享它,所以暂时没有错误跟踪很适合我的需求。除非有需要,否则我不会担心。可能发生的最糟糕的情况是,您必须输入已经记录下来的所有错误,然后删除/修订已修复的错误。当您开始失去对笔记的心理跟踪时,请获取一个错误跟踪器。
3.)将其绘制在纸上。从您希望最终完成的游戏开始,写下它的要旨。然后将其分解为制作过程:碰撞检测?网络代码?玩家和怪物的类型?类层次结构?从您的愿景中退后一步,以便您清楚地了解如何从头开始构建它。我想您正在使用一种面向对象的语言。首先,最关键的一步是以明智的方式建立这些类层次结构。尽您所能避免绝对没有多重继承(尽管有时是不可避免的),在图编辑器中绘制类关系(我使用Dia),等等。基本原理在避免以后出现麻烦方面大有帮助。