forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   OpenGL арконойд проблема с отскакиванием шарика от платформы (http://forum.boolean.name/showthread.php?t=11567)

zinador 26.12.2009 09:56

OpenGL арконойд проблема с отскакиванием шарика от платформы
 
всем здрасте.
я начал писать арконойд с помощью OpenGL
в с++ я ешо мало чего понимаю и поэтому прошу у вас помощи.
дело в том что я пытаюсь реализовать отскок шарика от платформы а у меня получаеться не так как надо тоесть платформа идет в лево шарик летит вверх,а платформа идет вправо шарик летит в низ и самое главное не происходит отскока от платформы для того чтобы вы поняли о чем я кидаю код
Код:

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glaux.h>
#pragma comment (lib,"glut32.lib")
#pragma comment (lib,"glaux.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"opengl32.lib")
extern double xp=0.1;//координаты шарика       
extern double yp=0.1;//координаты шарика
extern double vx=0.1;//координаты скорости
extern double vy=0.1;//координаты скорости
extern double dt=0.1; 

void CALLBACK resize(int width,int height)
{
  glViewport(0,0,width,height);
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
  glOrtho(-5,5, -5,5, 2,12); 
  gluLookAt( 0,0,5, 0,0,0, 0,1,0 );
  glMatrixMode( GL_MODELVIEW );
}   
void podstavka (void)
{
        glPushMatrix();
        glTranslated(vx/0.1, 0.0, 0.0);
        glTranslated(-1.0,-4.5, 0.0);
        glColor3d(0,0,1);
        auxSolidBox(3,0.2,1);
    glPopMatrix(); 
}
void sharik()
{
        glPushMatrix();     
        glTranslated(0, xp/1.0, 0.0);
    auxSolidSphere(0.3);
        xp = xp-vx*dt;
    yp = yp-vy*dt;
        if(vy ==vx)
    vy = -vy;
    glPopMatrix();       
}

void CALLBACK display(void)
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        podstavka();
        sharik();
        auxSwapBuffers();
}
void CALLBACK levo(void)
{
        vx=vx-0.03;       
}
void CALLBACK pravo(void)
{   
        vx=vx+0.03;
}

void main()
{
        float pos[4] = {3,3,3,1};
        float dir[3] = {-1,-1,-1};
    auxInitPosition( 50, 10, 400, 400);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( L"Sphere2" );
    auxIdleFunc(display);
    auxKeyFunc(AUX_LEFT,levo);
        auxKeyFunc(AUX_RIGHT,pravo);
    auxReshapeFunc(resize);
    glEnable(GL_ALPHA_TEST);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
        auxMainLoop(display);       
}

прошу помогите пожалуйста

zinador 26.12.2009 14:51

Ответ: OpenGL арконойд проблема с отскакиванием шарика от платформы
 
что незнает некто как решить ету проблему если можно то с пояснением плиз

Hurrit 26.12.2009 15:37

Ответ: OpenGL арконойд проблема с отскакиванием шарика от платформы
 
Имей терпение, здесь некоторые днями, а то и неделями ждут ответа

zinador 26.12.2009 23:23

Ответ: OpenGL арконойд проблема с отскакиванием шарика от платформы
 
все разобрался ! надо через через переменные которые за координаты x и y отвечают делать проверку!
кстате в .NET MsgBox - ето вылазинье окно с сообщением ,а в OpenGL как ета функция выглядит? вроде где-то смотрел ,но забыл где ,и вспомнить немогу прошу подскажите

alcoSHoLiK 27.12.2009 15:19

Ответ: OpenGL арконойд проблема с отскакиванием шарика от платформы
 
Для того, чтобы отобразить MessageBox, надо вызывать функцию, специфичную для выбранной оконной системы. Если у тебя программа под виндой запускается, можно написать так:
Код:

void main(int argc, char **argv)
{
    // ...

    // по имени приложения находим HWND окна
    HWND winHandle = FindWindow(NULL, argv[0]);
    MessageBox(winHandle, "сообщение", "заголовок", MB_OKCANCEL);

    // ...
}

Код взят отсюда: http://www.gamedev.net/community/for...age=1&#3298324

Или еще проще - создать немодальный диалог:
Код:

MessageBox(NULL, "сообщение", "заголовок", MB_OKCANCEL);


Часовой пояс GMT +4, время: 16:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot