Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2007, 20:00   #11
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Во первых используй что-то одно либо FormPaint либо таймер, щас некогда смотреть, посмотрю завтра, ты кординаты менял?
А где процедуры KeyDown, KeyUp?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 09.09.2007 в 20:02.
mutabor вне форума Ответить с цитированием
Старый 10.09.2007, 13:01   #12
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

держи код, я немного переделал, как убрать мерцание не знаю оно у тебя было изначально, а я в OpenGL не силен, вообще мерцания быть не должно, у меня есть похожий исходник с таймером и т.д. там его нет
Код:
const
  speed = 0.01;

var
  Form1: TForm1;
  hrc: HGLRC;
  DC:HDC;
  H:THandle;
  lef,right,up,down: boolean;
  px, py: double;

implementation

{$R *.DFM}

procedure SetDCPixelFormat (hdc : HDC);
var
  pfd : TPixelFormatDescriptor;
  nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
H:=Handle;
DC:=GetDC(H);
SetDCPixelFormat(DC);
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
glClearColor (0.5, 0.5, 0.75, 1.0);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
glClear (GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.85, 0.35);
glviewPort(0, 0, ClientWidth, ClientHeight);
glPointSize(20);
glBegin(GL_POINTS);
glvertex2f(px,py);
glEnd;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC(H,DC);
DeleteDC(DC);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 37 then lef:=true;
if key = 38 then up:=true;
if key = 39 then right:=true;
if key = 40 then down:=true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 37 then lef:=false;
if key = 38 then up:=false;
if key = 39 then right:=false;
if key = 40 then down:=false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if lef then px:=px-speed;
if right then px:=px+speed;
if up then py:=py+speed;
if down then py:=py-speed;
SwapBuffers(DC);
InvalidateRect(H,nil,False);
end;
P.S. интервал таймера поставь 20
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.09.2007, 21:12   #13
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Спасибо люди добрые!!!
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 11.09.2007, 18:55   #14
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 mutabor
Почти все понял ))) все работает! ))
я самоучка, вот не могу понять последнюю строку:

InvalidateRect(H,nil,False);

если не сложно опиши для чего и когда применять можно
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 11.09.2007, 18:59   #15
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

единственный прикол с мерцанием это да...
у меня аж другие приложения и рабочий стол мелькают )
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 11.09.2007, 21:09   #16
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

InvalidateRect вызывает перерисовку объекта в определенной области.
В этими параметрами и в этой программе InvalidateRect(H,nil,False) равнозначна Repaint;

p.s. держи ссылку думаю пригодится
http://www.citforum.ru/programming/o...opengl&delphi/
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 13.09.2007, 14:27   #17
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2mutabor
Интересная ссылка спасиб, кое-что полезное я нашел уже
Избавился от мерцания, с горем попалам, мне помогли
Я вот дописал немного код, теперь эта точка у меня стреляет , но, правда, всего один раз Помоги пожалуйста реализовать код чтоб при каждом нажатии Enter эта точка стреляла. Чего-то полдня просидел пробовал с циклами заморочиться, но так ничего и не вышло
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 13.09.2007, 14:33   #18
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OpenGL, ExtCtrls;
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private
     DC: HDC;
     hrc: HGLRC;
     procedure SetDCPixelFormat;
    { Private declarations }
  public
    { Public declarations }
  end;
const
   speed = 0.01;
   var
   Form1: TForm1;
   lef,right,up,down, fire: boolean;
   px, py, snar: double; //snar - приращение для снаряда
implementation
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
DC := GetDC(Handle);
   SetDCPixelFormat;
   hrc := wglCreateContext(DC);
   wglMakeCurrent(DC, hrc);
   glClearColor (0.5, 0.5, 0.75, 1.0);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
wglMakeCurrent(0, 0);
  wglDeleteContext(hrc);
  ReleaseDC(Handle, DC);
  DeleteDC (DC);
end;

procedure TForm1.SetDCPixelFormat;
var
   nPixelFormat: Integer;
   pfd: TPixelFormatDescriptor;
begin
   FillChar(pfd, SizeOf(pfd), 0);
   pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
                  PFD_DOUBLEBUFFER;
   nPixelFormat := ChoosePixelFormat(DC, @pfd);
   SetPixelFormat(DC, nPixelFormat, @pfd);
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
   glViewPort (0, 0, ClientWidth, ClientHeight);
   glClear (GL_COLOR_BUFFER_BIT);
   glColor3f(1.0, 0.85, 0.35);
   glviewPort(0, 0, ClientWidth, ClientHeight);
   glPointSize(20);
   glBegin(GL_POINTS);
     glvertex2f(px,py);
     glEnd;
 
    glPointSize(5);
    glBegin(GL_POINTS);
    glColor3f(0.6, 0.2, 0.8);
    glvertex2f(px, py);
    glEnd;
 
{запуск снаряда}
     if fire= true then begin
    glPointSize(5);
    glBegin(GL_POINTS);
    glColor3f(1.0, 0.1, 0.2);
    glvertex2f(px, py+snar);
    glEnd;
    end;
    SwapBuffers (DC);
    end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if key = 37 then lef:=true;
   if key = 38 then up:=true;
   if key = 39 then right:=true;
   if key = 40 then down:=true;
   if key = 13 then fire:= true
end;
 
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if key = 37 then lef:=false;
   if key = 38 then up:=false;
   if key = 39 then right:=false;
   if key = 40 then down:=false;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   if lef then px:=px-speed;
   if right then px:=px+speed;
   if up then py:=py+speed;
   if down then py:=py-speed;
   if fire then  snar:= snar+ speed;
   InvalidateRect(Handle,nil,False);
end;
end.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 14.09.2007, 16:20   #19
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

замени эту строку
if fire then snar:= snar+ speed;
этим
Код:
   if fire then
     begin
     snar:= snar + speed;
     if snar > 1 then
       begin
       fire:=false;
       snar:=0;
       end;
     end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 15.09.2007, 19:05   #20
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

я, наверное, просто вопрос неправильно поставил...
мне нада более сложную вещь реализовать - если снаряд вылетел из точки и пролетел уже, например, расстояние >= 0.25 (py+0.25) от центра точки, то при нажатии Enter снова может вылететь 2-ой снаряд, а 1-ый снаряд так и должен лететь до конца формы. Так же когда 2-ой снаряд пролетел от центра точки расстояние >= 0.25, то может вылететь и 3-ий снаряд, при нажатии Enter (если не нажал, то не вылетает ), а 1-ый и 2-ой так и продолжают лететь до конца формы, не исчезая с поля
мне кажется, что нужно с динамическими переменными сделать...
Или я не прав?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 15.09.2007 в 19:10.
Roof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как двигаться по данным после select? _ozzy_ SQL, базы данных 5 30.06.2008 09:33
Как двигаться по записям после Select? _ozzy_ БД в Delphi 5 17.06.2008 15:53
Url open Pavel_aress Общие вопросы Delphi 12 01.08.2007 20:40
при нажатии на кнопку должна создаваться новая форма ***СкаЙ*** Помощь студентам 5 13.06.2007 11:51
Точка на полигоне? Роман Радер Общие вопросы Delphi 14 12.02.2007 17:08