我想做一个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合作过我的网站。
谢谢!
答案 0 :(得分:5)
我认为你应该使用NDK。使用 C 编写程序而不是C ++,以便于项目管理。您应该考虑使用 libevent 进行异步请求处理。不要将PHP用于 web 接口, Python 在这一点上要好得多。如果您愿意脏,C是 最佳解决方案。
对于开发套接字,我想你应该使用 POSIX 套接字 - 行业标准。稍后您应该查看更多高级解决方案,例如 ZeroMQ 。根据您的要求,使用 PostgreSQL / * MongoDB *。这些都是非常先进的数据库管理系统,你肯定会在MySQL中找到更少的大修。我会说 MongoDB 会更好地适应原因 - 它更快但不完全支持ACID数据。
您应该在任何在线/离线文档库中的 MAN页面中了解插槽编程所需的内容。这并不难。这是C 中的服务器示例,研究,尝试编写自己的客户端实现,了解TCP / IP数据包抽象的基本原理(顺便说一下,这是一个TCP套接字,您应查看UDP示例,这些与您的项目更相关):
/*
"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个月 )并自己编写所有“更高级别”的工具。这样你就可以充分利用你的项目。尝试将它们编写为 basic 。使用低级现有解决方案以获得更好的性能,研究它们,从31337 h2x0r5中学到一些东西。
绝对检查OGRE 3D而不是GL / ES。它是OpenGL的抽象库。比OpenGL更容易,更好地支持现代3D开发,库,插件,各种已经开发的粒子,运动,天空/水系统。
不要选择像Unity3D这样的东西。你有更好的事情要做。
Dennis M. Ritchie 和 Brian W. Kernighan 是学习真正C语言编程的最佳书籍“ C编程语言”。
谷歌有很多关于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,仅仅因为我相信自由软件而不是“社交自由”。
在我看来,一个好的编译器将来自Apple的LLVM编译器集合 CLANG 。
答案 1 :(得分:0)
要制作mmorpg服务器,对于不参考动作游戏的项目,您可以使用Kraken框架。使用gem install krakenlab
安装,然后使用kraken -n app_name
开始。