0

我想做一个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 合作过。

谢谢!

4

2 回答 2

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 个月)并自己编写所有“高级”工具。这样您就可以充分利用您的项目。尽量把它们写成基本的。使用低级现有解决方案以获得更好的性能,研究它们,从 31337 h2x0r5 中学习一些东西。

绝对检查 OGRE 3D 而不是 GL/ES。它是 OpenGL 的抽象库。比 OpenGL 容易得多,更好地支持现代 3D 开发、库、插件、各种已经开发的粒子、运动、天空/水系统。

不要选择 Unity3D 之类的东西。你有更好的事情要做。


学习真正的 C 编程最好的书是Dennis M. RitchieBrian 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,仅仅是因为我相信自由软件而不是某种“社会自由”。

在我看来,一个好的编译器应该是来自 Apple 的 LLVM 编译器集合的CLANG 。

于 2012-05-13T11:35:12.673 回答
0

做一个mmorpg服务器,对于不涉及动作游戏的项目,可以使用Kraken Framework。使用 安装gem install krakenlab,然后使用kraken -n app_name.

于 2017-12-28T23:19:41.200 回答