Skocz do zawartości

Zablokowane Precyzyjne i szybkie namierzanie najblizszego obiektu


Rekomendowane odpowiedzi

Nie uwazam zebysmy podawali tutaj lek na AIDS.

Ty chyba na prawdę nie masz mózgu.

 

Uwazasz ze zrobisz to lepiej? zrob! Nam nic do tego

Patrz 2 linijki wyżej. Uważasz, że się uczysz(Uczac sie przy okazji!!!.), a jednak kiedy ktoś podsuwa ci lepsze rozwiązanie, atakujesz go i mówisz o "innowacji".

To tak jakbyś zbudował auto, które żre 100litrów benzyny na 100km i rozpędzało się do 20km/h i trwał w przekonaniu, że jest najlepsze, bo INNOWACYJNE.

 

Nie robimy jakiejs tysiac piecsetnej 2d topdown strzelanki tak samo wygladajacej jak tysiac czterysta czterdziesta dziewiata

Ciekawe, że piszesz o tym, wstawiając the grid na gmclan

 

 

e: tak ogólnie, to idź się powieś taxi.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 64
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Top użytkownicy w tym temacie

Czytaj karolo.

Napisalismy tutaj szybki sposob namierzania najblizszego obiektu bez uzycia collision_line, bo takie mielismy zadanie.

A teraz, ty, twoj guru, czy ktokolwiek inny z forum zrob to lepiej niz my!!!

z naciskiem na LEPIEJ....

Okej, znamy twoje umiejetnosci wiec ty mozesz zrobic to nawet nieco gorzej, akceptujemy to.

Wiec zrob, a potem wroc i sie pochwal.

Pozniej mozesz nas krytykowac.

(znowu z naciskiem na POZNIEJ)

Odnośnik do komentarza
Udostępnij na innych stronach

Dobrze ediepl, napisz i jutro porownamy kod. Dzis go nie damy zeby kazdy mial inne rozwiazanie i rowne szanse.

Mam nadzieje ze nie bedziesz sam. Moze przy okazji urodzi sie jakies naprawde lepsze i szybsze rozwiazanie.

Pozdr.

Odnośnik do komentarza
Udostępnij na innych stronach

Stałem za wami (jak za każdym nowym na forum) od OxGC5. Możesz się zapytać taxi_driver'a że wytłumaczyłem mu sposób w jaki oceniałem gry na konkurs... a jego odpowiedzą był chamski post, obrażanie innych użytkowników, administracji, arogancja i kilkudniowa kłótnia. A ja (tak samo jak teraz) próbowałem podejść do wszystkiego spokojnie i rozwiązać to pokojowo.

 

Cóż znów wysuwasz argument że nie widziałeś żądnej dobrej gry ode mnie. Problem jest chyba w moim charakterze... ponieważ WSTYDZĘ SIĘ ZASYPYWAĆ FORUM GÓWNEM. Oto chyba pierwsza rzecz jaką wrzuciłem na GMClan, bo uznałem że włożyłem w to wystarczająco dużo pracy (jak na 24 godzinny jam) by komuś pokazać. Przez rok sam pracowałem nad przeglądarkową grą z losowymi przeciwnikami, craftingiem, eventami nocy i dnia, pvp w postaci areny gdzie gracz z największą liczbą wygranych dostawał pod koniec tygodnia nagrodę (cron), tawernę (chat) z 'karczmarzem botem' i mapą zapisaną w postaci 43700 rekordów mySQL. Najlepsze jest to że nikt na GMClanie tego nigdy nie widział... bo nie byłem z tego dostatecznie zadowolony. Za kolejny przykład mogę podać moją grę na OxGC4, gdzie chyba Uzjel podczas ZTG w Łodzi powiedział mi w prosto w oczy że widział przykład portali w grze top-down... a ja nie broniłem się zawzięcie że to mój pomysł, że ja wszystko sam zrobiłem i że to ja powinienem wygrać, chociaż to był mój pomysł. I może na koniec mój przykład cofania czasu? Ktoś wspomniał o nowatorstwie? Czymś takim posłużył się Jonathan Blow twórca gry Braid (choć pewnie też nie był pierwszy!). Ja na postawie obserwacji i znajomości podstawowych struktur odwzorowałem ten pomysł. Nie w najlepszy, najefektowniejszy, jedyny poprawny sposób (widzisz tu coś znajomego?), a przedstawiłem tylko zagadnienie w sposób aby każdy mógł go samemu odtworzyć... i uwaga... czegoś się nauczyć.

 

Nie wiem po co ja to wszystko piszę skoro i tak masz 'swoją rację'. Tak czy inaczej czekam na kod bo też chcę się spróbować. I mam już nawet jakiś pomysł.

 

 

Ty chyba na prawdę nie masz mózgu.

(...)

e: tak ogólnie, to idź się powieś taxi.

A @karolo320 mogłeś się już z tym powstrzymać :(

 

Ciekawe, że piszesz o tym, wstawiając the grid na gmclan
Chciaż za to już masz :lubieto:
Odnośnik do komentarza
Udostępnij na innych stronach

wrzucone podobne do ediego

 

https://gmclan.org/up7221_12_kolizja_karol.html

 

 

Bez_tytu_u2ef27.png

Moje szybsze chyba. Ogólnie, to rozwiązanie ediego jest coraz wolniejsze na większym dystansie.

były odpalone oba naraz

 

e2:wrzucam z 11 obiektami tak jak u ediego i bez tej brzydkiej kulki na koncu

https://gmclan.org/up7221_12_kolizja_karolb01de.html

Odnośnik do komentarza
Udostępnij na innych stronach

Dopiero teraz odpisuje- coz, mnostwo zajec.

-Czego sie spodziewalem:

Spodziewalem sie po was wyscigu na wydajnosc algorytmu, oraz walki o fps

-co otrzymalem:

Ktos napisal o 3 programach? ja widze tylko ediepl, wiec moge mowic tylko o nim.

Nie podoba mi sie oparcie calego pomyslu na pomiarze katowym, dlaczego? dlatego ze jest niedokladny.

Rozna rozdzielczosc ekranu moze powodowac niedokladnosc obliczen.

Okej, Teraz my :)

My oparlismy nasz pomysl na rysowaniu linii a0,b0,a1,b1 na obliczeniach bez zaokraglania. Dzieki temu uzyskalismy prosty promien wodzacy, sprawdzany w szybkim, dokladnym i uniwersalnym algorytmie.

... na koniec okazalo sie ze zastosowalismy po prostu zwykly algorytm Bresenhama, czyli doszlismy do czegos co juz ktos wymyslil przed nami :)

Czy jest szybsza metoda? Razem z taxim mielismy nadzieje ze nam pokazecie cos ciekawego, a dostalismy.... :( typowy szit.

Odnośnik do komentarza
Udostępnij na innych stronach

mogę zdekompilować "wasz"(masz rozdwojenie jaźni, czy co?) projekt w celu porównania prac?

 

EDIT

 

nie czekając na zgodę, bo i po co, zrobiłem to.

Wszystkie projekty przeniosłem do gm8.1, dodałem 2 zmienne wyliczające średnią fps i mając odpalone okienko z projektem i GM poczekałem 30sekund z każdym. Oto wyniki:

 

Taxi, T-800, ich grafik:

taxi.png

średnia 589,93 fps

 

Ja (właściwie to platyna, bo jego poradnik mnie tego nauczył jakieś pół roku temu)

karol.png

1350.69 średnio fps

 

edie i jego sposób bez collision_line

edie.png

1007.41 średnio fps

 

jak widać, t-800, twój sposób jest najgorszy z powyższych, i to sporo.

Jeśli chcesz wytoczyć sprawę do sądu, to twoich grafik nie wykorzystam, obiecuję ^^

a kod to ogólnodostępny algorytm, jak sam pokazałeś

 

EDIT 3, tak usunąłem obiekt dust i linijkę tworzącą go. Bez tego przy 600fps co sekundę się bugowało, lol

Odnośnik do komentarza
Udostępnij na innych stronach

mogę zdekompilować "wasz"(masz rozdwojenie jaźni, czy co?) projekt w celu porównania prac?

 

Karolo juz zamieszczam kod:

 

GML
CREATE

x0=320

y0=479

x1=0

y1=0

xline=x0

yline=y0

 

i=4

identyfikator=0

 

znak=""

znak1=""

 

draw_set_color(c_red)

 

GML
STEP

var _max_x, _max_y, _i, _j, _d, _z;

_i=1

_j=1

_z=0

xline=x0

yline=y0

identyfikator=0

x1=mouse_x

y1=mouse_y

 

_max_x=x1-x0

_max_y=y1-y0

 

if abs(_max_x)>abs(_max_y) then

{

if _max_x<0 then _i=-1

_d=_max_y/_max_x

if _max_x<0 then _d*=-1

if _d<0 then _j=-1

repeat(abs(_max_x))

{

xline+=_i

_z+=_d

if abs(_z)>1 then

{

yline+=_j

_z-=_j

}

if collision_point(xline,yline,all,true,true)>0 then

{

identyfikator=collision_point(xline,yline,all,true,true)

break;

}

}

}else

{

if _max_y<0 then _i=-1

_d=_max_x/_max_y

if _max_y<0 then _d*=-1

if _d<0 then _j=-1

repeat (abs(_max_y))

{

yline+=_i

_z+=_d

if abs(_z)>1 then

{

xline+=_j

_z-=_j

}

if collision_point(xline,yline,all,true,true)>0 then

{

identyfikator=collision_point(xline,yline,all,true,true)

break;

}

}

}

if identyfikator>0 then

{

znak="contact id: "+string(identyfikator)

znak1=" x: "+string(xline)+" y: "+string(yline)

}

 

GML
DRAW

draw_line(x0,y0,xline,yline)

draw_text(0,10,znak)

draw_text(0,30,znak1)

draw_text(0,50,string(fps))

 

Enjoy

 

//Edit

Karolo wystarczylo chwile poczekac, a nie wlamywac sie.

Na przyszlosc sam postaraj sie cos przyswoic, i nauczyc a nie dekompiluj nie swoje pomysly.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if collision_point(xline,yline,all,true,true)>0 then

{

identyfikator=collision_point(xline,yline,all,true,true)

break;

}

 

GML
var _kolizja;

_kolizja=collision_point(xline,yline,all,true,true)

if(_kolizja){

identyfikator=_kolizja

}

 

To samo, a collision_point wykonywane tylko raz. szybsze :)

Odnośnik do komentarza
Udostępnij na innych stronach

mogę zdekompilować "wasz"(masz rozdwojenie jaźni, czy co?) projekt w celu porównania prac?

Karolo wystarczylo chwile poczekac, a nie wlamywac sie.

Na przyszlosc sam postaraj sie cos przyswoic, i nauczyc a nie dekompiluj nie swoje pomysly.

 

Mam dla was pomysł. Obfuskujcie kod :D

Odnośnik do komentarza
Udostępnij na innych stronach

Racja, olej moją pomoc i rób dalej źle :(

 

twój kod:

GML
_max_x=x1-x0

_max_y=y1-y0

 

if abs(_max_x)>abs(_max_y) then{

if _max_x<0 then _i=-1

_d=_max_y/_max_x

if _max_x<0 then _d*=-1

if _d<0 then _j=-1

repeat(abs(_max_x)){

xline+=_i

_z+=_d

if abs(_z)>1 then

{

yline+=_j

_z-=_j

}

if collision_point(xline,yline,all,true,true)>0 then

{

identyfikator=collision_point(xline,yline,all,true,true)

break;

}

}

}else

{

if _max_y<0 then _i=-1

_d=_max_x/_max_y

if _max_y<0 then _d*=-1

if _d<0 then _j=-1

repeat (abs(_max_y))

{

yline+=_i

_z+=_d

if abs(_z)>1 then

{

xline+=_j

_z-=_j

}

if collision_point(xline,yline,all,true,true)>0 then

{

identyfikator=collision_point(xline,yline,all,true,true)

break;

}

}

}

 

dodałem jedną zmienna (true/false)

GML
//zamiana na tablice (w create)

line[0]=xline

line[1]=yline

 

//zamiana na tablice

_max[0]=x1-x0 //x

_max[1]=y1-y0 //y

if abs(_max[0])>abs(_max[1]){

zamiana=0

}else

zamiana=1

if _max[zamiana]<0 then _i=-1

_d=_max[!zamiana]/_max[zamiana]

if _max[zamiana]<0 then _d*=-1

if _d<0 then _j=-1

repeat(abs(_max[zamiana])){

line[zamiana]+=_i

_z+=_d

if abs(_z)>1 then {

line[!zamiana]+=_j

_z-=_j

}

var _kolizja;

_kolizja=collision_point(xline,yline,all,true,true)

if(_kolizja){

identyfikator=_kolizja

}

ale to juz kosmetyczne

Patrz, o ile mniej kodu. A robi to samo

urąbałem wszystkie spacje i upchnąłem łądnie 9->5,5

Odnośnik do komentarza
Udostępnij na innych stronach

Racja, olej moją pomoc i rób dalej źle :(

 

Karolo320, nie olewam twojej pomocy, jakbym olewal pomoc to bym sie nie rozwijal.

Jednak nie zmuszaj mnie bym uwierzyl ze dodanie dodatkowej petli, zmiennej array ( bo po co list) przyspieszy moj program.

Z checia przyjmuje wskazowki, ale tylko wtedy gdy sa sensowne.

Jakbym chcial byc mistrzem miniaturyzacji to bym sie przeniosl do Japonii :)

 

Jak narazie nic lepszego niz moj program tu nie widzialem, a szkoda bo mialem nadzieje ze mnie czyms zaskoczycie.

 

Ps: zamiast pisac zmienna true/false wystarczy poprostu napisac flage.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja? To się chyba do Ciebie odnosi. ;)

Jak narazie nic lepszego niz moj program tu nie widzialem, a szkoda bo mialem nadzieje ze mnie czyms zaskoczycie

Twój skrypt działa najwolniej i jest w najdłuższej formie napisany, a skrypty Ediego i Karola są dwa razy szybsze i krócej napisane. Więc nie odwracaj ogona kotem, że nie ma lepszego skryptu od Twojego.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja? To się chyba do Ciebie odnosi. ;)

nie odwracaj ogona kotem

 

Przede wszystkim mowi sie " nie odwracaj kota ogonem", reszta mojego tlumaczenia bedzie pewenie nie zrozumiala dla ciebie, ale...

Jedyny algorytm spelniajacy prawidlowo warunki, to... nasz algorytm.

Rysujac linie o dlugosci 3 piksele lub 300 pikseli lub 30000 pikseli jedynie nasz algorytm sie sprawdza.

Z racji uzupelnienia do jednego mozemy miec odchylenia od x1,y1 do jednego punktu i nie zalezy to w ogole od dlugosci linii, bo linia rysowana naszym algorytmem nawet o dlugosci 10000 pikseli moze miec maksymalne odchylenie jeden (!) piksel.

To co pokazal Ediepl ( czy ediepl to bedziom?) notuje odchylenie rosnace kwadratowo (chyba).

Z kolei porownanie wydajnosci pokazane przez karolo320 mogl pokazac tylko karolo320 a uwierzyc w to tylko bedziom ( ruchome obiekty, rotujace, nieustannie pracujacy promien wodzacy porownany do jednego nieruchomego objektu itd itp)

Inna sprawa ze nie ma co porownywac.

Threef nie pokazal nic, moze to i dobrze ;)

 

Dobranoc.

 

Ps: Jutro postaram sie wyjasnic ci to klockami ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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

×
×
  • Dodaj nową pozycję...