Android 2d安卓mmorpg游戏

Android 2d安卓mmorpg游戏,android,opengl-es,client,mmo,Android,Opengl Es,Client,Mmo,我想做一个mmorpg游戏,在开始之前我想知道一些事情, 首先,我知道如何为android制作游戏,我一直在使用canvas、opengl es 1.0/1.1和一些andengine(也是opengl es 1.0/1.1)。我想知道一个好的、可靠的、快速的mmorpg应该使用什么,还有其他更好的性能选择吗 游戏目前只针对android,我正在使用android sdk和eclipse来编程我的游戏 另外,我在哪里可以学习如何制作合适的客户机和服务器?因为我从来没有这方面的经验。直到现在,我只

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


谢谢

我认为你应该使用NDK。写在<>强> c>强>中,与C++相比,便于项目管理。对于异步请求处理,应该考虑使用<强> LeBevue/Stand >。不要将PHP用于web接口,Python在这一点上要好得多。如果你想弄脏,C是最好的解决方案

对于开发套接字,我想说您应该使用POSIXsockets——行业标准。稍后,您应该查看更高级的解决方案,如ZeroMQ。根据需要使用PostgreSQL/*MongoDB*。这些都是非常先进的数据库管理系统,在这些系统中,您肯定会发现,与MySQL相比,这些系统的大修次数更少。我想说,MongoDB更适合这项事业——它速度更快,但不支持ACID数据

您应该在任何在线/离线文档库的手册页中了解套接字编程所需的内容。没那么难。这里有一个C中的服务器示例,研究它,尝试编写自己的客户机实现,了解TCP/IP数据包抽象的基本原理(顺便说一句,这是一个TCP套接字,您应该查看UDP示例,它们与您的项目更相关):

/*
“Arch_server”-C语言中的一个基本服务器程序
版权所有©Juozas Domarkas 2012,版权所有
*/
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
无效响应(int套接字);
无效错误(字符*消息)
{
佩罗尔(味精);
出口(1);
}
int main
(int argc,char*argv[])
{
int socket\u server\u fd、socket\u client\u fd、pid;
socklen\u t客户端地址\u长度;
服务器地址、客户端地址中的结构sockaddr\u;
如果(argc!=3)
错误(“正确用法:服务器[主机][端口]\n”);
socket\u server\u fd=socket(AF\u INET,SOCK\u STREAM,0);
bzero(&server_地址,sizeof(server_地址));
服务器地址.sin\u family=AF\u INET;
server_address.sin_addr.s_addr=INADDR\u ANY;
server_address.sin_port=htons(atoi(argv[2]);
绑定(socket_server_fd,(const struct sockaddr*)和服务器地址,sizeof(服务器地址));
监听(套接字服务器fd,16);
客户地址长度=sizeof(客户地址);
而(1){
socket\u client\u fd=accept(socket\u server\u fd,(struct sockaddr*)&客户端地址和客户端地址长度);
pid=fork();
如果(pid==0){
关闭(套接字\服务器\ fd);
响应(socket\u client\u fd);
出口(0);
}
}
返回退出成功;
}
无效响应
(内部插座)
{
int n;
字符缓冲区[1024];
b0(缓冲器,1024);
n=recv(插座,缓冲器,1023,0);
如果(n<0)错误(“从套接字读取错误”);
printf(“这是消息:%s\n”,缓冲区);
n=发送(套接字,“消息已接收”,17,0);
if(n<0)错误(“写入套接字错误”);
}
根据您的经验,您应该编写服务器套件或使用现有解决方案。我建议给自己一个合理的期限(比如说,8个月),并自己编写所有“更高级别”的工具。这样你就能从你的项目中得到最大的收获。尽量把它们写得最基本。使用低级别的现有解决方案以获得更好的性能,研究它们,从31337 h2x0r5中学习一些东西

一定要看看食人魔3D而不是GL/ES。这是一个OpenGL的抽象库。比OpenGL容易得多,更好地支持现代3D开发、库、插件、各种已经开发的粒子、运动、天空/水系统

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


学习真正的C编程最好的书是由丹尼斯·M·里奇和布赖恩·W·克尼汉写的《C编程语言》

谷歌有很多关于NDK的Android开发教程一定要使用NDK。Java对3D图形有很好的支持,但它确实不是适合这项工作的工具。这是一个“利基”解决方案,而不是游戏开发行业公认的标准。对此,业界采用C++进行游戏开发。我郑重建议在整个产品生命周期中使用一种语言。你需要一个网络服务器,数据库接口,钩子。。。使用C++,你会得到太多的大修。你最终会学习Boost,STL,所有其他的与C++相关的垃圾。更好地使用C、libevent、OGRE3D和一些现有的OGRE系统。所有这些项目都有可靠的文档,可以在黄金时段使用

Ogre3D适用于3D游戏。你可以用它做一个“2D平台”游戏。一个额外的维度并不是真正需要学习的

逐个学习每个平台。不要读“一体式”的书

查看这些项目的文档


既然你有很多空闲时间,最好先为自己制定一个好计划。把你自己组织起来,把你的思想集中在一个地方
/*
"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");
}