返回信息流发帖人 LiPb
[分享]游戏开发相关东西(大多是zt)
首先大家大概就是要考虑的语言问题:
我该使用何种语言
| |
目录:
1、C语言
2、C++
3、C++与C的抉择
4、汇编语言
5、Pascal语言
6、Visual Basic
7、Java
8、创作工具
9、结论
--------------------------------------------------------------------------------
原 文:What Language Do I Use
译 者:Sunlxy
版 本:the first edition(Ver 1.0)
--------------------------------------------------------------------------------
这是每个游戏编程FAQ里都有的问题。这个问题每星期都会在游戏开发论坛上被问上好几次。这是个很好的问题,但是,没人能给出简单的答案。在某些应用程序中,总有一些计算机语言优于其他语言。下面是几种用于编写游戏的主要编程语言的介绍及其优缺点。希望这篇文章能帮助你做出决定。
This is a question that belongs in every game programming FAQ. It seems to be asked in a game development forum several times a week. It's a good question, though, and not one with an easy answer. There are computer languages that work better for some applications than others. Here is a list of the major programming languages used to write games along with descriptions, advantages, and disadvantages. Hopefully this list will help you make a decision.
1、C语言
如果说FORTRAN和COBOL是第一代高级编译语言,那么C语言就是它们的孙子辈。C语言是Dennis Ritchie在七十年代创建的,它功能更强大且与ALGOL保持更连续的继承性,而ALGOL则是COBOL和FORTRAN的结构化继承者。C语言被设计成一个比它的前辈更精巧、更简单的版本,它适于编写系统级的程序,比如操作系统。在此之前,操作系统是使用汇编语言编写的,而且不可移植。C语言是第一个使得系统级代码移植成为可能的编程语言。
If FORTRAN and COBOL were the first compiled high-level languages, then C is their grandchild. It was created in the 70's by Dennis Ritchie as a tighter and more coherent successor to ALGOL, which was a structured successor to COBOL and FORTRAN. It was designed to be a smaller and simpler version of its predecessors, suitable for writing system-level programs, like operating systems. Before then, operating systems were hand-coded in assembly and were not portable. C was the first programming language that made portability a reality for system-level code.
C语言支持结构化编程,也就是说C的程序被编写成一些分离的函数呼叫(调用)的集合,这些呼叫是自上而下运行,而不像一个单独的集成块的代码使用GOTO语句控制流程。因此,C程序比起集成性的FORTRAN及COBOL的“空心粉式代码”代码要简单得多。事实上,C仍然具有GOTO语句,不过它的功能被限制了,仅当结构化方案非常复杂时才建议使用。
C is a language that supports structured programming. That is to say that C programs are written as collections of disconnected function calls that run top-down rather than a single monolithic block of code with program control-flow happening via GOTO statements. Hence, C programs are generally easier to follow than monolithic FORTRAN and COBOL spaghetti-code. Actually, C still has a GOTO statement, but its functionality is limited and it is only recommended as a last resort if structured solutions are much more complicated.
正由于它的系统编程根源,将C和汇编语言进行结合是相当容易的。函数调用接口非常简单,而且汇编语言指令还能内嵌到C代码中,所以,不需要连接独立的汇编模块。
True to its system-programming roots, it is fairly easy to interface C with assembly languages. The function-calling interface is very simple, and assembly language instructions can be embedded within C code, so linking in separate assembly-language modules is not necessary.
优点:有益于编写小而快的程序。很容易与汇编语言结合。具有很高的标准化,因此其他平台上的各版本非常相似。
Advantages: Good for writing small fast programs. Easy to interface with assembly language. Very standardized, so versions on other platforms are similar.
缺点:不容易支持面向对象技术。语法有时会非常难以理解,并造成滥用。
Disadvantages: Does not easily support object-oriented techniques. Syntax can be difficult and lends itself to abuse.
移植性:C语言的核心以及ANSI函数调用都具有移植性,但仅限于流程控制、内存管理和简单的文件处理。其他的东西都跟平台有关。比如说,为Windows和Mac开发可移植的程序,用户界面部分就需要用到与系统相关的函数调用。这一般意味着你必须写两次用户界面代码,不过还好有一些库可以减轻工作量。
Portability: While the core of the language and the ANSI function calls are very portable, they are limited to control-flow, memory management, and simple file-handling. Everything else is platform-specific. Making a program that's portable between Windows and the Mac, for instance, requires that the user-interface portions be using system-specific function calls. This generally means that you need to write the user-interface code twice. There are libraries, though, that make the process a bit easier.
用C语言编写的游戏:非常非常多。
Games Written in C: Lots and lots.
资料:C语言的经典著作是《The C Programming Language》,它经过多次修改,已经扩展到最初的三倍大,但它仍然是介绍C的优秀书本。一本极好的教程是《The Waite Group's C Primer Plus》。
Resources: The classic book about C is [The C Programming Language].It's gone through several iterations and has expanded to about three times its original size, but it's still a good introduction to the language. An excellent tutorial is [The Waite Group's C Primer Plus].
2、C++
C++语言是具有面向对象特性的C语言的继承者。面向对象编程,或称OOP是结构化编程的下一步。OO程序由对象组成,其中的对象是数据和函数离散集合。有许多可用的对象库存在,这使得编程简单得只需要将一些程序“建筑材料”堆在一起(至少理论上是这样)。比如说,有很多的GUI和数据库的库实现为对象的集合。
C++ is the object-oriented successor to C. Object-oriented, or OO, programs are the next step beyond structured programming. OO programs are built out of objects, which are packages of data and functions collected into discrete units. There are many libraries of objects available that make writing programs as simple as pulling together a collection of program "building blocks" (at least in theory). For example, there are many GUI and database libraries that are implemented as collections of objects.
C++总是辩论的主题,尤其是在游戏开发论坛里。有几项C++的功能,比如虚拟函数,为函数呼叫的决策制定增加了一个额外层次,批评家很快指出C++程序将变得比相同功能的C程序来得大和慢。C++的拥护者则认为,用C写出与虚拟函数等价的代码同样会增加开支。这将是一个还在进行,而且不可能很快得出结论的争论。
C++ is the subject of controversy, especially in the game development community. There are features of C++, like virtual functions, that add an extra layer of decision-making to function calls, and critics are quick to point out that C++ programs can be larger and slower than C counterparts. C++ advocates point out, however, that coding the equivalent of a virtual function in C requires the same overhead. It's an on-going debate that's not likely to be decided soon.
我认为,C++的额外开支只是使用更好的语言的小付出。同样的争论发生在六十年代高级程序语言如COBOL和FORTRAN开始取代汇编成为语言所选的时候。批评家正确的指出使用高级语言编写的程序天生就比手写的汇编语言来得慢,而且必然如此。而高级语言支持者认为这么点小小的性能损失是值得的,因为COBOL和FORTRAN程序更容易编写和维护。
In my opinion, the overhead of C++ is simply the price you pay for a better language. This same debate went on in the 60's when high-level programming languages like COBOL and FORTRAN started to displace hand-coded assembly as the language of choice. Critics correctly pointed out that programs written in high-level languages were inherently slower than hand-tuned assembly and always would be. High-level language advocates pointed out, however, that the slight performance hit was worth it because COBOL and FORTRAN programs were much easier to write and maintain.
优点:组织大型程序时比C语言好得多。很好的支持面向对象机制。通用数据结构,如链表和可增长的阵列组成的库减轻了由于处理低层细节的负担。
Advantages: Much better than C for organizing large programs. Supports the object-oriented paradigm nicely. Libraries of common data structures, like linked lists and grow-able arrays, can remove much of the burden of having to deal with low-level details.
缺点:非常大而复杂。与C语言一样存在语法滥用问题。比C慢。大多数编译器没有把整个语言正确的实现。
Disadvantages: Extremely large and complicated. Like C, the syntax lends itself to abuse. Can be slower than C. Not many compilers implement the entire language correctly.
移植性:比C语言好多了,但依然不是很乐观。因为它具有与C语言相同的缺点,大多数可移植性用户界面库都使用C++对象实现。
Portability: Better than C, but still not great. While it shares the same disadvantage as C, most of the portable user-interface libraries are implemented as collections of C++ objects.
使用C++编写的游戏:非常非常多。大多数的商业游戏是使用C或C++编写的。
Games Written in C++: Lots and lots. Almost all commercial games are written in C or C++.
资料:最新版的《The C++ Programming Language》非常好。作为教程,有两个阵营,一个假定你知道C,另外一个假定你不知道。到目前为止,最好的C++教程是《Who's Afraid of C++》,如果你已经熟知C,那么试一下《Teach Yourself C++》。
Resources: The latest edition of The C++ Programming Language is excellent. As for tutorials, there are two camps, ones that assume you know C, and ones you don't. By far the best ground-up C++ tutorials are Who's Afraid of C++ and Who's Afraid of More C++. If you already know C, try Teach Yourself C++.
3、我该学习C++或是该从C开始(Should I learn C++, or should I start with C )
我不喜欢这种说法,但它是继“我该使用哪门语言”之后最经常被问及的问题。很不幸,不存在标准答案。你可以自学C并使用它来写程序,从而节省一大堆的时间,不过使用这种方法有两个弊端:
I thought this bore mentioning, as it's the second most commonly asked question next to "which programming language should I use?"Unfortunately, the answer isn't black and white. You could save a lot of time by just teaching yourself C and writing apps, but there are two disadvantages to this approach.
你将错过那些面向对象的知识,因为它可能在你的游戏中使得数据建模更有效率的东西。
You're missing out on what will likely be a much more effective way of modeling the data in your game. By not learning OO programming off the bat, you could be enforcing bad programming habits that you'll have to un-learn later. Trust me on this one.
最大的商业游戏,包括第一人称射击游戏很多并没有使用C++。但是,这些程序的作者即使使用老的C的格式,他们通常坚持使用面向对象编程技术。如果你只想学C,至少要自学OO(面向对象)编程技术。OO是仿真(游戏)的完美方法,如果你不学习OO,你将不得不“辛苦”的工作。
Many of the biggest commercial games, including most first-person shooters, get by without C++. The authors of these programs, however, always insist that they're using object-oriented programming techniques even though they're using plain old C. If you want to just learn C, at least teach yourself OO programming techniques. OO is the perfect methodology for simulations (read: games), and you'll really be doing it "the hard way" if you push off learning OO.
4、汇编语言(Assembly)
显然,汇编是第一个计算机语言。汇编语言实际上是你计算机处理器实际运行的指令的命令形式表示法。这意味着你将与处理器的底层打交道,比如寄存器和堆栈。如果你要找的是类英语且有相关的自我说明的语言,这不是你想要的。
By default, assembly was the first computer language. Assembly language is actually a command-based representation of the actual instructions that your computer's processor runs. That means you will be dealing with the low-level details of your processor, like registers and stacks. If you're looking for a language that's English-like and is relatively self-documenting, this isn't it!
确切的说,任何你能在其他语言里做到的事情,汇编都能做,只是不那么简单 — 这是当然,就像说你既可以开车到某个地方,也可以走路去,只是难易之分。话虽不错,但是新技术让东西变得更易于使用。
By definition, anything you can do in any other language, you can do in assembly, only not as easily --of course, that's like saying that anywhere you can go in a car, you can go on foot, only not as easily. While the statement might be true, the later technologies made things much easier to use.
总的来说,汇编语言不会在游戏中单独应用。游戏使用汇编主要是使用它那些能提高性能的零零碎碎的部分。比如说,毁灭战士整体使用C来编写,有几段绘图程序使用汇编。这些程序每秒钟要调用数千次,因此,尽可能的简洁将有助于提高游戏的性能。而从C里调用汇编写的函数是相当简单的,因此同时使用两种语言不成问题。
In general, assembly language is not used on its own for games. Games that use assembly language use it in bits and pieces where it can improve performance. For example, DOOM is written entirely in C with a couple of drawing routines hand-coded in assembly. They are the routines that are called a few thousand times a second, so making the routine as tight as possible really helped the performance of the game. It's fairly easy to write a function in assembly that is call-able from C, so using both languages wasn't a problem.
特别注意:语言的名字叫“汇编”。把汇编语言翻译成真实的机器码的工具叫“汇编程序”。把这门语言叫做“汇编程序”这种用词不当相当普遍,因此,请从这门语言的正确称呼作为起点出发。
Special Note: The name of the language is "assembly". The name of the tool that converts assembly language into true machine code is called an "assembler". It's a common misnomer to call the language "assembler", so start out on the right foot by calling the language by its proper name.
优点:最小、最快的语言。汇编高手能编写出比任何其他语言能实现的快得多的程序。你将是利用处理器最新功能的第一人,因为你能直接使用它们。
Advantages: Is, by definition, the smallest and fastest language. A talented assembly programmer can write programs that are faster than anything that can be done in other languages. You'll be the first person to be able to take advantage of the processor's latest new features, because you can use them directly.
缺点:难学、语法晦涩、坚持效率,造成大量额外代码 — 不适于心脏虚弱者。
Disadvantages: Difficult to learn, cryptic syntax, tough to do efficiently, and it takes much more code to get something done --not for the faint of heart!
移植性:接近零。因为这门语言是为一种单独的处理器设计的,根本没移植性可言。如果使用了某个特殊处理器的扩展功能,你的代码甚至无法移植到其他同类型的处理器上(比如,AMD的3DNow指令是无法移植到其它奔腾系列的处理器上的)。
Portability: Zilch. Since the language is designed for a single processor, it is not portable by definition. If you use extensions specific to a particular brand of processor, your code isn't even portable to other processors of the same type (for example, AMD 3DNOW instructions are not portable to other Pentium-class processors).
使用汇编编写的游戏:我不知道有什么商业游戏是完全用汇编开发的。不过有些游戏使用汇编完成多数对时间要求苛刻的部分。
Games Written in Assembly: I don't know of any commercial games that are written entirely in assembly. Some games, however, have the most time-critical portions done in assembly.
资料:如果你正在找一门汇编语言的文档,你主要要找芯片的文档。网络上如Intel、AMD、Motorola等有一些关于它们的处理器的资料。对于书籍而言,《Assembly Language: Step-By-Step》是很值得学习的。
Resources: When you're looking for documentation for an assembly language, you're basically looking for the documentation for the chip. There is some online information at [Intel], [AMD][Motorola] for their processors. As for books, [Assembly Language: Step-By-Step] is well-reviewed.
5、Pascal语言
Pascal语言是由Nicolas Wirth在七十年代早期设计的,因为他对于FORTRAN和COBOL没有强制训练学生的结构化编程感到很失望,“空心粉式代码”变成了规范,而当时的语言又不反对它。Pascal被设计来强行使用结构化编程。最初的Pascal被严格设计成教学之用,最终,大量的拥护者促使它闯入了商业编程中。当Borland发布IBM PC上的 Turbo Pascal时,Pascal辉煌一时。集成的编辑器,闪电般的编译器加上低廉的价格使之变得不可抵抗,Pascal编程了为MS-DOS编写小程序的首选语言。
Pascal was designed by Nicolas Wirth in the early 70's, because he was dismayed to see that FORTRAN and COBOL were not enforcing healthy structured programming disciplines in students. "Spaghetti code" was becoming the norm, and the languages of the time weren't discouraging it. Pascal was designed from the ground up to enforce structured programming practices. While the original Pascal was designed strictly for teaching, it had enough advocates to eventually make inroads into commercial programming. Pascal finally took the spotlight in a big way when Borland released Turbo Pascal for the IBM PC. The integrated editor, lightning-fast compiler, and low price were an irresistible combination, and Pascal became the preferred language for writing small programs for MS-DOS.
然而时日不久,C编译器变得更快,并具有优秀的内置编辑器和调试器。Pascal在1990年Windows开始流行时走到了尽头,Borland放弃了Pascal而把目光转向了为Windows 编写程序的C++。Turbo Pascal很快被人遗忘。
The momentum, however, did not stay. C compilers became faster and got nice built-in editors and debuggers. The almost-final nail in Pascal's coffin happened in the early 1990's when Windows took over, and Borland ignored Pascal in favor of C++ for writing Windows applications. Turbo Pascal was all but forgotten.
最后,在1996年,Borland发布了它的“Visual Basic杀手”— Delphi。它是一种快速的带华丽用户界面的 Pascal编译器。由于不懈努力,它很快赢得了一大群爱好者。
Finally, in 1996, Borland released its "Visual Basic Killer", Delphi. Delphi was a fast Pascal compiler coupled with a gorgeous user interface. Against all odds (and the Visual Basic juggernaut), it gained a lot of fans.
基本上,Pascal比C简单。虽然语法类似,它缺乏很多C有的简洁操作符。这既是好事又是坏事。虽然很难写出难以理解的“聪明”代码,它同时也使得一些低级操作,如位操作变得困难起来。
On the whole, Pascal is simpler than C. While the syntax is similar, it lacks a lot of the shortcut operations that C has. This is a good thing and a bad thing. It's harder to write inscrutable "clever" code, but it makes low-level operations like bit-manipulation more difficult.
优点:易学、平台相关的运行(Dephi)非常好。
Advantages: Easy to learn. Platform-specific implementations (Delphi) are very nice.
缺点:“世界潮流”面向对象的Pascal继承者(Modula、Oberon)尚未成功。语言标准不被编译器开发者认同。专利权。
Disadvantages: "World class" OO successors to Pascal (Modula, Oberon) have not been successful. Language standards are not adhered to by compiler-makers. Proprietary.
移植性:很差。语言的功能由于平台的转变而转变,没有移植性工具包来处理平台相关的功能。
Portability: Dismal. The features of the language changes from platform to platform, and there are no portability toolkits to handle platform-specific features.
使用Pascal编写的游戏:几个。DirectX的Delphi组件使得游戏场所变大了。
Games Written in Pascal: A couple. The DirectX components for Delphi have made the playing field more level.
资料:查找跟Delphi有关的资料,请访问:Inprise Delphi page。
Resources: The find out about Delphi, check out the Inprise Delphi page.
6、Visual Basic
哈,BASIC。回到八十年代的石器时代,它是程序初学者的第一个语言。最初的BASIC形式,虽然易于学习,却是可怕的无组织化,它义无返顾的使用了GOTO充斥的“空心粉式代码”。当回忆起BASIC的行号和GOSUB命令,没有几个人能止住眼角的泪水。
Ahh, BASIC. Way back in the stone-age of the 80's, it was the first language for budding programmers. The original incarnations of BASIC, while easy to learn, were horribly unstructured, leading to the a rash of GOTO-laden "spaghetti-code". Not many people wipe away tears when reminiscing about BASIC's line numbers and the GOSUB command.
快速前进到九十年代早期,虽然不是苹果公司所希望的巨人,HyperCard仍然是一个在Windows下无法比拟的吸引人的小型编程环境。Windows下的HyperCard克隆品如ToolBook又慢又笨又昂贵。为了与HyperCard一决高下,微软取得了一个小巧的名为Thunder编程环境的许可权,并把它作为Visual Basci 1.0发布,其用户界面在当时非常具有新意。这门语言虽然还叫做Basic(不再是全部大写),但更加结构化了,行号也被去除。实际上,这门语言与那些内置于TRS-80、Apple II及Atari里的旧的ROM BASIC相比,更像是带Basic风格动词的Pascal。
Fast-forward to the early 1990's. While not the monster that Apple was hoping for, HyperCard was a compelling little programming environment that had no equal under Windows. Windows-based HyperCard clones like ToolBook were slow, clunky, and expensive. To finally compete with HyperCard, Microsoft licensed a neat little programming environment named Thunder, releasing it as Visual Basic 1.0. The user-interface was very innovative for the time. The language, while still called Basic (and no longer all-caps), was much more structured. Line numbers were mercy-killed. The language was, in fact, much closer to Pascal with Basic-style verbs than the old ROM BASIC that was built into every TRS-80, Apple ][, and Atari.
经过六个版本,Visual Basic变得非常漂亮。用户界面发生了许多变化,但依然保留着“把代码关联到用户界面”的主旨。这使得它在与即时编译结合时变成了一个快速原型的优异环境。
Six versions later, Visual Basic is pretty deluxe. The user-interface has made some changes, but still retains its "attach bits of code to the user-interface" motif. This, in combination with instantaneous compiling, makes it a terrific environment for fast prototyping.
优点:整洁的编辑环境。易学、即时编译导致简单、迅速的原型。大量可用的插件。虽然有第三方的DirectX插件,DirectX 7已准备提供Visual Basic的支持。
Advantages: Neat IDE. Easy to learn. Instantaneous compiling makes for very fast and easy prototyping. Lots and lots of add-ons available. While there are currently third-party DirectX add-ons for Visual Basic, DirectX version 7 is going to include support for Visual Basic right out of the box.
缺点:程序很大,而且运行时需要几个巨大的运行时动态连接库。虽然表单型和对话框型的程序很容易完成,要编写好的图形程序却比较难。调用Windows的API程序非常笨拙,因为VB的数据结构没能很好的映射到C中。有OO功能,但却不是完全的面向对象。专利权。
Disadvantages: Apps are large and require several large runtime DLL's to run. While form and dialog-based apps are easy to make, writing good graphical apps is more difficult. Calling Windows API functions is clunky, because VB data structures don't map nicely to C. Has OO features, but is not fully object-oriented. Proprietary.
移植性:非常差。因为Visual Basic是微软的产品,你自然就被局限在他们实现它的平台上。也就是说,你能得到的选择是:Windows,Windows或Widnows。当然,有一些工具能将VB程序转变成Java。
Portability: Worse than dismal. Since Visual Basic is owned by Microsoft, you're pretty-much limited to whatever platforms they've ported it too. That means that you've got the choice of Windows, Windows, or Windows. Note that there are, however, a couple of tools that help convert VB apps to Java.
使用Visual Basic编写的游戏:一些。有很多使用VB编写的共享游戏,还有一些是商业性的。
Games Written in Visual Basic: A few. There are lots of shareware games done in VB, and a couple of commercial offerings.
资料:微软的VB页面有一些信息。
Resources: The [Microsoft VB page].
7、Java
Java是由Sun最初设计用于嵌入程序的可移植性“小C++”。在网页上运行小程序的想法着实吸引了不少人的目光,于是,这门语言迅速崛起。事实证明,Java不仅仅适于在网页上内嵌动画 — 它是一门极好的完全的软件编程的小语言。“虚拟机”机制、垃圾回收以及没有指针等使它很容易实现不易崩溃且不会泄漏资源的可靠程序。
Java was originally designed by Sun to be a portable "small C++" that could be used in embedded applications. The idea of running little applications in a web-page really captured people's imaginations, so the language caught on quickly. It turned out that Java wasn't just suitable for embedding animated banners in web pages --it was a downright nifty little language for application programming! The "virtual machine" nature, garbage collection and lack of pointers made it easy to make bulletproof apps that didn't crash and had no resource leaks.
虽然不是C++的正式续篇,Java从C++ 中借用了大量的语法。它丢弃了很多C++的复杂功能,从而形成一门紧凑而易学的语言。不像C++,Java强制面向对象编程,要在Java里写非面向对象的程序就像要在Pascal里写“空心粉式代码”一样困难。
While not an official "sequel" to C++, Java borrows very heavily from C++ syntax. It dumps many of the more difficult C++ features to reveal a rather compact and easy-to-learn language. Unlike C++, Java enforces object-orientation with a heavy hand. Writing a non-OO app in Java is as difficult as writing spaghetti-code in Pascal.
优点:二进制码可移植到其他平台。程序可以在网页中运行。内含的类库非常标准且极其健壮。自动分配合垃圾回收避免程序中资源泄漏。网上数量巨大的代码例程。
Advantages: Binaries are portable to other platforms. Apps can run embedded in web pages. The included class library is reasonably standardized and extremely robust. Automatic allocation and garbage collection all but eliminates resource leaks in applications. Zillions of code examples on the web.
缺点:使用一个“虚拟机”来运行可移植的字节码而非本地机器码,程序将比真正编译器慢。有很多技术(例如“即时”编译器)很大的提高了Java的速度,不过速度永远比不过机器码方案。早期的功能,如AWT没经过慎重考虑,虽然被正式废除,但为了保持向后兼容不得不保留。越高级的技术,造成处理低级的机器功能越困难,Sun为这门语言增加新的“受祝福”功能的速度实在太慢。
Disadvantages: Uses a "virtual machine" to run portable byte-code rather than native machine code, so apps are slower than true compilers. There are technologies (like "Just In Time" compilers) that greatly improve the speed of Java, but the speed will likely always lag behind true machine-code solutions. Early features like the Abstract Windowing Toolkit were not well thought-out and, while officially abandoned, have to hang around for backward compatibility. Is very high-level, which makes dealing with any low-level machine features very difficult. Sun is pretty slow in adding new "blessed" features to the language.
移植性:最好的,但仍未达到它本应达到的水平。低级代码具有非常高的可移植性,但是,很多UI及新功能在某些平台上不稳定。
Portability: The best of the lot, but still not what it should be. The low-level code is very portable, but a lot of the UI and newer features are wobbly on some platforms.
使用Java编写的游戏:网页上有大量小的Applet,但仅有一些是商业性的。有几个商业游戏使用Java作为内部脚本语言。
Games Written in Java: Lots of little applets in web pages, but only a couple of commercial offerings. Several commercial games use Java as the internal script language.
资料:Sun的官方Java页面有一些好的信息。IBM也有一个非常好的Java页面。JavaLobby是一个关于Java新闻的最好去处。
Resources: [Sun's official Java page] has some good info. IBM also has an excellent [Java page]. The [JavaLobby] is the best place to go for news about Java.
8、创作工具
上面所提及的编程语言涵盖了大多数的商业游戏。但是也有一个例外,这个大游戏由于它的缺席而变得突出。
All of the programming languages mentioned above cover pretty-much every commercial game out there. There is one exception, but it's such a big one that it would be conspicuous by its absence.
“神秘岛”。没错,卖得最好的商业游戏不是使用以上任何一门语言编的,虽然有人说“神秘岛”99%是使用 3D建模工具制作的,其根本的编程逻辑是在HyperCard里完成的。
Yep, the best selling commercial game of all time wasn't written in any of the above languages. While some would say that 99% of Myst was written using 3D modeling tools, the underlying program logic was done in HyperCard.
多数创作工具有点像Visual Basic,只是它们工作在更高的层次上。大多数工具使用一些拖拉式的流程图来模拟流程控制。很多内置解释的程序语言,但是这些语言都无法像上面所说的单独的语言那样健壮。
Most authoring tools are a bit like Visual Basic, only they work at a much higher level. Most of the tools use some kind of click-and-drag flowchart motif to model control flow. Many contain embedded interpreted programming languages, but these languages aren't nearly as robust as the standalone languages mentioned above.
优点:快速原型 — 如果你的游戏符合工具制作的主旨,你或许能使你的游戏跑得比使用其他语言快。在很多情况下,你可以创造一个不需要任何代码的简单游戏。使用插件程序,如Shockware及IconAuthor播放器,你可以在网页上发布很多创作工具生成的程序。
Advantages: Fast prototyping --if your game fits the motif the tool's made for, you can probably get your game running faster than any other language. In many cases, you can make a rudimentary game without writing any code. You can broadcast many authored apps on web pages with plug-ins like Shockwave and IconAuthor Player.
缺点:专利权,至于将增加什么功能,你将受到工具制造者的支配。你必须考虑这些工具是否能满足你游戏的需要,因为有很多事情是那些创作工具无法完成的。某些工具会产生臃肿得可怕的程序。
Disadvantages: Proprietary, so you're at the mercy of the tool-maker as to what features will be added. You've gotta really look at these tools to see if they'll do everything that your game's gonna require, because there are things that authoring tools simply can't do. Some of these tools produce frighteningly bloated apps.
移植性:因为创作工具是具有专利权的,你的移植性以他们提供的功能息息相关。有些系统,如Director可以在几种平台上创作和运行,有些工具则在某一平台上创作,在多种平台上运行,还有的是仅能在单一平台上创作和运行。
Portability: Since authoring tools are proprietary, your portability is limited to whatever they offer. Some systems, like Director, can author and run on several platforms. Some tools can author on one platform but play on several. Some are single-platform beasts.
使用创作工具编写的游戏:“神秘岛”和其他一些同类型的探险游戏。所有的Shockwave游戏都在网络上。
Games Written in Authoring Tools: Myst and a few other "exploration" games of the same genre. All of the Shockwave games on the web.
资料:Director、HyperCard、SuperCard、IconAuthor、Authorware。
9、结论(Conclusion)
你可能希望得到一个关于“我该使用哪种语言”这个问题的更标准的结论。非常不幸,没有一个对所有应用程序都最佳的解决方案。C适于快而小的程序,但不支持面向对象的编程。C++完全支持面向对象,但是非常复杂。Visual Basic与Delphi易学,但不可移植且有专利权。Java有很多简洁的功能,但是慢。创作工具可以以最快的速度产生你的程序,但是仅对某一些类型的程序起作用。最好的方法是决定你要写什么样的游戏,并选择对你的游戏支持最好的语言。“试用三十天”的做法成为工业标准是件好事情。
You probably were hoping for a more cut-n-dry conclusion to the "what programming language do I use" dilemma. Unfortunately, there's no solution that's optimal for all applications. C is suited for fast and small applications, but doesn't support OO programming well. C++ has very complete OO support, but is frighteningly complicated. Visual Basic and Delphi are easy to learn, but are non-portable and proprietary. Java has a lot of neat features, but is slow. Authoring tools can get your app working quickest, but are only useful for a narrow range of applications. It might just be best for you to figure out what kind of game you're writing and pick the language that would best support your game. It's a good thing that the "try it free for 30 days" offer has become the industry norm :-)
第2 贴. 发表时间: 09-17-2004 23:43
语言以后……
Handle Your Window
有了程式語言的基礎之後呢?在你急著想學些3D的程式設計之前,先等一下,我們還得先拜拜碼頭:「先學會和我們可愛的 Windows 溝通溝通囉!」和 Windows 老大打好人際關係後,以後我們做起事來才會順利的多。誰也不希望程式執行到半途,老是跑出「此程式執行無效,即將關閉」的蔚藍-畫面吧?
『寫程式歸寫程式,又關它 Windows 老大啥事了勒?』
話,不是這麼說滴。我們要知道,所有電腦中的應用程式,都是建構在「作業系統」上面動作的;我們在 PC 上所寫的遊戲當然也算是應用程式的一種。而 Windows 正是扮演著「作業系統」這個角頭老大的角色。由它來分配每個應用程式所可以使用到的記憶體以及 CPU,還有一般的鍵盤滑鼠訊息也都是經由它來傳送資訊給應用程式的。所以囉,想在 Windows 上寫作程式,當然需要先過這關囉。
『所以,現在有充分的理由開始學習 Windows SDK 囉。』
不,即使會使用 VB 來設計視窗應用程式,也並不代表真正瞭解視窗程式設計的意涵。我再說一次,直覺化如 VB 或 BCB 的拖拉點放「視窗元件」設計介面,也只是在你熟悉了視窗程式的核心概念之後,才能應用得宜、加速程式開發的。在那之前,好好的從基本的視窗程式寫作開始學習起,才是最正確並且合適的做法。
對一個習慣了在 DOS 上開發寫作應用程式的人來說,在學習視窗程式設計的過程中,一開始最無法適應的就是找不到 main() 這個程式的起始點;在 Windows programming 中,都是以 WinMain() 取代 main() 了。除此之外,還有很多一開始比較難以接受的新概念:什麼是訊息迴圈?不可或缺的 WndProc() 又是做什麼的?怎麼輸出文字?………… 相當多在 DOS 上的程式用法或函式,到了 Windows 上卻不管用了。如今,要在 Windows 上寫出一個最簡單基本的 “Hello, World” 小程式,也約略要寫 100 行左右的程式碼。不過也不用擔心太多,只要找到一本好書做為學習的教材,就能夠很快的進入狀況、熟悉環境了。在此當然不得不推崇 Charles Petzold 原著的 Programming Windows 這本書,內容真可謂是鉅細靡遺,書中還包括了每一個範例程式的完整程式碼,不論是書的厚度或內容,都是相當地具有「份量」;目前此書也已有中譯本。
『那麼,SDK 的學習大概要到什麼程度呢?』
以 Programming Windows 這本書為例,我想真的很少有人能夠有足夠的耐性與時間,完整的啃完厚達 1500 頁的內容吧?何況其中的內容雖然非常豐富可觀,但如果僅是以「遊戲設計」為目標的話,倒也不需要懂這麼多東西。那麼至少,要學到什麼程度?我想,至少的至少,要學會如何鍵盤及滑鼠事件的操控,才能算是及格了。如果對如何使用 SDK 寫出一些進階功能的視窗有興趣的話,例如像子視窗、功能表、加速鍵、對話盒、文字字體、多工多緒之類較進階的課題,就可以再往這本書後面的章節繼續學習。如果在此時不學習這些進階的程式功能也是可以的,未來我們可以選擇學習 SDK 之外的其他方法,如 MS 的 MFC,及 Borland 的 VCL,來實做一個進階的視窗程式。有了以上的基本概念之後,才能再往下一個領域探索學習;如果在學會程式語言之後,沒有先具備視窗程式的設計概念,就急著想學 DirectX,到後來只會形成不得要領、四處碰壁的學習窘狀罷了。
Let's Rock'n Roll
馬步紮穩之後,就可以開始來玩玩真正有趣的東西囉!
『Graphics,是一個遊戲的程式設計中,相當重要的一個部分,也常常是一個遊戲的程式設計師的最主要工作。當然,也可以說是程式設計中,最有趣的一件事。』
「那麼要從哪裡開始?」首先,我們必須瞭解,要去寫一個3D的程式,並不是全部從無到有的從頭做起、一個一個輪子的造出來;而是去使用一組別人已經做好的基本功能,像堆積木一樣的一步步堆砌出我們夢想中的城堡。我們無須去在意每一塊積木的內部構造是什麼、或從何而來,而是應該學習如何利用這些不同積木的不同特性,建造出最合適的目標。轉換成程式的觀點來說,就是世界上的某幾個大頭,制訂了一組標準的3D繪圖函式以供其他人使用;而一般的程式設計師,就只需要去瞭解該函式的介面及使用方法就可以了。如此的一組函式及介面,也就是常被人稱做 API (Application Programming Interface) 的東西。
或許你已經聽過,目前主流的3D繪圖 API 由兩大流派分庭抗禮 — 分別是 DirectGraphics 以及 OpenGL。那應該學一個比較好呢?是的,相信這也是困擾著很多初學者的問題之一。「網路上好像關於 OpenGL 的資源比較多耶?」……「可是遊戲業界好像都是用 DirectGraphics 居多耶?」…………。
『我的建議是:兩者都學。』
唯有兼容並蓄、納-百家之長於一身,才能在遇到問題時,提出最合適的解決方法。OpenGL 與 DirectGraphics 可說是各有優缺點:OpenGL 的程式介面固定性很大,操作方式簡單、易於學習;但它只提供一些基本功能的函式,並且它的版本更新太慢,若遇到新的技術出來,往往只能以 extension 的附加標籤功能來加強。而 DirectX 的使用方法則較為繁雜,但它也提供了更多進階功能的函式可供使用;而它的版本幾乎每年更新,是好事也是壞事,往往新版 DirectX 的程式介面都會和舊版有不小的相異之處,特別是從 DX7 到 DX8 的轉變更是劇烈;這對所有的程式設計師來說,都是一場又一場「程式引擎重寫」的惡夢。
『然而,對一個對沒有3D圖學背景、初學3D程式設計的人來說,我建議從 OpenGL 開始。』
理由如下:OpenGL 的使用方法較 DirectX 簡易且直覺,可以讓初學者專注於真正重要的3D圖學基礎的學習上。包括書籍、教學網站、原始碼,OpenGL 擁有相當多的資源可供學習及參考。並且 OpenGL 的介面固定、很少變動,新版本的 OpenGL 通常都能夠和舊版本完全相容;不用擔心學了之後,或甚至還沒學完全,每過一年就要再重新學習一次新的函式介面。OpenGL 只提供基本繪圖功能的 API 函式,想讀取一張點陣圖進來?想秀出一些簡單的 model?抱歉,這些全都得自己來完成;因而可以藉此來磨練自己的一些基本程式能力與觀念。
我認為,只要確實的掌握住了3D圖學的原理,所謂的 OpenGL 和 DirectGraphics 的差別,也不過是函式的呼叫介面不同罷了。學習 3D 程式設計,不是要去死背一大堆函式的用法及參數的使用;而是應該要真正踏實的瞭解 3D 的理論基礎與架構。觀念融會貫通之後,自然也就能觸類旁通了。學會程式的使用方法,往往只是最容易的事;而真正困難,並且值得去深入思考學習的,應該是其程式的設計思維模式與程式背後所建構的理論基礎。
我個人相信,OpenGL 與 DirectX 各有它們的一片天空與其支持擁護者;雖然說其實這兩者有越來越相像的趨勢。畢竟它們就像是一對異卵的孿生兄弟一樣,雖然外貌有些許的不同,可是骨子裡的血液精髓,還是出自同一個父母的根源。或許未來五年十年內也會一樣,兩者繼續保持分庭抗禮的姿態;有人發明了一個新的理論,想立即找一個簡單又好用的繪圖 API 來做驗證,又不想侷限在 MS 的作業系統平台上,OpenGL 仍然是不二人選;有人想開發一個功能強大、各方面都最佳化、將硬體的效能發揮到極限的超強 3D 引擎,DirectGraphics 可以表現的非常亮眼。所以,一個能依據不同的發展需求,而選擇不同的工具來達成目的的人,才會是一個最稱職的程式設計者。
Explore Another World
和3D程設有了第一次的親密接觸之後,先別HIGH過了頭;還有其他你沒見識過的世界呢!
當學習了一段日子的3D程設之後,腦子裡所累積的基本知識應該會開始逐漸成形:「開始可以把心中所想的 idea 給具現化了對吧?」「開始覺得以前的想法,可能不再只是遙不可及的夢了吧?」如果你已經具備了這樣的智識及能力,我要說聲:「恭喜你!」你已經正確的踏出了成功的第一個腳步了 :)
『想寫一個3D,或甚至2D的小遊戲,已經不是很難的問題了。』
等等等,先別太急。一個遊戲程式的組成元素有很多,除了即時運算的3D物件之外,要不要有美美的2D圖片呢?玩家的操作介面是要用滑鼠、鍵盤還是搖桿呢?別忘了還有遊戲中的各種音效;當然,如果有背景音樂的話就更完美了!那來個多人連線如何?....... 有太多太多的想法可以實現。
所以呢,現在可以看自己的需要,或是自己針對哪一方面的知識比較感興趣,可以補充一些 Graphics programming 之外的其他知識。知識的累積,不僅應具有深度,更應能兼具廣度。想使用 joystick 來做遊戲的控制器,或想對鍵盤滑鼠做更進一步的掌控與回應嗎?試試 DirectInput 的強大威力吧;想在自己的遊戲中播放音樂或音效嗎?可以試試學習 DirectAudio 的使用;想寫個簡單的區域連線小遊戲嗎?可以試試 DirectPlay 的簡單網路功能;此外,如果有機會的話,能玩玩 Photo Shop、3ds Max、Maya 之類的2D或3D美術應用軟體也都是很不錯的經驗。
這個部分所提到的知識都是選擇性的,站在一個學習者的觀點來看,最好是自己對某方面真的有興趣,才更進一步的深入去學習;如果不是出自於自願性、自發性的學習,往往都會變成只是三兩天的熱度、難以持久。總而言之,朝著自己有興趣的方向發展下去,才會有源源不絕的動力可以繼續往前邁進囉!
第3 贴. 发表时间: 09-17-2004 23:48
书籍推荐:
书名:Windows游戏编程大师技巧(第二版)
原名:Tricks of the Windows Game Programming Gurus,2nd
说明:本书是著名游戏程序设计类书籍作者André LaMothe的两卷本《Windows游戏编程大师技巧》中的第一卷的第二版。和作者撰写的其他畅销书一样,在书中随处可见许多有趣但又有一定难度的源程序。作者循循善诱地从程序设计的角度介绍了在Windows环境下进行游戏开发所需的全部知识,包括Win32编程以及DirectX中所有主要组件(包括DirectDraw、DirectSound、DirectInput和DirectMusic)。书中还用单独的章节详细讲授了2D图形学和光栅化技术、游戏算法、多线程编程、文本游戏和解析、人工智能(包括模糊逻辑、神经网络和遗传算法)、物理建模(完全碰撞反应、动量传递和正反向运动学)及实时模拟等游戏程序开发中的关键技术。
书名:游戏编程精粹2
原名:Game Programming Gem 2
说明:本书是“游戏编程精粹”系列丛书的第二本,包括70多篇全新的、探讨各种游戏编程主题的文章,每篇文章要么提供了某个编程问题的实用解决方案,要么提出了一种创造性的减少编程时间和冗余的方法。本书涵盖了开发最尖端的游戏引擎所涉及的主要主题,全书由6章组成,包括通用编程技术、数学技巧、人工智能、几何体管理、图形显示和音频编程。 专家级开发人员可以立刻应用书中介绍的技巧,而初中级程序员通过阅读本书将增强其技能和知识。这是一本必备的参考资料,是40多位经验丰富的游戏开发人员智慧和经验的结晶。
书名:游戏编程精粹3
原名:Game Programming Gems 3
说明:本书汇集了近70篇最新的游戏编程大师的技术文章。这些文章都来自于实际经验的积累,各有独到之处,依其所属领域不同,全书划分为通用编程技术、数学技巧、人工智能、图形、网络和多玩家游戏、音频处理六章,覆盖了当今游戏开发中的所有关键技术领域。本书适合游戏开发专业人员阅读。对于入门级的读者,本书指出了您将要面临的各方面挑战,并提供大量的参考资料和资源助您提高专业知识和技术;对于专家级的读者,本书中实用的新思想与新技巧将帮助您节省大量游戏开发的宝贵时间。
书名:游戏软件设计与开发大揭秘
原名:Game Design Secrets of the Sages
说明:本书是以访谈录的形式揭示了游戏设计思路和制作方法以及游戏开发与技巧的经验,目的是让既没有开发经费又没有经验的新手设计出好的游戏。 全书以前期策划、制作过程和后期运作为框架,按照游戏制作的各个阶段揭示一个个著名游戏幕后的灵感与运作技巧。展示了业界游戏大师们就许多最核心的问题各抒己见的观点,并且道出了各自多年的经验与感悟。 本书既可供游戏设计的新手作为入门读物,更是所有从事游戏设计的人员的一本难觅的必读宝典。
书名:游戏开发物理学
作者:David M.Bourg
说明:本书从基础讲起,借助形象的范例程序,介绍了如何在游戏开发中加入物理真实性并丰富游戏内容,使游戏更加灵活生动。全书共分三部分。第一部分是复习基本概念及讨论刚体动力学的机械力学初级课程;第二部分将这些问题应用到现实生活的问题上,例如抛射体、船舰、飞机和汽车;第三部分介绍即时模拟器并示范了如何将其应用到游戏开发中。
对于希望增加物理真实性的游戏开发人员,本书乃绝佳的参考书。
第4 贴. 发表时间: 09-17-2004 23:49
非技术类的:
书名:顶级游戏设计:构造游戏世界
原名:Ultimate Game Design: Building Game Design
说明:本书不同于一般游戏设计编程类的“技术型”书籍,而是一本涉及游戏设计技术、开发和产业方方面面问题的著作。本书共分11章,前7章详细讲解游戏设计的基本知识,如游戏开发中的预视化技术、关卡设计、游戏分类、各种视觉效果、音效、脚本事件以及游戏测试。第8、第9两章阐述如多人在线游戏和移动电话游戏/无线游戏这些特殊类型游戏设计需要考虑的问题。第10、第11两章讲述游戏开发团队的分工,以及如何在游戏产业中找到合适工作的问题。
另外,本书每一章的后面还都附有一个作者对人物的访谈录,这些被访对象都是具有广泛游戏设计经验的专家和游戏产业中有影响力的人士,所以他们能给读者提供有关游戏设计和产业的独到和有价值的见解。
书名:网络游戏开发
译者:姚晓光 恽爽 王鑫
说明:本书出自两位世界级资深网络游戏专家之手,全面介绍了如何构架、发行和维护网络游戏,专业而又详尽地讲述了网络游戏制作、发行及运营中的一些实际细节。书中汇集了网络游戏开发历程中的经验与教训。
对于从事网络游戏开发的业内人土,特别是管理人员,本书是不可多得的佳作。本书同样适合于对网络游戏开发有兴趣的玩家和读者。
网络游戏已经出现———不再是未来的梦想!如果你是网络游戏从业人士。就绝对不能错过本书!
“本书汇集了许多大型网络游戏开发的优秀经验,采用书中的这些建议可以为公司节省数百万美元的成本 ” Gordon Walton,Maxis公司副总裁,《模拟人生在线》执行制作人。
书名:游戏设计:原理与实践
原名:Game Design:Theory and Practice
说明:迸发如潮水般的创作激情”,这就是本书要告诉读者、游戏设计者、游戏开发商和游戏爱好者的东西。刚看到这本游戏书时并未特别兴奋,甚至因为它一开始便声明本书并不是介绍游戏编程的而有些许担心,它的内容好吗?实用吗?还没有看完一半,这种顾虑便完全打消了,甚至是被书籍内容深深地吸引住了。本书由多位游戏开发名家共同撰写而成,其中有几位作者的作品都是游戏界的经典之作。书中以一个个经典的游戏开发实例开始,介绍其开发的背景、工具、挫折、开发过程、市场营销方案,让我们深入了解了游戏开发过程背后许许多多的情况,接着便是游戏相关开发者的访谈,诙谐活泼的语言揭示了游戏开发者的理念、风格、结构设计、故事情节设计、脚本设计、动画片头设计、人工智能(AI)设计以及文档资料设计等等,字里行间满溢着游戏开发设计工作中众多的经验和技巧,开发者的欢乐、遗憾、成功和喜悦生动地流淌在纸面之上。 对于游戏的开发者、游戏玩家,这样的游戏设计书籍是非常难得的佳品!
第5 贴. 发表时间: 09-17-2004 23:50
图形方面个人觉得nehe教程不错
附件(355.3KB) nehe.rar
第6 贴. 发表时间: 09-18-2004 00:01
不错的开发网站:
http://www.gameres.com/
http://gd.91.com/
http://www.chinagamedev.net/
第7 贴. 发表时间: 09-18-2004 00:02
以上推荐的都是有中文资源的,不过还是劝大家学好e文,因为好多技术方面的东西基本上都是英文
这是一条镜像帖。来源:北邮人论坛 / pc-game / #55同步于 1 周前
PCGame机器人发帖
[分享]游戏开发相关东西(大多是zt)[LiPb]
Orpine
1 周前镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。