I. Core programming II. Multimedia III. Internet IV. Database System
First, the basic data structure,Algorithm, Data streams, threads, object-oriented design concepts, patterns, and so on.
Game software is essentially a real-time software. Players interact with machines or other players through software. It requires dazzling sound and light effects, smooth user input, operating mechanisms, and network resources. The implementation of these projects is highly dependent on hardware. Therefore, we are familiar with operating system and development environment ratio in the Development of underlying technologies.Programming LanguageMore important.
Some basic-level technologies, such as decision trees, finite state machines, and path searches commonly used by game AI, 2D games use flat maps, matrices, block tables, oblique viewing angles, placement page scroll bars, color palette, dot painting, and mixed colors... It is not very difficult and intuitive because of various technologies or special effects. This often leads programmers to the illusion that they can easily master all the underlying technologies of the game.
Developers do not need to fully understand the background of all technologies. Instead, they need to understand the basic architecture of game software and the situations and requirements of the Games, and how to use the technology, more than how the technology itself is developed
Game software development methods. experienced developers usually design exclusive tools, such as scenarios, scripts, roles, and prop editors... Based on the characteristics of each project, such as the combat system, class system, level system, and resource management system... . (In online games, important computation work will be transferred to the server for processing .) Sometimes, for elasticity and flexibility, the computing rules of the game are not directly written inProgramCodeInstead, it is controlled in scripting mode.
There are two main advantages of using game development tools: First, it facilitates the division of labor and integration of programmers, planners, and art personnel; and, importantly, it facilitates mass production. Because of this, in the game industry, the main smart assets are usually not programmers, but planners. A good game not only has outstanding sound and light effects, but its richness, creativity, and overall balance must all reach a certain level.
The Design of game software is basically in line with the object-oriented/Modular spirit. It combines several major tools, updates and adjustments of each project and version, actually, it is split into different corrections for each tool. Therefore, the biggest challenge for game software development lies not in one aspect of technology, but in "how to express the concept of gameplay with technology ", that is, how to skillfully combine a game project into an independent tool.
Ii. Multimedia
Since it is a game software, front-end audio and video effects, operating interfaces, 2d, 3D imaging technology, these are indispensable, it can be said that this is the most important part of the game software technology. At the underlying technology level, the mainstream 3D frameworks are DirectX and OpenGL/Open Inventor. The former runs on Windows and the latter can be cross-platform.
3D technology is not only applied in the game industry, but also a key technology of many cutting-edge industries and commercial technologies. The basic principle is that the image to be displayed is encoded as a data stream using triangle vertices. Through 3D pipeline operations, the visual area, resolution level, geometric conversion, and light source processing (trasnform & lighting; T & L), material, color mixing ...... The process becomes the display pixel. In today's 3D accelerator cards, a lot of work is handled by hardware. In order to strengthen the elasticity of detail control, a programmable technology has been developed in recent years, that is, "shading language ). On the other hand, based on changes in game types and content, various scenes, buildings, role units, particle systems, and organisms that are applicable to closed or open architectures are also presented... And other special algorithms and optimization technologies. In addition, 3D textures, shadows, and special effects do not involve complex mathematical operations.
Compared with the vast majority of commercial application software, the software technology required by the game is the widest and most complex. It is simply to be able to use the game engine to develop a complete game, it is not very easy. The emphasis here is on "specialization in the industry". gaming companies themselves cannot develop all the necessary software technologies. Therefore, whether or not they develop their own games, "knowing how to use current technologies to play games" is more important than "knowing how to develop underlying technologies. For example, it is helpful to know how to grind or even grind flour! However, the key to game development is "How to make delicious cakes" rather than "how to make good flour ".
Iii. Internet
Of course, the development of online games does not need to implement the underlying TCP/IP, but directly uses functions/class libraries with network functions. Based on the characteristics of the game type, when the fluency needs to be high and the security concerns are relatively low (such as attention, shooting, and small-scale real-time strategic games ), sometimes it is applied to UDP.
The basic operation mode of the online game server/client is: The operation is handled by the server, the client sends a message request, receives the Server Response (or receives the active notification), and then updates the interface display. In order to handle the delay of network transmission, various smooth and predictable computations are used in display to achieve smooth performance. A more common approach is to take unimportant data and operations, it is handled directly at the front-end, but this design may lead to unfair results. Therefore, how to strike a balance between fluency and security/fairness is also a key aspect of planning.
The current bottleneck of multiplayer online games lies in network I/O, because the online type of online games is different from that of many other network application services, such as FTP and Web applications, it features high-frequency and low-traffic connections (thousands or tens of thousands. However, the I/O processing part belongs to the operating system level. Therefore, the part of network implementation is often tied to the operating system, resulting in difficulties in development and transplantation. For example, in windows, the I/O model most suitable for developing online games is the I/O completion port model, and in UNIX series, it is the asynchronous I/O model; however, the socket APIs widely used on various platforms do not directly support the corresponding models. Of course, there are many solutions, including self-developed underlying technologies. (For example, I chose to use the ACE framework, which is a mature cross-platform IPC framework, thus saving a lot of trouble .)
Network games are essentially distributed systems, not only for servers/clients. In order to accommodate more players at the same time, in a large-scale online game, the server cannot operate on a single machine. It is inevitable to adopt a multi-layer (multitier) server architecture, therefore, in a complex system, you may have to solve the problem of inter-trip synchronization in the server group.
Iv. Database System
The most widely used relational database systems (RDBMS), such as Oracle, MS-SQL, MySQL, and PostgreSQL. The performance of database system access has also become a backend performance bottleneck in some games. This is also the reason why some game projects use self-developed databases. Because the database system is not specifically designed for games, its general blocking I/O method is not suitable for games, the number of queries/transactions per second is much lower than the number of network I/O actions. However, this problem can be easily solved through software technologies, such as using thread pool or asynchronous I/O models to access databases, or using a multitier server architecture and Server clusters. In addition, when the in-memory database technology is mature, it can also reduce the development difficulty of this part. (The memory addressing of 32-bit machines is only 4 GB, so the popularization of this technology should be on 64-bit machines ). The ideal practice is to use a formal database system and use software technology to solve performance problems.
Game programmers do not need to fully understand every part of the database system, you only need to know how to connect to the database, basic operations, data table design, index creation, regularization, S q l language, transaction or pre-storage program, etc. In short, the most important thing to develop a game is to "use appropriate tools ".
Most game software prefers "mature technology" rather than "cutting-edge technology ". However, we should take a positive attitude towards new technologies and concepts, and do not have to learn them. But we should at least understand new technologies and concepts and what they are suitable, how to use it.
Outside of technology:
Whether you believe it or not. The longer you spend in this industry, the more you observe, the more important you will find that in the gaming industry, the "capabilities" Beyond programming technology are sometimes even more important than the "technology" itself! (In fact, this is the case for most of the work, and is no exception in the gaming industry) The most important thing is the degree and ability of teamwork.
The game development work is like a cook. The ultimate goal is to make delicious dishes (neither planting nor grinding flour), not to say that technology is not important, but it is fundamental. However, we should not focus on technology. There are many factors for a game's success. If you miss anything (including luck), you may fail. Technology allows programmers to add points, but it does not play a negative role in other aspects. Observe the experiences of successful users/products, learn their ideas, design ideas, visions, and patterns, and make technical practices valuable and innovative products.