Skocz do zawartości
Chell

Temat zbiorczy na drobnostki

Rekomendowane odpowiedzi

Ponieważ używanie innych wbudowanych hitboxów niż prostokątów to głupota w przypadku GM. Elipsa jest tak wolna jak pixel-perfect ponieważ jest obliczana pixel perfect.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Top down.Zależy mi na tym żeby kamera obracała się płynnie razem z obrotem postaci, tak jak np.

 

 

Póki co mam coś takiego:

 

Step:

 

GML
//plynny obrot postaci za myszka - dziala tak jak powinno

var pd = point_direction(x, y, mouse_x, mouse_y);

var dd = angle_difference(image_angle, pd)

var ob =6

image_angle -= min(abs(dd),ob) * sign(dd);

direction=image_angle

 

//obrot view//

var an = image_angle - 90;

if (mouse.x!=mouse.xprevious){

view_angle[0] = -an; }

 

Zeby uniknąć nieustannych obrotów nawet kiedy myszka sie nie rusza stworzylem obiekt mouse podazajacy za ruchem myszy.

 

Ogolny efekt jest beznadziejny, ekran lata non stop na boki, pelen chaos-jak uda sie zatrzymac myszke w punkcie to spokoj, najlzejszy ruch od razu lata ekran jak opętany- w niczym to nie przypomina efektu z Take No Prisioners ;p

Za płynność obrotu odpowiada "ob" ale mniejszy zamula ruchy totalnie,a wyzszy to juz w ogole epilepsja?

 

Jakies propozycje?Moze ktos zna jakis system kamer z GM marketu (nawet platny) ktory by oferowal taka funkcje?Probowalem z marketu Views2.0 ale nie sprawdza sie

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

1. czy to na pewno jest obracane myszką?

2. jeśli tak - to wydaje mi sie, ze tutaj po ruszeniu myszką wraca się ją na pozycję połowy okna, dlatego nie skacze jak nie ruszasz, tak samo jak w przykładach FPSów w GM

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wymyśliłem sposób na obejście skoków- image_angle gracza (wg kóre ustawia się view_angle) podąża nie za pozycją kursora a za obiektem "mouse"-które to z kolei porusza się w kierunku kursora

 

GML
xx=mouse_x

yy=mouse_y

 

mp_linear_step(xx,yy ,16,0)

 

Daje to całkiem satysfakcjonującą płynność obrotu- ALE w momencie kiedy gracz znajdzie się za blisko obiektu "mouse" to zaczyna się wirowanie obrazu i chaos.Więc tutaj pytanie - jak zrobić żeby obiekt "mouse" nigdy nie zbliżył się do gracza bliżej niż określona odległość-ale równocześnie poruszał się w kierunku kursora.Zapewne najlepsza byłaby forma orbitowania,ale lenghtdiry to dla mnie koszmar.Potrafię zrobić obiekt który jest w stałym miejscu w kole ale żeby z tej pozycji poruszać się do punktu to już gorzej

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Z pamięci piszę

 

GML
xx=mouse_x

yy=mouse_y

 

if point_distance(xx,yy,x,y) > 10 //przykladowa wartosc 10px

{

mp_linear_step(xx,yy ,16,0)

}

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ja polecę jeszcze inny sposób (to co gnysek pisał aporopos 3D).

 

GML (create)
xcenter=window_get_width()/2

 

GML (step)
direction+=mouse_x-xcenter

display_mouse_set(xcenter,window_get_height()/2)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dodaj czcionke do systemu, wybierz w GMie czcionke z listy(wymaga restartu gm jezeli zainstalowales w trakcie dzialania programu)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Jak tego użyć Threef - do jakiego obiektu ten kod ?Jak to działa?

Jakiś jeden obiekt za to odpowiada. Może być to twój gracz. zasada jest taka że to co step resetuje ci pozycję myszki na środek ekranu. A ty ruszając myszką możesz sprawdzić odległość o jaką ruszyłeś. Potem znów pozycja będzie zresetowana.

 

Tylko nie jestem pewien czy to działa. Może trzeba było to inaczej zrobić. Tak czy inaczej to jest cały pomysł.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

mam 2 pytania

1. Jak ustawić w roomie czy coś ma być przed czymś a coś za czymś poza tym, że dodawać w pewnej kolejności. np na koniec chcę dodać coś co ma być na wierzchu ?

2. Jak zrobić obiekt który w roomie o większych rozmiarach np. 10800 na 720 obiekt którego widzimy cały czas np u góry ekranu?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
mam 2 pytania

1. Jak ustawić w roomie czy coś ma być przed czymś a coś za czymś poza tym, że dodawać w pewnej kolejności. np na koniec chcę dodać coś co ma być na wierzchu ?

2. Jak zrobić obiekt który w roomie o większych rozmiarach np. 10800 na 720 obiekt którego widzimy cały czas np u góry ekranu?

1.W twoim obj masz depth,do obj który ma być na wierzchu wpisz -1

2. Masz do dyspozycji takie coś

GML
room_width;

room_height;

lub

GML
view_xview;

view_yview;

x

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jak zablokować możliwość obracania image_angle w danym zakresie? Teoretycznie mam na myśli pełen obrót 0-360 ale z jakiegoś powodu liczy mi obroty bez powrotu do 0.W lewo od 0 idzie w minus a w prawo liczy powyżej 360- przez co wiele elementów mi wariuje..

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

GML
image_angle=(image_angle+360) mod 360

Na początku step. Przed wszystkimi obliczeniami.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Czemu niby miałoby działać w jedną stronę? bug czy jakiś dziwny design?

 

90 mod 360 = 90

-90 mod 360 = -90

Tak powinno działać.

 

Jak ktoś nie chce ujemnych to powinien ręcznie konwertować na dodatni kąt bo kod threefa się wyłoży jeśli kąt przeskoczy poniżej -360

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie wyłoży aż tak. Gdy jakimś cudem image_angle zostanie odjęte od na przykład 1000 to w pierwszym step doda 360, w drugim doda 360, w trzecim też aż dojdzie do plusowych. Zakładam że autor sobie obraca image_angle sam a potem próbuje to porównywać jakoś do czegoś. Stąd ta potrzeba.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jak zrobić żeby myszka mogła poruszać się tylko w określonym,zamkniętym regionie?

 

 

edit.

Ogarnąłem.Może komuś się kiedyś przyda:

 

GML
window_mouse_set(clamp(window_mouse_get_x(),300,window_get_width()-300),clamp(window_mouse_get_y(),200,window_get_height()-500))

 

oczywiście tutaj już przykład danego limitu

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Mam problem przy kolizji ze ścianą (Top down)

 

Kolizja

 

GML
//Basic collision

if (other.collision=true){

//Set up vars

var a,xoff,yoff,om,mm,mag;

 

a = point_direction(x, y, other.x, other.y); //Get the direction from the colliding object

xoff = lengthdir_x(1, a); //Get the offset vector

yoff = lengthdir_y(1, a);

om = other.mass / mass; //start the fake "physics mass" calculations

mm = mass / other.mass;

mag = sqrt((om * om) + (mm * mm));

om /= mag;

mm /= mag;

 

//Move out of collision

while (place_meeting(x, y, other))

{

x -= xoff * om; //Move the instance out of collision- ODSUWANIE SIE POSTACI-SLIZG

y -= yoff * om;

 

} }

 

I o ile swietnie sie to sprawdza z poruszajacymi obiektami to ze sciana jest straszne slizganie, a jezeli obiekt jest powiekszony to zderzenie np ze srodkiem ślizga postac bardzo mocno w bok.Jak ma sie zmienic zaznaczona przeze mnie czesc zeby uniknac slizgania i wywolac bardziec naturalna kolizje?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Mam koordynaty konkretnego obiektu, i chcę na niego przesunąć mysz. Ktoś wie jak to zrobić?

 

(Używam view)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

mouse_x = obiekt.x

mouse_y = obiekt.y

 

nie zadziala?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×