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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 02:15   #1
Virus191288
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 59
По умолчанию delphiX и куча одинаковых объектов

решил написать небольшую игру..... нужно создать примерно 50-100 абсолютно одинаковы объектов! сумел создать так
Код:
 for i:=0 to 50 do begin
    bricks[i]:=TBrick.Create(DXSpriteEngine1.Engine);
    bricks[i].Image:= form1.DxImageList1.items.find('vrag');
    bricks[i].x:=x;
    bricks[i].y:=y;
    bricks[i].visible:=true;
    bricks[i].width:=bricks[i].image.Width;
    bricks[i].height:=bricks[i].image.height;
    x:=x+50;
    if x>form1.DXDraw1.SurfaceWidth-30 then begin
      y:=y+40;
      x:=10;
    end;
    end;
но при столкновении 2 объектов вылетает ошибка так вот может кто нибудь написать пример создания кучи объектов и их уничтожения при определенном условии.... или помочь доделать мой???
Virus191288 вне форума Ответить с цитированием
Старый 23.01.2010, 03:46   #2
Virus191288
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 59
По умолчанию

вот разобрался как можно удалить
Код:
procedure TBoll.DoCollision(Sprite: Tsprite; var Done: Boolean);
begin
  if Sprite is TBrick then begin
       TBrick(Sprite).Dead;
     end;
  end;

end;
появился другой вопрос... как можно определить куда ударил объект? я пишу арканоид и мне нужно как то узнать куда ударился шар... то есть если вверх то то шар должен лететь вверх если ударил вниз то и полететь должен вниз и тп.... кто нибудь знает?
Virus191288 вне форума Ответить с цитированием
Старый 23.01.2010, 12:28   #3
Virus191288
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 59
По умолчанию

кто нибудь может помочь?
Virus191288 вне форума Ответить с цитированием
Старый 23.01.2010, 12:36   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Координаты. Если совпадают с другим объектом, то зеркалируйте вектор скорости.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.01.2010, 14:34   #5
Virus191288
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 59
По умолчанию

Alex Cones это я понял еще когда не начал писат... но почемуто при попытке
Код:
if (w.x-8>sprite.X) and (sprite.X+43<w.x)and (w.y>19) then dvigY:=1;//w.x и w.y это координаты шара по идее...
код не срабатывает
Virus191288 вне форума Ответить с цитированием
Старый 23.01.2010, 15:38   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Тут смотрели?
http://programmersforum.ru/showthrea...E0%ED%EE%E8%E4
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 23.01.2010, 16:18   #7
Virus191288
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 59
По умолчанию

написал так
Код:
if (x1-4<x2) and (x1+34+4>x2) and (y1+20+8>y2) then dvigY:=1;
if (x1-4<x2) and (x1+34+4>x2) and (y1-8>y2)    then dvigY:=0;

if (y1-4<y2) and (y1+20+4>y2) and (x1+34+8>x2) then dvigX:=1;
if (y1-4<y2) and (y1+20+4>y2) and (x1-8>x2)    then dvigX:=0;
{x1 и y1 это кубики размеров 34х20 
 x2 и y2 это шар размером 16х16
 dvig направление движения... ниже его работа}

  If dvigX=0 then  x:=x-3;
  If dvigX=1 then  x:=x+3;
  If dvigy=0 then y:=y-3;
  If dvigy=1 then  y:=y+3;
но иногда немного не правильно срабатывает.... вместо того чтобы только влево полететь он летит влево вниз.... может кто поправит?

Последний раз редактировалось Virus191288; 23.01.2010 в 16:20.
Virus191288 вне форума Ответить с цитированием
Старый 23.01.2010, 16:33   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
If dvigX=0 then x:=x-3;
If dvigX=1 then x:=x+3;
If dvigy=0 then y:=y-3;
If dvigy=1 then y:=y+3;
Я бы сотворил нечто такое:
Код:
DX : ShortInt;
DY : ShortInt;
...
X:=X+DX; //так осуществляется движение
Y:=Y+DY;
...
DX:=-DX; //Так - отражение DX
DY:=-DY; // DY
Плюс в том, что можно будет регулировать скорость.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.01.2010, 21:04   #9
Virus191288
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 59
По умолчанию

Alex Cones я также в начале сделал... но так не всегда удобно... например когда в 2 одинаковых случаях в 1 нужно менять во 2 не нужно и это зависит от того в какую сторону летит шарик у меня достаточно поставить 0 или 1 и он в какую сторону летел в ту и полетит а тут придется еще и направление вычислять... короче я переписал и сделал так....
да и со своим вопросом тоже разобрался просто сделал так
Код:
if y2>y1+10 then dvigY:=1;
if y2<y1    then dvigY:=0;

if X2>X1+10 then dvigX:=1;
if X2<X1    then dvigX:=0;
уже в принципе играбельно но скучно.... если нужно могу выложить то что сделал....

Последний раз редактировалось Beermonza; 23.01.2010 в 22:34.
Virus191288 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связка Прогрес-бар и куча запросов не работает. ( Avorsa Microsoft Office Excel 1 22.07.2009 18:21
куча skymaster Общие вопросы Delphi 1 21.05.2009 11:38
Куча вопросов vilini Работа с сетью в Delphi 1 18.08.2008 11:56