2D мморпг игра на андроид

Я хочу сделать mmorpg-игру и хотел бы кое-что узнать перед тем, как начать,
ну, во-первых, я знаю, как делать игры для Android, и я использую canvas, opengl 1.0/1.1 и немного andengine. (также opengl 1.0/1.1). Я хотел знать, что я должен использовать для хорошей, надежной и быстрой мморпг, есть ли другой вариант для лучшей производительности?

игра предназначена только для Android на данный момент, я использую android sdk и eclipse для программирования своей игры.

Кроме того, где я могу узнать, как сделать правильный клиент и сервер? потому что у меня никогда не было опыта в этом. До сих пор я делал только 2D и несколько 3D игр, ни одна из них не была онлайновой или какой-либо MMO.

если это необходимо, у меня также есть некоторый опыт работы с sql и php при разработке веб-сайтов. я работал с PhpMyAdmin для своего сайта.

Спасибо!


person Baruch    schedule 13.05.2012    source источник


Ответы (2)


Я думаю, вам следует использовать NDK. Напишите свою программу на C, а не на C++, чтобы упростить управление проектом. Вам следует рассмотреть возможность использования libevent для асинхронной обработки запросов. Не используйте PHP для веб-интерфейсов, 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 является "Язык программирования C" Денниса М. Ритчи и Брайана В. Кернигана.

У Google есть много руководств по разработке Android, касающихся NDK. Обязательно используйте NDK. Java хорошо поддерживает трехмерную графику, но на самом деле это не лучший инструмент для этой работы. Это «нишевое» решение, а не принятый в отрасли стандарт в разработке игр. В связи с этим индустрия использует C++ для разработки игр. Я бы серьезно рекомендовал использовать ОДИН язык для всего жизненного цикла продукта. Вам понадобится сетевой сервер, интерфейс базы данных, хуки... Используйте C. С C++ вы получите слишком много капитального ремонта. Вы закончите тем, что изучите BOOST, STL и прочее дерьмо, которое идет с C++. Лучше использовать C, libevent, OGRE 3D, некоторые существующие системы OGRE. Все эти проекты имеют хорошую надежную документацию и готовы к использованию в прайм-тайм.

Ogre3D предназначен для 3D-игр. Вы можете сделать с ним игру «2D-платформа». Одно дополнительное измерение на самом деле не так уж много для изучения.

Изучите каждую платформу по отдельности. Не читайте книги «все в одном».

Ознакомьтесь с документацией этих проектов.


Поскольку у вас есть много свободного времени, лучше сначала составьте себе хороший план. Организуйте себя, свои мысли в одном порядке и постарайтесь достичь «цели». Вполне реально закончить свою MMO, скажем, за 4-5 лет. Именно столько времени в основном требуется профессионалам, а иногда и инди.

Будьте настойчивы, узнавайте что-то новое каждый день, старайтесь каждый день писать код. Работайте над ОДНОЙ целью — своей игрой. Если появится какой-то другой проект - отложите его. Будьте прагматичным программистом. Не бойтесь испачкаться. Отпускай пару дней в месяц ради своего титула, не ходи в школу (не бросай!!!). Будьте настойчивы.


Я ненавижу это делать, но выбор компилятора, инструмента, платформы, языка — это чистая политика. Я предпочитаю «лучший инструмент для работы», как и Линус Торвальдс. Я в основном использую программное обеспечение с открытым исходным кодом, так как оно лучше справляется со своей задачей. Когда дело доходит до «GPL» против «BSD» или ограничительных или разрешающих лицензий на программное обеспечение, я определенно выбираю BSD просто потому, что я верю в свободное программное обеспечение, а не в некоторую «социальную свободу».

На мой взгляд, хорошим компилятором был бы CLANG из коллекции компиляторов Apple LLVM.

person user1254893    schedule 13.05.2012
comment
до сих пор я использовал только eclipse с java, у меня был некоторый опыт работы с c, но не с чем-то большим, могу ли я вместо этого использовать eclipse или мне следует начать больше узнавать о c? Кроме того, должна ли игра быть написана на c, а также на сокетах? есть ли какая-нибудь книга, которая может дать мне основное представление о разработке c и android? кстати, я хочу, чтобы моя игра была 2D, а не 3D, будет ли OGRE 3D по-прежнему работать для моих нужд? или есть что-то еще? я использовал gl/es без указания координаты z, оставив ее равной 0 и сделав ее похожей на 2d. то же самое с OGRE 3D? Спасибо за вашу помощь! - person Baruch; 13.05.2012
comment
Спасибо тебе за все! ты обалденный!! Только один маленький вопрос, есть ли у вас компилятор c, который вы рекомендуете? что-нибудь простое в использовании, так как я действительно не использовал c так много .. (я помню, что использовал его для небольшого ввода да нет .. вот и все ..) теперь все, что мне нужно сделать, это купить книгу и начать изучать все! - person Baruch; 13.05.2012
comment
Я также всегда хотел сделать свой собственный движок, как OGRE 3D, или если вы знаете, ANDENGINE, я хочу сделать все, и я имею в виду ВСЕ, что я могу с нуля, это означает, что если есть, например, 1, 2, 3, который в данном случае 1 является базой базы, а 3 самый простой в реализации, хотелось бы изучить 1 и сделать из него и библиотек свой собственный движок. потому что в будущем я подумываю о создании собственной компании, а это значит, что я не хочу иметь дело с авторскими правами, если это необходимо. - person Baruch; 13.05.2012
comment
Кстати, могу ли я также отправить вам письмо, если у меня возникнут какие-либо трудности? это очень помогло бы, потому что похоже, что вы много знаете. сейчас я, возможно, еще не закончил среднюю школу, но у меня есть большой опыт. Кстати, я только что получил книгу, которую вы рекомендовали. еще раз спасибо за все! теперь мне просто нужно собрать свою команду для другого проекта, потому что, к сожалению, я совсем не талантлив в рисовании, и то же самое касается звуков для игры! теперь на работу! Еще раз Спасибо!!! - person Baruch; 13.05.2012

Чтобы сделать mmorpg сервер, для проектов, не относящихся к экшенам, можно использовать Kraken Framework. Установите с помощью gem install krakenlab и начните с kraken -n app_name.

person Marlon Henry Schweigert    schedule 28.12.2017