NukeBoards

Pomoc - [MMF2] Sprawdzanie odległości, wyrównanie do siatki

tracersgta - 30-05-2011, 13:56
: Temat postu: [MMF2] Sprawdzanie odległości, wyrównanie do siatki
Ustawiam kratkę na 16x16 px. W każdą kratkę wstawiam jeden obiekt 16x16 px. I wszystko działa, póki nie uruchomię aplikacjii... program pokazuje jedynie fragment wszystkich elementów oraz ignoruje zdarzenia...

Teraz pytanie:

Jak zrobić aby kiedy gracz kliknął na dany obszar obiekt utworzy mu się w kratce a nie zaraz koło myszy?

2:
Jak zrobić aby zdarzenie mogło się odbyć tylko wtedy gdy jeden obiekt jest w mniejszej odległości niż ileśtam px.
Aleks - 30-05-2011, 14:13
:

Kod:
XMouse/16*16
YMouse/16*16

tracersgta - 30-05-2011, 14:21
:
Do którego to jest? Zadałem 2 pytania :/
Wackyjackie - 30-05-2011, 15:05
:
1. Patrz Aleks. Domyśl się jak skorzystać.
2. Advanced Direction Object. Najłatiwiej.
tracersgta - 30-05-2011, 16:07
:
Fajnie... Może byś pomógł, skoro wiesz jak rozwiązać 2 problem?
Wackyjackie - 30-05-2011, 16:30
:
Nie wymaga to przecież żadnej finezji i większego pomyślunku. http://i51.tinypic.com/15i9pwo.png
A nawet masz przykłady w katalogu MMFa! That's right!
tracersgta - 30-05-2011, 16:49
:
Daj przykład zdarzenia...
Aleks - 30-05-2011, 17:01
:

Kod:
Sqr((Abs(X( "Active" )-X( "Active 2" )))*(Abs(X( "Active" )-X( "Active 2" )))+Abs((Y( "Active" )-Y( "Active 2" )))*Abs((Y( "Active" )-Y( "Active 2" ))))

Nie ma przykładów.
Fadex - 30-05-2011, 18:09
:
Aleks napisał/a:

Kod:
Sqr((Abs(X( Active )-X( Active 2 )))*(Abs(X( Active )-X( Active 2 )))+Abs((Y( Active )-Y( Active 2 )))*Abs((Y( Active )-Y( Active 2 ))))

Nie ma przykładów.

Po co te Abs()? Zupełnie zbędne, tylko wydłużają wyrażenie.
tracersgta - 30-05-2011, 18:12
:
Wpisałem i co z tego? Nic nie daje...
Fadex - 30-05-2011, 18:29
:
To jest wzór na odległość między dwoma obiektami, więc...

(a dokładniej:)

Kod:
Sqr((X( "Active" )-X( "Active 2" ))*(X( "Active" )-X( "Active 2" ))+(Y( "Active" )-Y( "Active 2" ))*(Y( "Active" )-Y( "Active 2" )))


Zależy to też od obiektów, między którymi dystans porównujesz. Jeśli jest ich więcej niż po jeden z każdego rodzaju - to nieco bardziej skomplikowane.
Minty - 30-05-2011, 18:37
:
Fadex napisał/a:
Po co te Abs()? Zupełnie zbędne, tylko wydłużają wyrażenie.

Po co w ogóle? Advanced Direction Object robi to znacznie, znacznie szybciej.

tracersgta, musisz zrobić nierówność z policzoną odległością między obiektami po jednej stronie, a odległością pożądaną (stałą) po drugiej.

Naucz się myśleć. Jak można nie wpaść na to, że wyrażenie "XMouse/16*16" odnosi się do problemu z myszą? Pewnie nawet tego nie przeczytałeś :P
tracersgta - 30-05-2011, 18:52
:
Nic z tego nie zrozumiałem :P
Aleks - 30-05-2011, 19:22
:
Człowieku wkurzasz mnie

Distance( "Advanced Direction Object", X1, Y1, X2, Y2)


X1 pierwszy obiekt
X2 drugi obiekt

1
+ Distance( Advanced Direction Object, X1, Y1, X2, Y2) < 100
• zrób coś (strzel sobie w łeb)


W ogóle piszesz jak potłuczony
tracersgta napisał/a:
odległość niż ileśtam px.


według czego? obiektom? co chcesz zrobić?
tracersgta - 30-05-2011, 19:36
:
Aleks napisał/a:
W ogóle piszesz jak potłuczony


I kto to mówi :/


Chcę: Jest obiekt X i obiekt Y. Obiekt X to nasz bohater, a Y to podłoże. Bohater umie niszczyć podłoże ale tylko gdy jest w odległości mniejszej niż 96 pikseli... I pytanie... Jak zrobić aby obiekt Y został zniszczony po naciśnięciu na niego myszą, tylko gdy obiekt X jest w odległości mniejszej lub równej 96 pikseli... jasne?