Модераторы: 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   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

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

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

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

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

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

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


     




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


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

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