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

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

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

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

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

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

Понятно. Сейчас хочу сделать управление стрелками. Я уже делал, но потом удалил проект. Теперь не могу тем же способом: добавляю в pBody ещё одно свойство n:integer. Затем, при создании объекта (окружность во 2-ом демо) задаю ему параметр n=1. В процедуре Demo2_Update прописываю:
b:= cpBody;
if key_down(k_right) then
while b <> nil do
begin
if b.n=1 then
b.w:=b.w+0.2;

b:= b.next;
end;
То есть телу со значением n=1 (в данном случае окружности) повышаем угловую скорость, чтобы оно катилось.
Иногда работает хорошо, а иногда вместо круга крутится что попало: то стенки демки, то квадратики...
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 26.01.2010 в 05:46.
Андрей 93 вне форума Ответить с цитированием
Старый 25.01.2010, 18:27   #52
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Во первых в типы чипманка ничего добавлять не надо. Если у тела должны быть дополнительные переменные создавай тип который будет включать Body и дополнительные переменные:
Код:
PGameObject=^TGameObject;
TGameObject=record
body:Pbody;
n:integer;
end;
Все объекты чипманка находятся в неком подобии массива. Он реализован через указатели Prev и Next.
Код:
b:= cpBody;
if key_down(k_right) then
while b <> nil do
begin
//код тут будет выполнятся для всех объектов, с чего ты решил что двигаться будут только окружности.
b:= b.next;
end;
Если ты хочешь проводить манипуляции с каким-либо конкретными объектами то сохраняй на них указатели при создании и потом их используй.

Последний раз редактировалось Вадим Буренков; 25.01.2010 в 18:32.
Вадим Буренков вне форума Ответить с цитированием
Старый 26.01.2010, 05:52   #53
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Т.е. создавать так?:
var b1: pbody; ...
begin
b1.m:=...;
b1.i:=...;
b1.w:=...
...
end.
получается, что можно не использовать функцию cpBodyCreate(): pbody?
Будет ли в этом случае ChipMunk находить свои объекты через указатели prev/next?
Наверное, я чего-то не понимаю
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 26.01.2010 в 08:34.
Андрей 93 вне форума Ответить с цитированием
Старый 26.01.2010, 09:49   #54
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

насколько я понимаю, pbody - это указатель. Если просто создать переменную var b1: pbody, то она будет указывать на мусор. Поэтому ее нужно инициализировать. как раз для этого используется cpBodyCreate(): pbody. Вот уже после этого можно менять параметры тела при помощи b1.m:=...;
b1.i:=...;
b1.w:=...
...
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 26.01.2010, 13:19   #55
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Попробую разъяснить:
Вся информация о телах и формах (тела и формы это разыне вещи, это понятно?) chipmunk содержится в типах: PShape для формы и PBody для тела. Это указатели на области памяти, изначально они не на что не ссылаются. При их создании специальными коммандами (cpBodyCreate,cpShapeCreate) выделяется память под них, проводятся инициализации и результат сохраняется в внутреннем массиве чипманка, а также передается как результат функции нам. Обработка и отрисовка тел происходит через внутренний массив способом (используется Prev/Next) , который я приводил в своем предидущем сообщении. Чтобы манипулировать с каким-либо конкретным объектом при создании на него надо сохранить указатель который возвращается при создании, и потом через указатель использовать и изменять его параметры.
Пример:
Код:
var
MyBody:PBody; //ГЛОБАЛЬНЫЙ указатель на тело
MyShape:PShape;//ГЛОБАЛЬНЫЙ указатель на форму

Procedure CreateMyBody;
begin
  //MyBody - результат ф-ции cpBodyCreate и хранит указатель на тело
  MyBody:= cpBodyCreate(1, cpMomentForCircle(1, 0.0, 15, cpv(0, 0)));
  MyBody.p:= cpv(100,100);
  //MyShape - результат ф-ции cpCircleShapeCreate и хранит указатель на форму
  MyShape:= cpCircleShapeCreate(wheel, 15, cpv(0, 0));
  //через сохраненный указатель меняем параметры тела.
  MyShape.e:= 0.0;
  MyShape.u:= 0.8;
  MyShape.group:= 1;
  End;
//мы и далее можем использовать указатели для изменения параметров тела, например придадим ему ускорение:
MyBody.v:=cpv(10,0);
Если бы указатели были локальными (как в демках) то они бы перестали существовать сразу прсле окончания работы процедуры:
Код:
Procedure CreateMyBody;
var
MyBody:PBody; //ЛОКАЛЬНЫЙ указатель на тело
MyShape:PShape;//ЛОКАЛЬНЫЙ указатель на форму
begin
  //MyBody - результат ф-ции cpBodyCreate и хранит указатель на тело
  MyBody:= cpBodyCreate(1, cpMomentForCircle(1, 0.0, 15, cpv(0, 0)));
  MyBody.p:= cpv(100,100);
  //MyShape - результат ф-ции cpCircleShapeCreate и хранит указатель на форму
  MyShape:= cpCircleShapeCreate(wheel, 15, cpv(0, 0));
  //через сохраненный указатель меняем параметры тела.
  MyShape.e:= 0.0;
  MyShape.u:= 0.8;
  MyShape.group:= 1;
 end;
//указатели потеряны, действия над телом не провести, но при этом тело все еще есть в чипманке,
//оно обрабатывается и рисуется через внутренний массив.

Последний раз редактировалось Beermonza; 26.01.2010 в 15:06.
Вадим Буренков вне форума Ответить с цитированием
Старый 27.01.2010, 14:51   #56
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

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

Цитата:
Только текстура привязана к экрану, и тела подвижны относительно неё. Т.е. она не вращается с телом, не двигается.
Поподробней опиши проблему.
Вадим Буренков вне форума Ответить с цитированием
Старый 27.01.2010, 18:14   #58
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Исполняемый файл
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 27.01.2010, 18:15   #59
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Исполняемый файл
Вложения
Тип файла: rar demos.rar (33.0 Кб, 20 просмотров)
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 27.01.2010, 18:20   #60
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

тут одного экзешника мало чтоб посмотреть. Нужны все dll-ки и текстуры
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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