给立志于游戏引擎研发的新手的一些建议



         经常遇到一些新手,问如果想立志于游戏引擎研发,有一些什么好的建议。另外个人认为游戏程序员即使是在使用商业引擎做项目,也应该至少达到引擎初级水平,这样才能知其然也知其所以然,也能更好的应用。总结了下自己这么多年的经验和教训,做个分享。一家之言,仅供参考。

         1、至少要熟悉C++和数据结构。目前大多数游戏引擎为了效率,都会选择C++作为开发语言。

2、多接触需求。如果需求不了解,很多算法理解起来是很困难的。当然最好要找到引擎研发的工作,使用商业引擎几乎没有这个机会。如果是在校生,可以找找这样的实习机会,或者参加一些这样的兴趣组织。已经参加工作的,可以利用业余时间找找这样的机会参与,给不给钱不重要。

3、在入门阶段、初级阶段和中级阶段,跟着一个资深的引擎程序员或者团队至关重要,这样进步非常快,并且不累。在这方面我没有这么幸运,绝大部分时间都是在自学,压力大,也走了很多弯路。

4、一定要坚持循序渐进。入门阶段选择的资料一定要直观、有趣、深入浅出、不要有太多理论的东西,有很多有趣的例子的书籍是很好的选择。我的入门是从《学OpenGL3D游戏》开始的,书的质量不算太高,但是是以完成一个mini引擎为主线展开的,看完就对引擎的整个架子有了一个简单但全面的认识,学的过程也很有意思。千万不要一上来就抱着本大部头的计算机图形学来看,那种书在这个阶段除了打击你的积极性以外没什么帮助。那是很好的参考书,有问题了去翻相应的部分,可以买一本参考一辈子的。保持兴趣和好奇心非常重要,否则引擎研发之路漫长,失去兴趣就走不下去了。有时间了我也想写一本专门给初学者看的书,就叫《边玩边学3D游戏引擎》吧。

4、在初级阶段,就要开始深入研究各个模块了。这个阶段以学习为主,并能承担一些较为简单的开发任务。资源加载、内存管理、场景管理、地形、动画、渲染算法、声音等都要至少了解吧,自己感兴趣的部分可以深入看。引擎发展了这么多年,网上的各种资料还是挺多的。这个阶段可以找一个好的引擎和资料结合着看。Ogre不太建议看,设计模式太重了。2.x好了很多,但是目前还在开发阶段。Urho3D是个质量很好的开源引擎,缺点是目前网上资料几乎没有,我自己打算开始写这方面的博客。不过这个引擎设计的非常简洁,另外代码里的注释非常详尽,还是很容易看懂的。

5、到了中级阶段,已经对整个引擎有了全面的认识,掌握的知识也能胜任常规的开发任务了。这个阶段没必要去刻意学什么了,遇到什么需求就去研究相应的内容。

6、在向高级阶段挺进时,就很少有人能帮到了。引擎是一套算法密集型的程序,所以需要大量研究英文版的资料。到了这个阶段,对引擎整体设计有了自己的独到理解,基本上都能独当一面了。

7、怎么进入骨灰级的水平我也没有任何经验。如果你有机会可以去问卡马克,别忘了跟我分享下。

8、引擎涉及的知识面非常广。所以切忌漫无目的的看,最好选择一个自己擅长或者非常喜欢的点切入。例如,我入行时对漂亮的图形很感兴趣,所以就先从图形算法开始切入了。先专注研究一个模块,一定要精,透彻一个再扩大,否则什么都是个半瓶子醋就很不好了,这样的人我见过不少。在研究一个模块时会慢慢涉及到其他模块,逐渐扩大范围。

9、一定要能沉下来心。很不幸,很多人其实是不适合引擎这种底层研发工作的。

10、不要重复造轮子。很多人认为能做出自己的引擎很高大上,看了几个图形Demo后就动手了,一开始热血沸腾,摊子铺得很大,结果几天新鲜劲过去了,只剩一堆没有任何价值的废物。确实自己动手可以提升水平,不过为什么不选择一个较小的模块深入做呢。要知道今天的引擎早已经不是靠一个人的个人英雄主义就能做出来的,就是卡马克也不行,有商业价值的引擎只能靠团队才能做出来。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
下面是一个简单的 Java 飞机大战小游戏的代码示例: ``` import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class PlaneGame extends JPanel { // 定义一个飞机对象 private Plane plane; // 初始化窗口 public void init() { plane = new Plane("plane.png", 250, 250); // 创建一个窗口 JFrame frame = new JFrame("飞机大战"); frame.add(this); frame.setSize(500, 500); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } // 绘制窗口内容的方法 public void paint(Graphics g) { super.paint(g); g.drawImage(plane.getImage(), plane.getX(), plane.getY(), null); } public static void main(String[] args) { new PlaneGame().init(); } } // 飞机类 class Plane { // 定义飞机图片 private Image image; // 定义飞机的坐标 private int x, y; public Plane(String imagePath, int x, int y) { // 初始化图片 this.image = new ImageIcon(imagePath).getImage(); this.x = x; this.y = y; } public Image getImage() { return image; } public void setImage(Image image) { this.image = image; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } } ``` 上面的代码实现了一个简单的 Java 飞机大战小游戏,其中定义了一个 PlaneGame 类,该类继承了 JPanel 类,并在其中定义了一个飞机对象。init() 方法用于初始化窗口,paint() 方

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值