Модераторы: Snowy, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изучение и разработка игр на Java+OpenGl, разработка 2-д игр. 
:(
    Опции темы
Sergos
Дата 7.1.2010, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Добрый день,сегодня  я решил поделится со всеми своей историей в  разработке игр.

Думаю многие прошли через это. И надеюсь найдется немало людей, которые оказались на той же дороге.

Разработкой игр я решил заняться 2 года назад. Наверное, как и у всех, это началось с желания создать игру своей мечты.

Я представлял себе красивую MMORPG  с системой боя как в God of Wars, кучей классов,и прочих игровых вкусностей.
Конечно после недели поиска информации в Инете я понял что такие игры создают команды по 50-100 человек и не один год)

Я решил найти что-то более реалистичное, с чего можно было бы начать.

Где-то месяц усилий ушли , чтобы создать свою первую игру на JavaScipt и HTML. Это была простой симулятор боя, как в БК.
Когда я решил усложнить игру, то понял что возможности JavaScript очень ограничены. 

Но идея написать браузерную игру осталась.

Я решил посмотреть в сторону Java. Этот язык показался мне универсальным.  Почти полгода ушло на написание простенького 2-д движка и концепции игры. Но конечный результат поставил меня в тупик.
Awt и Swing - стандартные средства графики Java очень тормозили, даже при самой простой анимации. Продолжать разработку не имело смысла.

И вот недавно я узнал,что даже на Java можна пользоваться  OpenGl библиотеками,такими как Jogl. 

В инете увидел Quake 2 портированый под яву, и работающий прямо в браузере.

Мне кажется,что на этом можна сделать нормальную 2-д игру.

Итак, все кто имеет опыт програмирования и желает научится делать игры - пишите. 

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

Давайте обьединяться и разбираться во всем вместе.При большом желании и совместных усилиях все получится!

Спасибо за внимание.

PM MAIL   Вверх
Denisko
Дата 7.1.2010, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.7.2008

Репутация: нет
Всего: нет



icq: 356187
e-mail: [email protected]
PM MAIL   Вверх
unicuum
Дата 8.1.2010, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(Sergos @  7.1.2010,  21:37 Найти цитируемый пост)

Давайте обьединяться и разбираться во всем вместе.При большом желании и совместных усилиях все получится!

Давайте, давайте  smile 

Цитата(Sergos @  7.1.2010,  21:37 Найти цитируемый пост)
И вот недавно я узнал,что даже на Java можна пользоваться  OpenGl библиотеками,такими как Jogl. 

А ещё, что интересно, если используешь OpenGL, то Java там не Java, уже не важно. OpenGL можно задействовать где угодно, тот же GLUT, SDL, Qt и так далее. Главное это сам OpenGL.

К примеру, простая программа с использованием GLUT.
Код

#include <gl/gl.h>
#include <gl/glu.h>
#include <glut.h>

// Called to draw scene
void RenderScene(void)
{
    // Clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT);

    // Flush drawing commands
    glFlush();
}

// Setup the rendering state
void SetupRC(void)
{
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}

// Main program entry point
void main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(800,600);
    glutCreateWindow("Simple");
    glutDisplayFunc(RenderScene);

    SetupRC();

    glutMainLoop();
}

Далее уже собственная фантазия и наращивание возможностей. Или вот, тоже GLUT, но с активацией физикса. Пара заголовочных файлов за кадром, но там ничего важного.
Код

// ===============================================================================
//
//                           AGEIA PhysX SDK Sample Program
//
// Title: Boxes Sample
// Description: This sample program shows how to create some simple dynamic objects
//              with the AGEIA PhysX SDK.
//
// ===============================================================================

#include <stdio.h>
#include <GL/glut.h>

#include "NxPhysics.h"
#include "ErrorStream.h"
#include "PerfRenderer.h"
#include "Utilities.h"
#include "SamplesVRDSettings.h"

// Physics
static NxPhysicsSDK*    gPhysicsSDK = NULL;
static NxScene*            gScene = NULL;
static PerfRenderer    gPerfRenderer;

// Rendering
static NxVec3    gEye(50.0f, 50.0f, 50.0f);
static NxVec3    gDir(-0.6f,-0.2f,-0.7f);
static NxVec3    gViewY;
static int        gMouseX = 0;
static int        gMouseY = 0;

static bool InitNx()
{
    // Initialize PhysicsSDK
    NxPhysicsSDKDesc desc;
    NxSDKCreateError errorCode = NXCE_NO_ERROR;
    gPhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION, NULL, new ErrorStream(), desc, &errorCode);
    if(gPhysicsSDK == NULL) 
    {
        printf("\nSDK create error (%d - %s).\nUnable to initialize the PhysX SDK, exiting the sample.\n\n", errorCode, getNxSDKCreateError(errorCode));
        return false;
    }
#if SAMPLES_USE_VRD
    // The settings for the VRD host and port are found in SampleCommonCode/SamplesVRDSettings.h
    if (gPhysicsSDK->getFoundationSDK().getRemoteDebugger())
        gPhysicsSDK->getFoundationSDK().getRemoteDebugger()->connect(SAMPLES_VRD_HOST, SAMPLES_VRD_PORT, SAMPLES_VRD_EVENTMASK);
#endif

    gPhysicsSDK->setParameter(NX_SKIN_WIDTH, 0.05f);

    // Create a scene
    NxSceneDesc sceneDesc;
    sceneDesc.gravity                = NxVec3(0.0f, -9.81f, 0.0f);
    gScene = gPhysicsSDK->createScene(sceneDesc);
    if(gScene == NULL) 
    {
        printf("\nError: Unable to create a PhysX scene, exiting the sample.\n\n");
        return false;
    }

    // Set default material
    NxMaterial* defaultMaterial = gScene->getMaterialFromIndex(0);
    defaultMaterial->setRestitution(0.0f);
    defaultMaterial->setStaticFriction(0.5f);
    defaultMaterial->setDynamicFriction(0.5f);

    // Create ground plane
    NxPlaneShapeDesc planeDesc;
    NxActorDesc actorDesc;
    actorDesc.shapes.pushBack(&planeDesc);
    gScene->createActor(actorDesc);

    return true;
}

static void ExitNx()
{
    if(gPhysicsSDK != NULL)
    {
        if(gScene != NULL) gPhysicsSDK->releaseScene(*gScene);
        gScene = NULL;
        NxReleasePhysicsSDK(gPhysicsSDK);
        gPhysicsSDK = NULL;
    }
}

static void CreateCube(const NxVec3& pos, int size=2, const NxVec3* initialVelocity=NULL)
{
    if(gScene == NULL) return;    

    // Create body
    NxBodyDesc bodyDesc;
    bodyDesc.angularDamping    = 0.5f;
    if(initialVelocity) bodyDesc.linearVelocity = *initialVelocity;

    NxBoxShapeDesc boxDesc;
    boxDesc.dimensions = NxVec3((float)size, (float)size, (float)size);

    NxActorDesc actorDesc;
    actorDesc.shapes.pushBack(&boxDesc);
    actorDesc.body            = &bodyDesc;
    actorDesc.density        = 10.0f;
    actorDesc.globalPose.t  = pos;
    gScene->createActor(actorDesc)->userData = (void*)size_t(size);
    //printf("Total: %d actors\n", gScene->getNbActors());
}

static void CreateCubeFromEye(int size)
{
    NxVec3 t = gEye;
    NxVec3 vel = gDir;
    vel.normalize();
    vel*=200.0f;
    CreateCube(t, size, &vel);
}

static void CreateStack(int size)
{
    const float cubeSize = 2.0f;
    const float spacing = -2.0f*gPhysicsSDK->getParameter(NX_SKIN_WIDTH);
    NxVec3 pos(0.0f, cubeSize, 0.0f);
    float offset = -size * (cubeSize * 2.0f + spacing) * 0.5f;
    while(size)
    {
        for(int i=0;i<size;i++)
        {
            pos.x = offset + (float)i * (cubeSize * 2.0f + spacing);
            CreateCube(pos, (int)cubeSize);
        }

        offset += cubeSize;
        pos.y += (cubeSize * 2.0f + spacing);
        size--;
    }
}

static void CreateTower(int size)
{
    const float cubeSize = 2.0f;
    const float spacing = 0.01f;
    NxVec3 pos(0.0f, cubeSize, 0.0f);
    while(size)
    {
        CreateCube(pos, (int)cubeSize);
        pos.y += (cubeSize * 2.0f + spacing);
        size--;
    }
}

static void KeyboardCallback(unsigned char key, int x, int y)
{
    switch(key)
    {
        case 27:    
            exit(0); 
            break;
        case '0':    
            gPerfRenderer.toggleEnable(); 
            break;
        case ' ':    
            CreateCube(NxVec3(0.0f, 20.0f, 0.0f),1); 
            break;
        case 's':
        case 'S':
            CreateStack(10); 
            break;
        case 'b':    
        case 'B':    
            CreateStack(30); 
            break;
        case 't':
        case 'T':
            CreateTower(30);
            break;
        case 'w':
        case 'W':
            CreateCubeFromEye(8);
            break;
        case 'q':
        case 'Q':
            {
                NxActor** actors = gScene->getActors();
                if(gScene->getNbActors() > 1){
                    gScene->releaseActor(*actors[gScene->getNbActors()-1]);
                }
            }
            break;        
        case GLUT_KEY_UP:    case '8':    gEye += gDir*2.0f; break;
        case GLUT_KEY_DOWN: case '2':    gEye -= gDir*2.0f; break;
        case GLUT_KEY_LEFT:    case '4':    gEye -= gViewY*2.0f; break;
        case GLUT_KEY_RIGHT: case '6':    gEye += gViewY*2.0f; break;
    }
}

static void ArrowKeyCallback(int key, int x, int y)
{
    KeyboardCallback(key,x,y);
}

static void MouseCallback(int button, int state, int x, int y)
{
    gMouseX = x;
    gMouseY = y;
}

static void MotionCallback(int x, int y)
{
    int dx = gMouseX - x;
    int dy = gMouseY - y;
    
    gDir.normalize();
    gViewY.cross(gDir, NxVec3(0,1,0));

    NxQuat qx(NxPiF32 * dx * 20/ 180.0f, NxVec3(0,1,0));
    qx.rotate(gDir);
    NxQuat qy(NxPiF32 * dy * 20/ 180.0f, gViewY);
    qy.rotate(gDir);

    gMouseX = x;
    gMouseY = y;
}

static void RenderCallback()
{
    if(gScene == NULL) return;
    
    // Start simulation (non blocking)
    gScene->simulate(1.0f/60.0f);

    // Clear buffers
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    // Setup projection matrix
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0f, (float)glutGet(GLUT_WINDOW_WIDTH)/(float)glutGet(GLUT_WINDOW_HEIGHT), 1.0f, 10000.0f);
    gluLookAt(gEye.x, gEye.y, gEye.z, gEye.x + gDir.x, gEye.y + gDir.y, gEye.z + gDir.z, 0.0f, 1.0f, 0.0f);

    // Setup modelview matrix
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // Render all actors
    int nbActors = gScene->getNbActors();
    NxActor** actors = gScene->getActors();
    while(nbActors--)
    {
        NxActor* actor = *actors++;
        if(!actor->userData) continue;

        // Render actor
        glPushMatrix();
        float glMat[16];
        actor->getGlobalPose().getColumnMajor44(glMat);
        glMultMatrixf(glMat);
        glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
        glutSolidCube(float(size_t(actor->userData))*2.0f);
        glPopMatrix();

        // Render shadow
        glPushMatrix();
        const static float shadowMat[]={ 1,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,1 };
        glMultMatrixf(shadowMat);
        glMultMatrixf(glMat);
        glDisable(GL_LIGHTING);
        glColor4f(0.1f, 0.2f, 0.3f, 1.0f);
        glutSolidCube(float(size_t(actor->userData))*2.0f);
        glEnable(GL_LIGHTING);
        glPopMatrix();
    }

    // Fetch simulation results
    gScene->flushStream();
    gScene->fetchResults(NX_RIGID_BODY_FINISHED, true);
    
    // Print profile results (if enabled)
    gPerfRenderer.render(gScene->readProfileData(true), glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));

    glutSwapBuffers();
}

static void ReshapeCallback(int width, int height)
{
    glViewport(0, 0, width, height);
}

static void IdleCallback()
{
    glutPostRedisplay();
}

int main(int argc, char** argv)
{
    // Initialize glut
    printf("Use the arrow keys or 2, 4, 6 and 8 to move the camera.\n");
    printf("Use the mouse to rotate the camera.\n");
    printf("Press the keys w, t, s, b and space to create various things.\n");
    printf("Press q to destroy the last thing created.\n");
    printf("Press 0 to toggle the frame rate display.\n");
    glutInit(&argc, argv);
    glutInitWindowSize(512, 512);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    int mainHandle = glutCreateWindow("SampleBoxes");
    glutSetWindow(mainHandle);
    glutDisplayFunc(RenderCallback);
    glutReshapeFunc(ReshapeCallback);
    glutIdleFunc(IdleCallback);
    glutKeyboardFunc(KeyboardCallback);
    glutSpecialFunc(ArrowKeyCallback);
    glutMouseFunc(MouseCallback);
    glutMotionFunc(MotionCallback);
    MotionCallback(0,0);
    atexit(ExitNx);

    // Setup default render states
    glClearColor(0.3f, 0.4f, 0.5f, 1.0);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);

    // Setup lighting
    glEnable(GL_LIGHTING);
    float ambientColor[]    = { 0.0f, 0.1f, 0.2f, 0.0f };
    float diffuseColor[]    = { 1.0f, 1.0f, 1.0f, 0.0f };        
    float specularColor[]    = { 0.0f, 0.0f, 0.0f, 0.0f };        
    float position[]        = { 100.0f, 100.0f, 400.0f, 1.0f };        
    glLightfv(GL_LIGHT0, GL_AMBIENT, ambientColor);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseColor);
    glLightfv(GL_LIGHT0, GL_SPECULAR, specularColor);
    glLightfv(GL_LIGHT0, GL_POSITION, position);
    glEnable(GL_LIGHT0);

    // Initialize physics scene and start the application main loop if scene was created
    if (InitNx())
        glutMainLoop();

    return 0;
}

Другой вопрос способность объединения людей, что-то на вроде синергии. Объединятся мне кажется совсем не просто, и это как и программирование тоже наука. Вот сколько по разным форумам хожу, не могу найти оптимальной схемы объединения.

Здесь, конечно, важная роль должна уделяться практике. То есть надо по идее пробовать и пробовать объединятся, что я пока что не делаю из-за большего уклона в теоретическую область. Однако, субъективные наблюдения показывают бесполезность таких связок как сценарист/моделер как организующее начало и программистов.

У людей изначально совершенно разные системы оценки одной и той же системы, как впрочем и намерения. Программист новичок отличается от программиста профессионала. Но если берутся разные профессии, то уровень различия просто колоссален.

Предположим, что объединяются программисты (объединения сценаристов/моделеров не рассматриваю по причине того, что сами по себе без программистов они не способны создать программу, а если способны, то это уже программисты). Каждый человек индивидуален и при работе на добровольных началах скорее всего возникнут разногласия.

Не смотря на это, положительный момент объединения заключается в обмене информацией. Здесь наверное полезно как сходство, так и различие специализаций и умений программистов. Вот давайте рассмотрим сегодняшний очередной сто первый случай.

Варианты:
1. Даётся объявление и свои контактные данные. Публичного обсуждения на форуме не ведётся.
2. Даётся объявление без контактных данных. Ведётся публичное обсуждение на форуме.
3. Даётся объявление без контактных данных. Далее участники публикуют свои контакты, чтобы создатель топика связался с ними.

В случаях 1 и 3 связь проходит мимо форума. Хотя случай 2 тоже ничего не гарантирует, да хотя бы из-за разности в профессиональном или не профессиональном менталитете.

надоело писать, может потом ещё что скажу


--------------------
user posted image
обычный день на винграде
PM   Вверх
Sergos
Дата 8.1.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



В общем написал ты много, не меньше меня)
Дело не в том эффективно или нет.
Люди бывают разные, конечно со всеми не выйдет найти общий язык.
Но моя главная мысль в том, что хватит в одиночку каждый сам себе кодить. Лучше искать общие интересы. Все таки появляются хоть какие-то шансы реализовать игру.
Так как одному даже самую простую игру создать очень сложно.
Обмен опытом это всегда хорошо.
PM MAIL   Вверх
unicuum
Дата 8.1.2010, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(Sergos @  8.1.2010,  11:37 Найти цитируемый пост)
Но моя главная мысль в том, что хватит в одиночку каждый сам себе кодить. 

Мысль понятна smile 

Каков план дальнейших действий?


--------------------
user posted image
обычный день на винграде
PM   Вверх
Sergos
Дата 8.1.2010, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



План такой. Собираемся- делимся опытом, кто что умеет, в чем силен, в чем слаб.
Решаем кто какой часть игры будем заниматься. Делим задание на части и работаем над ними.
В процессе общаемся , делимся опытом, принимаем новых участников.

И еще - гениальных идей и концептов у всех хватает.

Первостепенная задача- со многих частей собрать общий концепт, который возможно будет реализовать своими силами.


Сейчас наладили связь с Olegator. У него похожие взгляды на игру.

Это сообщение отредактировал(а) Sergos - 8.1.2010, 22:11
PM MAIL   Вверх
unicuum
Дата 8.1.2010, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(Sergos @  8.1.2010,  22:07 Найти цитируемый пост)
Сейчас наладили связь с Olegator. У него похожие взгляды на игру.

Здесь мне лично думается похожесть не всегда играет положительную роль. Иногда без разницы, иногда вредно, иногда полезно. Зависит от взглядов на игру.

Так понимаю вот это - Olegator. Очевидно по приведённой мною выше классификации связь установлена методом #1 с помощью привата или почты. Интересно, какова вероятность встречи с нужными людьми исходя из этого.

Хотя ничего удивительного в этом нет. Субъективные наблюдения показывают, что так чаще всего и происходит у участников с малым количеством сообщений. Вероятно их потому и мало, что они используются лишь для связи и решения сиеминутных мелких вопросов.

Если подумать, то постановка вопросов в виде задач и подзадач, могло бы оказаться эффективнее обычного набора постоянных членов участников. Тем более сложно к чему-то присоединяться, когда нельзя проследить историю изменения ходы мыслей членов группы. Здесь и сейчас мы находимся в предисторический период какой-либо деятельности. То есть истории пока что нет не потому что её не записали, а потому что она ещё не произошла.


--------------------
user posted image
обычный день на винграде
PM   Вверх
Sergos
Дата 9.1.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Ты философ вобще. Ну а что через форум все писать?? места же не хватит! на форум я считаю можно выкладывать сообщения о событиях, документы какие-то, скрины. Пиши мне в асю, если хочешь посоветовать что-то. Форум не очень удобен для этого.

XOlegator - это Олег, мы с ним сегодня обговаривали все детали в асе.
еще с нами Denisko- Денис. Завтра планируем встретится в скайпе.

Никаких общих документов мы еще не принимали, разве что я написал проблемы разработки. А Олег свой взгяд на игру

Добавлено @ 00:46
Может кому интересно вот список проблем и задач.

Основные проблемы и требования

1.Реализация быстрой графики 

2.Интеграция под браузер

1. Это можно решить использованием OpenGL библиотек (JOGL)
Для этого нужно знать как в Open GL реализуется следующее:

- Перемещение фигур клавиатурой и мышью
- Наложение текстур на полигоны
- Одновременное движение фигуры и фона (эффект динамического перемещения в локации)
- Обработка событий мыши
- Обработка координат в OpenGL
- Анимация
- Столкновение предметов (возможно в OpenGl уже есть готовые классы)


2. Понять как создавать файлы автозапуска jar и exe.
   Интегрировать в браузер или сделать как Java Web Start приложение
   

Требования к демо-локации. Это то что должно быть реализовано в первую очередь.

- Перемещение персонажа назад и вперед
- Возможность подбирать предметы
- Возможность открывать двери, шкафы,сундуки
- Можно переходить в другую локацию
- Возможность варить зелья (Симулятор алхимии)
- Инвентарь
- Открывать окно диалога с НПС
- Реализация хотя бы одного трюка(фокуса)

Добавлено @ 00:49
А вот и тайна всех тайн !! Исходники!! Это чисто мои исходники.

скачать


А это взгяд Олега на игру, файл который он мне сегодня прислал.
скачать

Ну надеюсь комментарии будут. Мы продолжаем собираем единомышленников


Это сообщение отредактировал(а) Sergos - 9.1.2010, 00:55
PM MAIL   Вверх
Sergos
Дата 9.1.2010, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Вот ссылка на NetBeans и JDK

Net Beans+ JDK


PM MAIL   Вверх
Foror
Дата 9.1.2010, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 14.2.2004

Репутация: 1
Всего: 2



Почемы вы решили, что Java 2D тормозной? Вы хотя бы потрудились почитать Killer Game Programming in Java, изучить движок StendHal (Arianne), почитали форум javagaming.org? Тем более в Java 5 сделали BufferImage (значительно ускорив Java 2D), а также позволили рисовать на Java 2D средствами OpenGL. Единственная проблема с Java 2D это глючность на некоторых Mac OS.

Вот посмотрите http://www.interactivepulp.com/pulpcore/, что можно делать на Java с использованием просто софтового рендеринга . Автор сделал собственный софтовый (без ускорения через видеокарту и без использования Java 2D) движок 2D рендеринга. Правда это нехило грузит процессор (core 2 duo может нагрузить от 50% на каждое ядро). Поэтому я пока отказался от его движка и делаю свой на Java 2D, чтобы лучше разобраться в геймдеве, так как раньше работал в основном по вебу.

--------------------
Разработка веб-сайтов и создание интернет магазина
PM MAIL WWW ICQ   Вверх
Sergos
Дата 9.1.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Нужно посмотреть, но Jogl насколько мне известно серьезно обгоняет Java 2d.
Если нас устроит эта библиотека,то можно использовать ее. Насчет OpenGl это вариант, но ничего толкового на нем мы не написали.
PM MAIL   Вверх
Sergos
Дата 9.1.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Что я только не делал с Java2d и AWT и Swing....ну тормозит графика!!! Мелькает, дергается.
Двойная буфферизация только еще больше замедляет.......просто не вижу ничего другого кроме OpenGl

PM MAIL   Вверх
Foror
Дата 10.1.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 14.2.2004

Репутация: 1
Всего: 2



Где ты брал информацию или исходники как делать буфферизацию? Ты писал код, который подстраивает ФПС под текущую производительность системы? Скинь сюда исходники игрового цикла.
--------------------
Разработка веб-сайтов и создание интернет магазина
PM MAIL WWW ICQ   Вверх
Vasilenko
Дата 10.1.2010, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 9.1.2010
Где: г.Троицк (Челябин ская область)

Репутация: нет
Всего: нет



Sergos
В каком формате вы предполагаете хранить данные локации, не могли бы вы описать структуру этого файла?
PM MAIL WWW ICQ Skype   Вверх
Sergos
Дата 10.1.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Вот код прорисовки графики без буферизации.


Код

public void paintComponent(Graphics g1)
{
    try
    {
           
        
    Graphics2D g2 =(Graphics2D)g1;
   

     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
     g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
     g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
     g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED);
     g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);


      g2.drawImage(background, calculate.shift, 0, this);
      g2.drawImage(point, calculate.heroX, calculate.heroY, this);
    
    
      this.paintInventory(g2)
      this.paintPoint(g2);
      this.paintLines(g2);
      this.paintMenus(g2);
   
    
    g2.finalize();
    g1.finalize();
    
    }

    catch(Exception e)
    {
      
        System.out.print(e.getMessage());
    }

}


А это с буферизацией

Код

public void paintComponent(Graphics g1)
{
    try
    {     
        
    Graphics2D g2 =(Graphics2D)g1;
    Graphics2D g3 =buffer.createGraphics();

     g3.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
     g3.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
     g3.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
     g3.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED);
     g3.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);


    g3.drawImage(background, calculate.shift, 0, this);
    g3.drawImage(point, calculate.heroX, calculate.heroY, this);
    
    
    this.paintInventory(g3);
    this.paintPoint(g3);
    this.paintLines(g3);
    this.paintMenus(g3);
  
   
       
    g2.drawImage(buffer, 0, 0, null);
    
   
    
    g2.finalize();
    g1.finalize();
    
    
    }

    catch(Exception e)
    {
        System.out.print(e.getMessage());
    }

}


Добавлено через 2 минуты и 13 секунд
Сохранение и загрузка данных идет через  сериализацию связанного списка. Но графику это не влияет. Я отключал обработку всех данных- результат оставался тем же.
PM MAIL   Вверх
Vasilenko
Дата 10.1.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 9.1.2010
Где: г.Троицк (Челябин ская область)

Репутация: нет
Всего: нет



Возможно для отрисовки графики лучше использовать Flash, а серверную часть игры написать на Java, для взаимодействия между клиентской и серверной частью данные можно передавать, используя AMF.
PM MAIL WWW ICQ Skype   Вверх
Foror
Дата 10.1.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 14.2.2004

Репутация: 1
Всего: 2



Как-то все запущенно smile Я не настолько конечно спец, но тут возможно тормоза из-за отдачи рендеринга на свинговские компонеты. В общем, кури Killer Game Programmin in Java.

P.S. Кстати, на меня расчитывать не нужно, я только интересуюсь тормозами java 2d и не больше smile
--------------------
Разработка веб-сайтов и создание интернет магазина
PM MAIL WWW ICQ   Вверх
Sergos
Дата 10.1.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Сейчас рассматриваем движок http://www.interactivepulp.com/pulpcore/
и изучаем устройство OpenGl. есть книги, если кому интересно могу скинуть
PM MAIL   Вверх
Sergos
Дата 11.1.2010, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Мы официально переехали сюда! Теперь весь проект будет идти через этот сервис.
Здесь можно взять последние обновления разработки и все что ее касается.
дом проекта
PM MAIL   Вверх
Sergos
Дата 11.1.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Ищем JOGL движок . Можно 2D.

Предлагайте варианты,кто знает- рассмотрим все.

И еще кому интересно с нами сотрудничать- добро пожаловать в команду, от вас требуется только энтузиазм и любовь к играм!
PM MAIL   Вверх
Sergos
Дата 12.1.2010, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Вот наши исходники ,они постоянно обновляются
Исходники

А вот наш концепт.
Концепт


Это демо-проект под NetBeans с настроеным Jogl. Можно експериментировать.
Jogl Demo

Это сообщение отредактировал(а) Sergos - 13.1.2010, 14:41
PM MAIL   Вверх
Sergos
Дата 17.1.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Наконец-то нам удалось решить 2 главные проблемы проекта.
1- Тормоза графики
2- Создание автозапуска игры.

Первая проблема решилась использованием OpenGL библиотек.
Вторая заключалась в недостающих библиотеках и в том что Нет Бинс  и Java по разному распознают пути к файлам. 
Пришлось создавать 2 копии папки ресурсов.

Теперь мы может с чистой совестью приступить к разработке самой игры)))

Вот наш билд, качайте смотрите.

http://www.assembla.com/spaces/oxy2d/docum...nload/oxy2d.rar

Пишите любые комментарии и замечания, нам интересно узнать ваше мнение

PM MAIL   Вверх
Sergos
Дата 24.1.2010, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Привет всем. У меня появился вопрос. Кто работал с OpenGL ? как сделать в нем анимацию. Нужно чтобы персонаж двигался.Я меняю координаты персонажа в цикле, но перерисовка екрана не происходит. Может нужно эту функцию внутрь display() запихнуть???
PM MAIL   Вверх
unicuum
Дата 24.1.2010, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(Sergos @  24.1.2010,  00:46 Найти цитируемый пост)
Я меняю координаты персонажа в цикле, но перерисовка екрана не происходит.

А не знаю как там в Java, но перерисовка экрана принадлежит не OpenGL. Обычно примерно так, вначале при инициализации поверхности на которой будем рисовать объявляется используется ли простая или двойная буферизация. При использовании простой буферизации нужно использовать в конце функции отрисовки функции OpenGL glFlush или glFinish. В случае двойной вызывается функция обмена переднего и заднего буферов, причём эта функция не принадлежит OpenGL, как не принадлежат ей функции инициализации окна.

Для анимации не надо зацикливать программу, лучше использовать таймер, тогда можно создать контроль во времени. Например, независимость смены трансформации объектов (смещение, поворот, масштабирование и т.д.) от количество кадров в секунду. Таймеры бывают разных типов, некоторые срабатывают один раз после определённого промежутка времени вызывая функцию. В них вызывается переотображение поверхности, а так же необходимые координатные трансформации по таймеру.

Трансформации обычно так же привязывают к устройствам ввода вывода - клавиатура, мышь, джойстик. С точки зрения таймера это не имеет значения, в конце концов перерисовка по ним происходит в функции отрисовки определяемой пользователем, в к конце которой и вызывает glFlush или glFinish и в другом случае обмен передних и задних буферов.

В целом, этот вопрос совсем не тем кто работал с OpenGL, а скорее тем кто работал в Java и использовал OpenGL. Хотя если судить по GLUT+OpenGL, SDL+OpenGL и Qt OpenGL, то алгоритм работы с библиотекой и её подключения как правило тот же самый, только называется всё немного иначе.

Добавлено через 6 минут и 24 секунды
Сразу добавляй свои картинки, чтобы не возвращаться к теме:
user posted image


--------------------
user posted image
обычный день на винграде
PM   Вверх
Sergos
Дата 31.1.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Проблема с анимацией решилась. Все дело в том, что нужно просто написать функции,которые бы меняли изображение не в цикле. Например при движении персонажа один вызов функции должен менять координаты только на один пиксель. А сам цикл перемещения можно реализовать через переменные ,общие для всего класса и другими путями.
А вобще, сейчас идет работа по созданию редактора игры. Самую новую версию демки можно взять с нашего сайта.

ссылка на сайт

Конечно самая последняя версия только в репозитории, но время от времени я заливаю и одним архивом.

И еще ,если кто работал с 2д графикой, подскажите хорошие ресурсы игровых спрайтов, анимации и разных эффектов.
Программирование это одно, а графика нужна.
PM MAIL   Вверх
Sergos
Дата 18.2.2010, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Всем привет. Хочу сообщить, что разработка игры не стоит на месте. В нашей команде уже 4 человека.
Мы продолжаем искать новых людей. Особенно нужны дизайнеры. Так как дизайнера у нас нету.Отзывайтесь все ,кто заинтересовался.
Игра будет называться Frozen. Сюжет уже есть. Редактор уровней находится в стадии тестирования.
Вот ссылка на то, что уже готово.
Frozen - Level Editor

Ну и сам рабочий портал
Войти

Мы всегда рады новым участникам, так что пишите ,тестируйте, комментируйте!

PM MAIL   Вверх
Sergos
Дата 20.2.2010, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Ну где же вы, дизайнеры?)) Наверно не на форуме программистов....
PM MAIL   Вверх
GX3P
Дата 9.3.2010, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.3.2010

Репутация: нет
Всего: нет



о.

Это сообщение отредактировал(а) GX3P - 10.3.2010, 20:06
PM MAIL   Вверх
Sergos
Дата 24.3.2010, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



))) Дизайнеры по прежнему нужны. Движок и редактор игры уже готовы.
Программисты тоже приветствуются. Если не знакомы с Java- помогу разобраться и объясню весь код.

Это сообщение отредактировал(а) Sergos - 24.3.2010, 22:54
PM MAIL   Вверх
Sergos
Дата 7.7.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



После долгого перерыва, опять возвращаюсь к идеи интеграции игры под браузер. У кого есть опыт создания java апплетов, java web start - посоветуйте статьи, литературу или выскажите личное мнение. Насколько это трудно переписать десктопное приложение на яве под браузер?

----------------------
Если кто-то интересуется данной технологией (Java ,Jogl) могу помочь советом, так как опыта в данной области собралось уже немало))  А начинать одному всегда сложно.

Это сообщение отредактировал(а) Sergos - 7.7.2010, 09:44
PM MAIL   Вверх
Исполнитель234
Дата 8.7.2010, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2008
Где: Украина

Репутация: нет
Всего: 1



Sergos, сделайте небольшой сайт, посвященный вашей игре.

Расположите там видеоролики прохождения демо-уровня, информацию о том, где и как скачать исходники,
как их скомпилировать, как играть в игру, как редактировать уровень. 
Советую потратить немного времени на это, написать мануал. 

И затем используйте этот сайт, как отправную точку.

Ваш рабочий портал это просто ужас для непосвященного т.е. для того же дизайнера, например.
Или тестера, или сценариста.

Советую учесть это.


С уважением.



Это сообщение отредактировал(а) Исполнитель234 - 8.7.2010, 06:46
--------------------
Тестирую UI, консультирую по вопросам юзабилити, проектирую, составляю грамотные ТЗ.
PM MAIL WWW ICQ   Вверх
Sergos
Дата 8.7.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Спасибо за совет, как раз думаю над этим. Хотел оформить в виде блога
PM MAIL   Вверх
maxfate
Дата 30.11.2013, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 30.11.2013

Репутация: нет
Всего: нет



Здравствуйте! Проект еще жив? хочу присоединиться
PM MAIL   Вверх
balexa
Дата 6.2.2014, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.2.2014

Репутация: нет
Всего: нет



Меня тоже это интересует)
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

Внимание:
В этом форуме обсуждаются вопросы только по совместным проектам, когда Вы хотите найти партнёров или стать участником проекта.
Запрещается размещение заказов на написание программ, поиск работников (для этого есть раздел "Работа") и реклама своих сетевых ресурсов.

Этот раздел только для проектов в которых Вы будете выступать в качестве исполнителя!

Темы и сообщения, не удовлетворяющие данным правилам, будут удаляться на основании пункта 3 Правил форума!

  • Человек, создающий тему, становится руководителем проекта. Все вопросы о разработке решаются с его согласия.
  • Публикация предложения к сотрудничеству считается защищённым авторскими правами и не может разрабатываться без согласия с руководителем проекта.
  • Конечный продукт должен содержать указание на всех участников и Vingrad.

  • Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, Poseidon

     
    1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
    0 Пользователей:
    « Предыдущая тема | Совместные проекты/поиск партнёров | Следующая тема »


     




    [ Время генерации скрипта: 0.1769 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


    Реклама на сайте     Информационное спонсорство

     
    По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
    Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.