Skocz do zawartości

Kolizje z vertexami/liniami


Markar

Rekomendowane odpowiedzi

Mam takie pytanie: czy da się zrobić kolizje z vertexami(konkretnych obiektów), lub wszystkimi liniami rysowanymi w konkretnym obiekcie? Wolałbym kolizje z liniami zroibć jeśli się da. Proszę o pomoc w zrobieniu takich kolizji. Bez ustawiania maski, bo wtedy musiał bym z góry wiedzieć jaki jest kształt narysowany z lini.

Odnośnik do komentarza
Udostępnij na innych stronach

chodzi o przeciecie z linia czy sprawdzenie przynaleznosci do jednej ze stron linii?

Pierwsze to rownanie z dwoma niewiadomymi, drugie to dot product.

Odnośnik do komentarza
Udostępnij na innych stronach

wlasnie dales sam sobie odpowiedz - collision_line() skoro ma sprawdzac kolizje obiektu z linia w innym obiekcie :)

Odnośnik do komentarza
Udostępnij na innych stronach

a kto ma je znac? przechowuj w takim razie te koordynaty (punkty) kazdej linii.

Odnośnik do komentarza
Udostępnij na innych stronach

do tablicy lub dwoch list.

 

EDT: napisz jaka sytuacje chcesz konkretnie osiagnac a pomoge Ci dobrac najlepsze rozwiazanie.

Odnośnik do komentarza
Udostępnij na innych stronach

pierw mi powiedz jak chcesz by to wygladalo, krok po kroku objasnij sytuacje, bo nie chce akcji ze dam Ci rozwiazanie ktore potem sie okaze ze jest optymalne dla zupelnie innej sytuacji. Czyli napisz co sie dzieje w grze, bo tak to stoje na rozstaju drog nie wiedzac ktora isc.

Moje zgadywanie: Kolizje typu gry LocoRoco?

Odnośnik do komentarza
Udostępnij na innych stronach

Nie robię gry, bawię sie gmem. Nie wiem jak masz to napisać... Masz gracza top down i przy kolizji z liniami narysowanymi np. w O_skrzynka(ja mam to w kodzie, skrypcie, nie wiem jak to ując, to jest oddzielny kod rysowanie tej figury, działa to na takiej zasadzie że rysuje czterokąt funkcjami draw_line (nie komentuj tego xD) rysując linie od argument0, argument1 do argument2,argument3.) Takie coś ma być ;)

Odnośnik do komentarza
Udostępnij na innych stronach

GML (ShapeCreate)
// return: shape id

var __s,__x,__y,__tx,__ty;

__s=ds_map_create()

__x=ds_list_create()

__y=ds_list_create()

__tx=ds_list_create()

__ty=ds_list_create()

ds_map_add(__s,'x',__x)

ds_map_add(__s,'y',__y)

ds_map_add(__s,'tx',__tx)

ds_map_add(__s,'ty',__ty)

return(__s)

 

GML (ShapeDestroy)
// argument0: shape id

ds_list_destroy(ds_map_find_value(argument0,'x'))

ds_list_destroy(ds_map_find_value(argument0,'y'))

ds_list_destroy(ds_map_find_value(argument0,'tx'))

ds_list_destroy(ds_map_find_value(argument0,'ty'))

ds_map_destroy(argument0)

 

GML (ShapeDraw)
// argument0: shape id

// argument1: primitive type

// argument2: texture id

var __x,__y,__tx,__ty;

__x=ds_map_find_value(argument0,'x')

__y=ds_map_find_value(argument0,'y')

__tx=ds_map_find_value(argument0,'tx')

__ty=ds_map_find_value(argument0,'ty')

draw_primitive_begin_texture(argument1,argument2)

for(i=0;i<ds_list_size(__x);i+=1)

draw_vertex_texture(ds_list_find_value(__x,i),ds_list_find_value(__y,i),ds_list_find_value(__tx,i),ds_list_find_value(__ty,i))

draw_primitive_end()

 

EDIT: Zaraz wracam do domu wiec po powrocie dopisze reszte funkcji lub zrobie Ci przyklad, bo zostalo pare skryptow do napisania ;p

Odnośnik do komentarza
Udostępnij na innych stronach

slash, zobacz ile elementow trzyma mapa i jakie to elementy. Mapa jest dobrym rozwiazaniem pseudo-obiektowosci, gdy trzymamy malo danych. Spytaj Tymcia :)

Odnośnik do komentarza
Udostępnij na innych stronach

Hunter, tablice to katastrofa gdy w gre wchodzi więcej niż jeden model na obiekt. Ponadto nie posiadają możliwości czyszczenia pamięci :)

zabieram sie za pisanie tego przykładu

Odnośnik do komentarza
Udostępnij na innych stronach

Wiesz PsichiXie, zapis/odczyt/zmiana wartości indeksu tablicy jest szybszy niż zapis/odczyt/zmiana listy/grida o ok 2x (map nawet nie ma co zestawiać ;D) :P

(choć ze zwolnieniem z pamięci gorzej, się zgodzę)

 

Ale nie po to pisałem.

Mógłbyś wyjaśnić, co miałeś na myśli mówiąc

Mapa jest dobrym rozwiazaniem pseudo-obiektowosci, gdy trzymamy malo danych./quote]Bo nijak nie mogę wymyśleć, co mają takie, że tak to określę, bardziej rozwinięte tablice do obiektowości O.o

Możliwość posiadania dowolnej liczby wartości dla tego samego klucza?

Odnośnik do komentarza
Udostępnij na innych stronach

Mógłbyś wyjaśnić, co miałeś na myśli mówiąc
Mapa jest dobrym rozwiazaniem pseudo-obiektowosci, gdy trzymamy malo danych.
Bo nijak nie mogę wymyśleć, co mają takie, że tak to określę, bardziej rozwinięte tablice do obiektowości O.o

A broń boże nie mylić mapy z tablicą, mapa to lista par klucz-wartość. Nie sprawdzałem czy kluczem może być liczba ale jeśli może to bardziej skupiał bym się na nich, niżeli stringach. Dwa że jeśli string klucza to jeden znak to nie ma różnicy jakby porównywać liczby - różnica kilku inistrukcji procesora co się bardzo szybko wykonuje. Ponad to znacznie lepiej uzywać map niż listy z racji iż GMowe listy przechodzimy wyłącznie po indeksach (ds_list_find_value(id,index)), jak tablice, gdzie lista w rzeczy samej staje się wektorem, nie listą. Mapy za to możemy przechodzić jak prawdziwe listy - iteratorem (ds_map_find_first(); ds_map_find_next(); itd.), co daje im prawo nazywać się listami par, a co nie ma znaczenia wydajnościowego dla długości klucza.

A do obiektowości to ma się struktura danych trzymanych w mapie.

 

zapis/odczyt/zmiana wartości indeksu tablicy jest szybszy niż zapis/odczyt/zmiana listy/grida o ok 2x (map nawet nie ma co zestawiać ;D)

gdy nie przechodzimy iteratorem to owszem, jest szybsze dla tablic, gdy jednak przechodzimy mape iteratorem to nawet nie pytaj co szybsze :P

 

EDIT: hehe, a jednak mozna uzywac liczb jako kluczy :)

Odnośnik do komentarza
Udostępnij na innych stronach

To miałem na myśli mówiąc "bardziej rozwinięte", czyli dowolne klucze (nie musza następować po sobie), pare wartości dla tego samego klucza i lepsiejsze "zarządznie" :P

 

Ale kurna, nie odpisałeś na to, o co pytałem - co w takim wypadku mapy mają wspólnego z ce plus plusową obiektowością.

Odnośnik do komentarza
Udostępnij na innych stronach

A do obiektowości to ma się struktura danych trzymanych w mapie.

obiekt klasy. Obiektem jest mapa, klasą jest szablon wypełniania mapy. Istnieje konstruktor, destruktor, dostęp do danych po nazwach, gdzie tutaj nazwą może być i liczba. Obiekt zajmuje pamięć przy tworzeniu, a przy usuwaniu zwalnia zajmowaną pamięć - tablice już nie.

 

EDIT: Przyklad trafi do zasobow gmclanu 19 stycznia 2010

Odnośnik do komentarza
Udostępnij na innych stronach

Pieter, nie żartuj sobie bo uwierzą :0

Wyzerowanie != zwolnienie pamięci

Odnośnik do komentarza
Udostępnij na innych stronach

siadam i pisze dalej. wczoraj w nocy musialem zrobic co innego niestety :P

Odnośnik do komentarza
Udostępnij na innych stronach

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