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

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

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

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

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

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

Добавь только обработку столкновений и исправь обработку выхода за края
Вложения
Тип файла: zip Arcanoid.zip (4.2 Кб, 173 просмотров)
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 вне форума Ответить с цитированием
Старый 01.02.2009, 19:28   #12
Scabby
Пользователь
 
Аватар для Scabby
 
Регистрация: 20.01.2009
Сообщений: 26
По умолчанию

спасибо, буду мучать сейчас
Осознание того,что есть место "гдевсехорошо" даёт надежду,что ещё не все потеряно.
Scabby вне форума Ответить с цитированием
Старый 02.02.2009, 18:14   #13
Scabby
Пользователь
 
Аватар для Scabby
 
Регистрация: 20.01.2009
Сообщений: 26
По умолчанию

аррр.. возникла еще проблема..
точнее 3..

1)не могу сделать так чтобы количество шаров вводилось при запуске программы.
в коде выдает ошибку.
2)прописала столкновение шаров.ошибку не выдает, но почему-то не работает_)
3)1 шар летает в форме, а потом куда-то улетает

программка -
Вложения
Тип файла: zip arc.zip (229.9 Кб, 64 просмотров)
Осознание того,что есть место "гдевсехорошо" даёт надежду,что ещё не все потеряно.

Последний раз редактировалось Scabby; 02.02.2009 в 18:31.
Scabby вне форума Ответить с цитированием
Старый 02.02.2009, 20:57   #14
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Scabby, немного подправил твой код. Посмотри. Правда шары всеравно как-то не так отталкиваются
Вложения
Тип файла: rar arc1.rar (179.6 Кб, 79 просмотров)
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)
bag вне форума Ответить с цитированием
Старый 02.02.2009, 21:06   #15
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

У тебя алгоритм рассчитан на то, что шары сталкиваются лоб в лоб. А представь ситуацию, например, когда один шар летит от верхнего левого угла в нижний правый, а второй сверху вниз и при этом слегка зацепляет задний край первого. По твоему алгоритму они сцепятся и будут некоторое время лететь вместе, дергаясь друг относительно друга
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)
bag вне форума Ответить с цитированием
Старый 02.02.2009, 23:23   #16
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вот, еще немного допилил (сделано на базе версии от bag)
Вложения
Тип файла: zip Arc2.zip (4.9 Кб, 182 просмотров)
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; 03.02.2009 в 04:04.
mutabor вне форума Ответить с цитированием
Старый 03.02.2009, 13:05   #17
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Извините пожалуйста ^_^. Мне просто лень вчитываться в код ^_^... Я насчет сталконовения (просто когда-то что то подобное делал) вы делали проверку на столконовение путем проверки положения шаров до (x11,y11),(x12,y12), ..., (x1n,y1n) и после (x21,y11),(x22,y12), ..., (x2n,y2n) и потом проверяли на взамное пересечение отрезков [(x11,y11);(x21,y11)], [(x12,y12);(x22,y12)], ..., [(x1n,y1n);(x2n,y1n)]. Вы так делали????
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 09.02.2009, 18:08   #18
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Цитата:
Сообщение от SNUPY Посмотреть сообщение
Извините пожалуйста ^_^. Мне просто лень вчитываться в код ^_^... Я насчет сталконовения (просто когда-то что то подобное делал) вы делали проверку на столконовение путем проверки положения шаров до (x11,y11),(x12,y12), ..., (x1n,y1n) и после (x21,y11),(x22,y12), ..., (x2n,y2n) и потом проверяли на взамное пересечение отрезков [(x11,y11);(x21,y11)], [(x12,y12);(x22,y12)], ..., [(x1n,y1n);(x2n,y1n)]. Вы так делали????
Неет, мы просто находили расстояние между цетрами шаров РАССТ=КОРЕНЬ((x2-x1)^2+(y2-y1)^2), оно должно быть не меньше диаметра шара
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)
bag вне форума Ответить с цитированием
Старый 09.02.2009, 22:21   #19
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Цитата:
Неет, мы просто находили расстояние между цетрами шаров РАССТ=КОРЕНЬ((x2-x1)^2+(y2-y1)^2), оно должно быть не меньше диаметра шара
Это реинтабильно если максимальное перемешение шара за один кадр меньше радиуса шара (и то при некоторых касательных столкновения не айс ^_^)... или я не прав? =\
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 10.02.2009, 07:49   #20
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Цитата:
Сообщение от SNUPY Посмотреть сообщение
Это реинтабильно если максимальное перемешение шара за один кадр меньше радиуса шара (и то при некоторых касательных столкновения не айс ^_^)... или я не прав? =\
Не знаю насчет рентабильности, но вроде работает. Вот пример работающей (почти ) программы на паскале:
Код:
uses graph,crt;
const
  xsize=200;
  ysize=250;

function norm(a:integer):integer;
var
  a1:integer;
begin
  a1:=a mod 360;
  if a1<0 then a1:=360+a1;
  norm:=a1;
end;

function angle(x1,y1,x2,y2:integer):integer;
var
  a:integer;
begin
  if x2-x1=0 then
    if y2-y1>0 then
      a:=90
    else
      a:=270
  else
  begin
    a:=round(arctan((y2-y1)/(x2-x1))*180/PI);
    if x2-x1<0 then
      a:=a+180;
  end;
  angle:=norm(a);
end;

var
  gd,nb,r,st,i,j,k,a:integer;
  x,y,x1,y1:real;
  b:array[1..100,1..3] of integer;   {x, y, angle}
  b1:array[1..100,1..2] of integer;   {x, y}

begin
  write('num balls=');
  readln(nb);
  write('radius=');
  readln(r);
  write('step=');
  readln(st);

  gd := Detect;
  InitGraph(Gd,Gd,'e:\tp7\bgi');

  setcolor(1);
  moveto(0,0);
  lineto(xsize+1,0);
  lineto(xsize+1,ysize+1);
  lineto(0,ysize+1);
  lineto(0,0);

  randomize;
  for i:=1 to nb do
  begin
    repeat
      x:=random(xsize-1-2*r)+r;
      y:=random(ysize-1-2*r)+r;
      k:=1;
      for j:=1 to i-1 do
      begin
        if sqrt(sqr(b[j,1]-x)+sqr(b[j,2]-y))<2*r then k:=0;
      end;
    until (k=1);
    b[i,1]:=trunc(x);
    b[i,2]:=trunc(y);
    b[i,3]:=random(360);
    circle(b[i,1],b[i,2],r);
  end;

  repeat
    delay(500);
    for i:=1 to nb do
    begin
      x:=b[i,1]+cos(Pi*b[i,3]/180)*st;
      y:=b[i,2]+sin(Pi*b[i,3]/180)*st;
      b1[i,1]:=round(x);
      b1[i,2]:=round(y);
    end;

    for i:=1 to nb do
    begin
      setcolor(0);
      circle(b[i,1],b[i,2],r);
      x:=b1[i,1];
      y:=b1[i,2];
      if x<r then b[i,3]:=norm(-b[i,3]+180);
      if x>xsize-r then b[i,3]:=norm(-b[i,3]+180);
      if y<r then b[i,3]:=norm(-b[i,3]);
      if y>ysize-r then b[i,3]:=norm(-b[i,3]);
      for j:=1 to nb do
      begin
        if j=i then continue;
        if sqrt(sqr(b1[j,1]-x)+sqr(b1[j,2]-y))<=2*r then
        begin
          a:=angle(b[j,1],b[j,2],b[i,1],b[i,2]);
          b[i,3]:=norm(2*a-b[i,3]+180);
        end;
      end;
      b[i,1]:=round(b[i,1]+cos(Pi*b[i,3]/180)*st);
      b[i,2]:=round(b[i,2]+sin(Pi*b[i,3]/180)*st);
      setcolor(1);
      circle(b[i,1],b[i,2],r);
    end;
  until keypressed;
  closegraph;
end.
В программе я постарался реализовать нормальное столкновение шаров (по законам физики), летящих под произвольным углом друг к другу, а не как в программе автора темы. Конечно, глюки есть, но не такие заметные
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)

Последний раз редактировалось bag; 10.02.2009 в 07:53.
bag вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Арканоид Kostia Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 03.04.2021 21:50
Помогите с задачей на Делфи! f1n!Sh Помощь студентам 8 02.05.2008 18:28