我想做一个mmorpg游戏,在开始之前我想知道一些事情,
首先,我知道如何为android开发游戏,我一直在使用canvas,opengl es 1.0/1.1和一些andengine(还有opengl es 1.0/1.1)。我想知道我应该使用什么来实现一个好的、可靠的、快速的mmorpg,有没有其他更好的性能选择?
这个游戏目前只针对android,我正在使用android sdk和eclipse来编程我的游戏。
另外,我在哪里可以学到如何制作一个合适的客户端和服务器?因为我从来没有这方面的经验。到目前为止,我只制作了一些2d和3d游戏,没有一个是在线的,也没有任何mmo。
如果它是必要的,我也有一些sql和php的网站开发经验。我曾经在我的网站上使用过PhpMyAdmin。
谢谢!
发布于 2012-05-13 19:35:13
我认为你应该使用NDK。使用C编写您的程序,而不是使用C++,以便更轻松地进行项目管理。您应该考虑使用libevent进行异步请求处理。不要将PHP用于web接口,Python在这一点上要好得多。如果你愿意弄脏的,C是最好的解决方案。
对于开发套接字,我建议您应该使用POSIX套接字--这是行业标准。稍后,您应该了解更高级的解决方案,如ZeroMQ。根据您的需求使用PostgreSQL/*MongoDB*。这些都是非常先进的数据库管理系统,在这些系统中,你肯定会发现比MySQL更少的大修。我想说MongoDB会更适合这个目标--它更快,但并不完全支持ACID数据。
您应该在任何联机/脱机文档库的手册页中了解套接字编程所需的内容。这并不难。下面是一个用C编写的服务器示例,学习一下,试着写自己的客户端实现,了解/IP数据包抽象的基本原理(顺便说一句,这是一个套接字,你应该查看示例,这些示例与你的项目更相关):
/*
"Arch_server" - a basic server program in C
Copyright © Juozas Domarkas 2012, all rights served
*/
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <strings.h>
#include <unistd.h>
void respond(int socket);
void error(char *msg)
{
perror(msg);
exit(1);
}
int main
(int argc, char *argv[])
{
int socket_server_fd, socket_client_fd, pid;
socklen_t client_address_length;
struct sockaddr_in server_address, client_address;
if (argc != 3)
error("Correct usage: server [host] [port]\n");
socket_server_fd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(atoi(argv[2]));
bind(socket_server_fd, (const struct sockaddr *) &server_address, sizeof(server_address));
listen(socket_server_fd, 16);
client_address_length = sizeof(client_address);
while (1) {
socket_client_fd = accept(socket_server_fd, (struct sockaddr *) &client_address, &client_address_length);
pid = fork();
if (pid == 0) {
close(socket_server_fd);
respond(socket_client_fd);
exit(0);
}
}
return EXIT_SUCCESS;
}
void respond
(int socket)
{
int n;
char buffer[1024];
bzero(buffer, 1024);
n = recv(socket, buffer, 1023, 0);
if (n < 0) error("ERROR reading from socket");
printf("Here is the message: %s\n", buffer);
n = send(socket,"Message received.", 17, 0);
if (n < 0) error("ERROR writing to socket");
}根据您的经验,您应该编写您的服务器套件或使用现有的解决方案。我建议给自己一个合适的截止日期(比如说,8个月的),然后自己编写所有的“更高级别”的工具。这样你就能从你的项目中得到最大的收获。试着把它们写得尽可能的简单。使用低级的现有解决方案以获得更好的性能,研究它们,从31337 h2x0r5中学到一些东西。
一定要看看OGRE 3D,而不是GL/ES。它是OpenGL的抽象库。比OpenGL简单得多,更好地支持现代3D开发,库,插件,各种已经开发的粒子,运动,天空/水系统。
不要使用像Unity3D这样的东西。你有更重要的事要做。
学习真正的C编程的最佳书籍是Dennis M.Ritchie和Brian W.Kernighan合著的"The C programming language“。
Google有很多关于NDK的Android开发教程。绝对会使用NDK。Java对3D图形有很好的支持,但它真的不是适合这项工作的工具。这是一个“小众”的解决方案,而不是游戏开发中被业界接受的标准。关于这一点,业界使用C++进行游戏开发。我强烈建议在整个产品生命周期中使用一种语言。你需要一个网络服务器,数据库接口,钩子...使用C。使用C++,你会得到太多的大修。你最终会学到BOOST,STL,以及C++附带的所有其他东西。最好使用C,libevent,OGRE 3D,一些现有的OGRE系统。所有这些项目都有可靠的文档,可以在黄金时段使用。
Ogre3D适用于3D游戏。你可以用它做一个"2D平台“游戏。一个额外的维度实际上并不需要学习那么多。
逐个学习每个平台。不要读“多合一”的书。
查看这些项目的文档。
既然你手头有很多空闲时间,最好先给自己制定一个好计划。以一种方式组织你自己,你的想法,并努力达到“目标”。在4到5年内完成你的MMO是非常现实的。这就是大多数专业人士,有时甚至是印度人需要的时间。
坚持下去,每天学习新的东西,试着每天写代码。朝着一个目标努力--你的游戏。如果有其他项目出现--推迟它。做一个务实的程序员。不要害怕弄脏自己。为了你的头衔,每个月请几天假,不要去学校(不要放弃!)要坚持不懈。
我讨厌这样做,但选择编译器、工具、平台、语言纯粹是政治问题。我更喜欢“最适合这项工作的工具”,类似于Linus Torvalds。我主要使用开源软件,因为它做得更好。当谈到"GPL“与"BSD”或限制性与允许性软件许可时,我肯定会选择BSD,因为我相信自由软件而不是某种“社交自由”。
在我看来,一个好的编译器应该是苹果的LLVM编译器集合中的CLANG。
发布于 2017-12-29 07:19:41
要制作mmorpg服务器,对于不涉及动作游戏的项目,可以使用Kraken框架。使用gem install krakenlab安装,并从kraken -n app_name开始安装。
https://stackoverflow.com/questions/10571280
复制相似问题