Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 01.02.2009, 20:22   #11
mutabor
Телепат с дипломом
Профессионал
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,928
Репутация: 1570

icq: 401708834
По умолчанию

Добавь только обработку столкновений и исправь обработку выхода за края
Вложения
Тип файла: zip Arcanoid.zip (4.2 Кб, 160 просмотров)
mutabor вне форума   Ответить с цитированием
Старый 01.02.2009, 20:28   #12
Scabby
Пользователь
 
Аватар для Scabby
 
Регистрация: 20.01.2009
Сообщений: 26
Репутация: 10
По умолчанию

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

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

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

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

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

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

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

icq: 401708834
По умолчанию

Вот, еще немного допилил (сделано на базе версии от bag)
Вложения
Тип файла: zip Arc2.zip (4.9 Кб, 171 просмотров)

Последний раз редактировалось mutabor; 03.02.2009 в 05:04.
mutabor вне форума   Ответить с цитированием
Старый 03.02.2009, 14:05   #17
SNUPY
Участник клуба
 
Регистрация: 15.02.2008
Адрес: Казань
Сообщений: 621
Репутация: 268

icq: 414710576
По умолчанию

Извините пожалуйста ^_^. Мне просто лень вчитываться в код ^_^... Я насчет сталконовения (просто когда-то что то подобное делал) вы делали проверку на столконовение путем проверки положения шаров до (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, 19:08   #18
bag
Форумчанин
 
Регистрация: 20.06.2008
Адрес: Россия
Сообщений: 95
Репутация: 30
По умолчанию

Цитата:
Сообщение от 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, 23:21   #19
SNUPY
Участник клуба
 
Регистрация: 15.02.2008
Адрес: Казань
Сообщений: 621
Репутация: 268

icq: 414710576
По умолчанию

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

Цитата:
Сообщение от 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 в 08:53.
bag вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


13:46.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru