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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2010, 14:41   #151
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

После длительного отсутствия в среде Delphi и на форуме, снова возвращаюсь в ряды программистов.
Все лето не делал игру, так как были проблемы с переездом и поступлением. Недавно в ВУЗе мы начали проходить векторную алгебру и я вспомнил о своём проекте. Вчера сел за код. В связи с этим снова появились вопросы:
1) Можно ли как-нибудь узнать координаты концов отрезка Shape, который является гранью ландшафта?
2) Что такое BB?

Больше вопросов пока нет. Начинаю кардинально переделывать дизайн игры, готовлю демку.
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 15.10.2010, 16:06   #152
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
1) Можно ли как-нибудь узнать координаты концов отрезка Shape, который является гранью ландшафта?
Как точно не помню, посмотри функции по которым рисуются физические тела, там ведь находятся координаты их вершин.
Цитата:
2) Что такое BB?
BB - описывающий прямоугольник (такое название так как по английски будет Boundary Box вроде). Например есть два тела сложной формы для которых надо найти точки пересечения (которых может и не быть). Перед тем как проводить долгие вычисления сначала смотрят пересекаются ли описывающие многоугольники, тем самым разгружая процессор от порой ненужных вычислений.
Вадим Буренков вне форума Ответить с цитированием
Старый 15.10.2010, 20:11   #153
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

У меня тела рисуются не по координатам вершин. Массив с точками ландшафта формируется при создании уровня, т.е. является константой. А другие тела, такие как кнопки и ящики - спрайтом.
Более-менее разобрался с PShape, нашел координаты вершин граней.
Пишу a:=shape1.DfShape.a, а среда выдает ошибку после DfShape. где DfShape- pointer (меняется в зависимости от типа shape: круг, отрезок или полигон). Как быть?
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 15.10.2010 в 21:17.
Андрей 93 вне форума Ответить с цитированием
Старый 15.10.2010, 21:40   #154
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Ниче не понял, поконкретнее.
Цитата:
нашел координаты вершин граней
Тогда в чем проблема?
Цитата:
Пишу a:=shape1.DfShape.a, а среда выдает ошибку после DfShape. где DfShape- pointer (меняется в зависимости от типа shape: круг, отрезок или полигон). Как быть?
Что конкретно надо сделать? Найти вершины по шейпу? - смотри процедуры рисования chipmunk, там по шейпам находятся вершины.

Последний раз редактировалось Вадим Буренков; 15.10.2010 в 21:48.
Вадим Буренков вне форума Ответить с цитированием
Старый 16.10.2010, 10:52   #155
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Все, я разобрался! Надо было писать
Код:
a:=PSegmentShape(Shape1.DfShape).a
Я даже не знал, что так можно делать. Здесь PSegmentShape выступает как функция, если я правильно понял. А про модуль uChDraw я сначала вообще забыл, сказался долгий перерыв в разработке
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 16.10.2010, 13:23   #156
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
десь PSegmentShape выступает как функция, если я правильно понял.
Это приведение типов. Сам когда об этом не знал удивлялся как тип может быть функцией. Вот тут про это можно посмотреть:
http://www.programmersforum.ru/showthread.php?t=110456
Вадим Буренков вне форума Ответить с цитированием
Старый 30.10.2010, 14:36   #157
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Я закончил создание полноценного меню, теперь занимаюсь доведением до ума уровней. Опять столкнулся с проблемой в отрисовке.
Рисование объекта:
Код:
if stat.texture>0 then                                     //если текстура объекта больше 0,
   draw3angle(stat.triangles[i],Tex[stat.texture]);         //то рисуем треугольники с этой текстурой
Код:
procedure draw3angle(Triangle:b2Triangle; tex:PTexture);    //данные передаются на отрисовку 
var PC:polydrawcashe;                                                   //в ф-цию drawtexpoly
begin 
 pc.MaxPoints:=3;
 pc.Texture:=tex;
 setlength(pc.Point,3);
 setlength(pc.TexPoint,3);
 pc.Point[0].x:=triangle.x[0];
 pc.Point[0].y:=triangle.y[0];
 pc.Point[1].x:=triangle.x[1];
 pc.Point[1].y:=triangle.y[1];
 pc.Point[2].x:=triangle.x[2];
 pc.Point[2].y:=triangle.y[2];
 pc.texPoint[0].x:=triangle.x[0];
 pc.texPoint[0].y:=triangle.y[0];
 pc.texPoint[1].x:=triangle.x[1];
 pc.texPoint[1].y:=triangle.y[1];
 pc.texPoint[2].x:=triangle.x[2];
 pc.texPoint[2].y:=triangle.y[2];
 drawtexpoly(pc);
end;
Обведение контура и круги на вершинах:
Код:
 s:= cpShape;
  while s <> nil do
  begin
    if s.Body=Stat.body then
    begin
     a:= cpvadd(stat.body.p, cpvrotate(PSegmentShape(s.DfShape).a, stat.body.rot)); // находим точки концов
     b:= cpvadd(stat.body.p, cpvrotate(PSegmentShape(s.DfShape).b, stat.body.rot)); // каждого отрезка
     Pr2D_LineWidth(5);                                                                                      // задаем ширину линий
     Pr2D_Line(a.x, a.y, b.x, b.y, $000000,255,pr_smooth);                                       // линия
     Pr2D_LineWidth(1); 
     PR2D_Circle(a.x,a.y,2.5,$00ff00,255,32,pr_fill);                                                 // кружок
    end;
    s:= s.Next;
  end;
На рисунке показаны 3 случая:
а) Заливка черного цвета
б) поднимаюсь чуть выше и рисуется как надо
в) когда рисую круги на вершинах зеленым цветом, все закрашивается в зеленый.

Код:
procedure DrawTexPoly(PolyPoints:PolyDrawCashe);
var
  vNum:integer; //кол-во вершин
  v,v2:cpVect; //координаты текстур и точки
  i:integer; //счетчик
  SCALEX,SCALEY:^single; //увеличение
  cam:^PCamera2D;
begin
SCALEX:=  P_GetParams(gSCREEN_SCALEX);                                // в OpenGl не разбираюсь
SCALEY:=  P_GetParams(gSCREEN_SCALEY);
cam:=P_GetParams(gCURRENT_CAM2D);
vNum:=PolyPoints.MaxPoints;
glPushMatrix;
glScalef(SCALEX^,SCALEY^,1);
glEnable( GL_TEXTURE_2D );
glEnable( GL_BLEND );
glBindTexture( GL_TEXTURE_2D, PolyPoints.Texture.ID );
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glBegin( GL_Polygon );
for i:=0 to vNum-1 do
begin
v:=cpvadd(TEX_OFFSET, PolyPoints.TexPoint[i]);
v2:=cpvsub(PolyPoints.Point[i],cpv(Cam^.X,Cam^.Y));
glTexCoord2f( v.x/ PolyPoints.Texture.Width*TEX_ZOOM, v.y/ PolyPoints.Texture.Height*TEX_ZOOM);
glVertex2f( v2.x,v2.y);
end;
glEnd;
glDisable( GL_TEXTURE_2D );
glDisable( GL_BLEND );
glPopMatrix;
end;
Изображения
Тип файла: jpg Untitled-1.jpg (54.3 Кб, 85 просмотров)
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 30.10.2010 в 14:43.
Андрей 93 вне форума Ответить с цитированием
Старый 30.10.2010, 15:09   #158
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Не смотрел твой код, но рисование текстуры черным цветом может быть вызвано тем, что стоит черный цвет в glColor.
Вадим Буренков вне форума Ответить с цитированием
Старый 30.10.2010, 15:43   #159
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Что за glColor? Не вижу такого. Я использую написанную тобой функцию (из модуля g2d_polygones). Тем более черным не всегда рисуется, а только когда включаю рисование контура. Могу кинуть демо
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 30.10.2010 в 15:47.
Андрей 93 вне форума Ответить с цитированием
Старый 09.11.2010, 16:16   #160
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Запутался с камерами. Когда создаю 2-ую камеру, то некорректно рисуются спрайты и линии при физ. объектах. Например, спрайт героя смещается. Как это исправить?
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Физика в 2D играх Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 32 02.11.2010 22:00
Искуственый интелект в играх VintProg Gamedev - cоздание игр: Unity, OpenGL, DirectX 26 01.08.2009 23:09
Сюжет в 2D играх ZotaC Свободное общение 8 05.07.2009 15:42
Физика программы. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 09.05.2008 18:14
Анимация в играх frai Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.11.2007 14:28