Skocz do zawartości

gra w bilard po raz n-ty


Rekomendowane odpowiedzi

Hej!

zajmuje sie gm od niedawna i jeszcze wszystko dla mnie jest takie dziwne:)

zajęłam się problem gry w bilard. wiem ze ten temat był już wielokrotnie poruszany i pewnie jest już nim przesycone to forum, ale niestety nie znalazłam na dręczący mnie problem odpowiedzi, a mianowicie przechodząc do rzeczy:

gra w bilard. jedna bila uderza w druga. jeśli zakładam ze nie ma tarcia, odbicie jest idealnie sprężyste itp to bile powinny sie zamienić prędkościami.

realizuje to ten sposób ze w kolizji dla bili 1 wklepuje linijkę

speed=bila2.speed;

i odpowiednio dla bili 2

speed=bila1.speed;

 

Pierwszym testem jest to ze bila nr 1 uderza w nieruchoma bile 2. w wyniku bila 2 powinna miec predkosc bili 1 a bila 1 powinna miec predkosc bili 2 czyli nie miec predkosci.

niestety program nie przechodzi tej próby.

 

wiem ze napewno cos zle zrobilam okreslajac bil w czasie kolizji. niestety nie wiem jak to porpawic

bardzo proszę o pomoc, jakiś przykład cokolwiek.

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem ci taki przykład ale jest za prosty żeby go dać na foróm forum podam kody gdzie co i jak:

W bila1:

Global left button:

GML
direction=point_direction(x,y,mouse_x,mouse_y)//idzie w miejsce gdzie kliknołeś

speed=6//prędkość poruszania

Od moderatora: kliknołeś kliknąłeś

W bila2:

create:

GML
speed=0

w kolizji z bila1:

GML
var s1, s2;

s1=bila1.speed;

s2=bila2.speed;

bila1.speed=s2;

bila2.speed=s1;

i klocek na odbijanie się.

I zaznacz solid wszystkim objektom obiektom.

Przepraszam za ortografie itp.

 

3 błędy ortograficzne, warn.

Marmot.

Odnośnik do komentarza
Udostępnij na innych stronach

dzięki bardzo!

działa teraz idealnie po fizycznemu kiedy bila 1 uderze w bile 2.:):)

mam problem teraz z tym ze po tym jak uderzona bila 2 odbija sie od ścianki i wraca i powinna uderzac w bile nr 1.

Niestety traktuje ją jako przeźroczystą. Rozumiem ze w bili 1 trzeba tez dac warunek na kolizje z bila 2. Próbowałam dać ten sam który ma bila 2- zeby bile znowu sie zamieniały prędkościami ale niestety nie tak to trzeba zrobić.:(

pozdrawiam i dzięki za pomoc

Odnośnik do komentarza
Udostępnij na innych stronach

dzięki bardzo!

działa teraz idealnie po fizycznemu kiedy bila 1 uderze w bile 2.:):)

mam problem teraz z tym ze po tym jak uderzona bila 2 odbija sie od ścianki i wraca i powinna uderzac w bile nr 1.

Niestety traktuje ją jako przeźroczystą. Rozumiem ze w bili 1 trzeba tez dac warunek na kolizje z bila 2. Próbowałam dać ten sam który ma bila 2- zeby bile znowu sie zamieniały prędkościami ale niestety nie tak to trzeba zrobić.:(

pozdrawiam i dzięki za pomoc

Hmm. Po pierwsze nie do końca po fizycznemu, bo przy zderzeniu powinno się inaczej dziać.

Aby to osiągnąć należy w kuli1 w evencie kolizji z kulą2 dać:

GML
other.speed=speed;

speed=0;

Na dodatek ten kod zadziała też w kuli2 w evencie kolizji z kulą1.

W ten sposób żadna żadnej nie potraktuje jako przezroczystą, a na dodatek nie złamiemy prawa zachowania pędu(chyba tego prawa).

Odnośnik do komentarza
Udostępnij na innych stronach

wiec tak zamieszczam linka do tego projektu

http://student.agh.edu.pl/~mokrzyc/gml/

generalnie chodzi mi o to żeby przy zderzeniu- zderzające sie kule "zamieniały się" prędkościami.

na razie działa mi tylko pierwsze zderzeniu kuli białej z czerwoną. (dzięki kodzie, który zaproponował warcrawt) czerwona kula odbijając się od ściany traktuje białą jak przeźroczystą, a powinna się z nią zderzyć i znowu powinny się zamienić prędkościami.

na planszy znajduje się też fioletowa kula, która na razie tez nie zachowuję się jak powinna tzn przy zderzeniu z tą kula dowolna inna kula również powinny się wymienić prędkościami.

próbowałam również z tego co pisał RaistlinBlackRobe ale niestety w ogóle mi się wtedy bile nie odbijały. pewnie porostu robie coś nie tak tylko nie wiem co:)

nie wiem tylko dlaczego:

speed=0;

a jeśli przed zderzeniem kule poruszały się? wtedy żadna z kul nie będzie miała po zderzeniu prędkości równej 0.

pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

wiec tak zamieszczam linka do tego projektu

http://student.agh.edu.pl/~mokrzyc/gml/

generalnie chodzi mi o to żeby przy zderzeniu- zderzające sie kule "zamieniały się" prędkościami.

na razie działa mi tylko pierwsze zderzeniu kuli białej z czerwoną. (dzięki kodzie, który zaproponował warcrawt) czerwona kula odbijając się od ściany traktuje białą jak przeźroczystą, a powinna się z nią zderzyć i znowu powinny się zamienić prędkościami.

na planszy znajduje się też fioletowa kula, która na razie tez nie zachowuję się jak powinna tzn przy zderzeniu z tą kula dowolna inna kula również powinny się wymienić prędkościami.

próbowałam również z tego co pisał RaistlinBlackRobe ale niestety w ogóle mi się wtedy bile nie odbijały. pewnie porostu robie coś nie tak tylko nie wiem co:)

nie wiem tylko dlaczego:

speed=0;

a jeśli przed zderzeniem kule poruszały się? wtedy żadna z kul nie będzie miała po zderzeniu prędkości równej 0.

pozdrawiam

Polega to na tym, że jeśli Objekt1 uderza w Objekt2 to Objekt2 przyjmuje wartość, zwrot oraz kierunek prędkości Objektu1, a Objekt1 traci dynamikę. I tutaj faktem jest, że lepiej włożyć ten kod tylko do jednego objektu(tego który jest częściej w natarciu). Teraz pracuję nad przykładem bilarda i może niedługo go wsadzę.

Odnośnik do komentarza
Udostępnij na innych stronach

yyy... A te piłki to tak w nieskończoność mają mieć stałe V???

może by tak:

Create:

GML
alarm[0]=room_speed*0.5

 

alarm0:

 

GML
speed-=0.5

alarm[0]=roomspeed*0.5

 

step:

GML
if speed<0

{speed=0}

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...