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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2007, 19:11   #21
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

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

здесь только то что нужно добавить или заменить
Код:
type
TShotDirect = (dUp, dDown, dLeft, dRight);
TShot = record
  x, y: double;
  end;

const
  speed = 0.01;
  shotspeed = 0.02;
  shotinterval = 100; //милисекунд

var
  //добавить эти
  Shots: array of TShot;
  ShotDirect: TShotDirect;
  interval: integer;
  //snar не нужна

procedure TForm1.FormPaint(Sender: TObject);
var
i: integer;
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;

{запуск снаряда}
  for i:=0 to Length(Shots)-1 do
     begin
     glPointSize(5);
     glBegin(GL_POINTS);
     glColor3f(1.0, 0.1, 0.2);
     glvertex2f(Shots[i].x, Shots[i].y);
     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 = 32 then //32 - пробел
  if not fire then
    begin
    SetLength(Shots,Length(Shots)+1);
    Shots[Length(Shots)-1].x:=px;
    Shots[Length(Shots)-1].y:=py;
    fire:=true;
    end;
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;
if key = 32 then
  begin
  fire:=false;
  interval:=0;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
i, j: integer;
m: array of byte;
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;
for i:=0 to Length(Shots)-1 do
  begin
  case ShotDirect of
    dUp: begin
           Shots[i].y:=Shots[i].y+shotspeed;
           if Shots[i].y > 1 then
             begin
             SetLength(m,Length(m)+1);
             m[Length(m)-1]:=i;
             end;
           end;
    dDown: ;
    dLeft: ;
    dRight: ;
    end;
  end;
  for i:=0 to length(m)-1 do
    begin
    for j:=m[i] to Length(Shots)-2 do
      Shots[j]:=Shots[j+1];
    SetLength(Shots,Length(Shots)-1);
    end;
  if fire then
    begin
    interval:=interval+20;
    if interval >= shotinterval then
      begin
      interval:=0;
      SetLength(Shots,Length(Shots)+1);
      Shots[Length(Shots)-1].x:=px;
      Shots[Length(Shots)-1].y:=py;
      end;
    end;
InvalidateRect(Handle,nil,False);
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; 16.09.2007 в 23:06. Причина: немного подправил
mutabor вне форума Ответить с цитированием
Старый 17.09.2007, 14:20   #23
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

я не понял про переменные m и j )))
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 18.09.2007, 01:38   #24
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Все пули видимые в текущий момент содержатся в массиве Shots. Когда одна или несколько из них покидают экран, массив нужно уменьшить на соотв. число элементов. Но в общем цикле этого делать нельзя, так как будут ошибки при обращении к массиву. Для этого и нужен массив m, в него записываются элементы к-рые нужно удалить из Shots.
j - счетчик цикла (i уже задействована) в к-ром удаляются элементы
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 вне форума Ответить с цитированием
Старый 18.09.2007, 07:43   #25
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

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

2 mutabor
Здравствуй! у меня небольшой вопросик по программке, в которой ты мне очень помог, про стреляющую точку. Мне остались непонятны некоторые моменты в коде...
я прикрепляю исходник, в котором пометил вопросами что мне непонятно, про вылет снаряда.
Напиши пожалуйста подробные комментарии, если не сложно.
Вложения
Тип файла: rar Game_Cran.rar (10.2 Кб, 15 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 15.11.2007, 10:51   #27
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Несколько распухший Unit1.pas
Вложения
Тип файла: rar Unit1.rar (3.9 Кб, 15 просмотров)
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 вне форума Ответить с цитированием
Старый 16.11.2007, 01:33   #28
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Спасибо тебе большое, теперь начало доходить постепенно )
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
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