Skocz do zawartości

Objekt poruszany myszką


gol350

Rekomendowane odpowiedzi

Jak zrobić ,żeby objekt poruszał się w kierunku odciśnięcia myszy tzn. jak odcisnę myszkę po prawej stronie od objektu, to objekt leci w prawo do ściany i na ścianie się zatrzymuje. Jest jeden warunek- muszę najpierw nacisnąć myszką na objekt.

Odnośnik do komentarza
Udostępnij na innych stronach

Odciśnięcie myszy - bierzesz mysz, białą kartkę. Maczasz mysz w atramencie a następnie przyciskasz mocno do kartki. Bo odklejeniu myszy mamy już odcisk myszy :) Czas na poruszanie obiektu w kierunku odciśnięcia myszy. Musisz gdzieś zapisać pozycję x i y odcisku myszy. Następnie przy pomocy funkcji np. mp_potential step poruszasz obiektem w kierunku odciśnięcia. Myślę że pomoże ci to :)

Odnośnik do komentarza
Udostępnij na innych stronach

hihi, najprościej:

GML
Create:

xx = x;

yy = y;

 

Step:

if ( mouse_check_button_released( mb_left ))

{

xx = mouse_x

yy = mouse_y

}

 

if ( distance_to_point( xx , yy ) < 2 ) mp_potential_step( xx , yy , 3 , true );

 

End Game:

show_message( 'gml wcale nie gryzie;)' )

;)
Odnośnik do komentarza
Udostępnij na innych stronach

GML
//create:

xx=x

yy=y

 

//global left mouse released:

xx=mouse_x

yy=mouse_y

 

//step:

mp_potential_step(xx,yy,5,false)

Trochę pomyslone, bo nie wiem, jak dokładnie chcesz, aby to wyglądało. Ogólnie to napisz więcej, to się pomyśli.

Marku, za szybko ;/ (ale lepiej)

Odnośnik do komentarza
Udostępnij na innych stronach

hihi, najprościej:GMLCreate:

xx = x;

yy = y;

 

Step:

if ( mouse_check_button_released( mb_left ))

{

    xx = mouse_x

    yy = mouse_y

}

 

if ( distance_to_point( xx , yy ) < 2 ) mp_potential_step( xx , yy , 3 , true );

 

End Game:

show_message( 'gml wcale nie gryzie;)' ) ;)

 

tu mi wyskakuje taki błąd:

 

 

FATAL ERROR in

action number 1

of Create Event

for object mon_4:

 

COMPILATION ERROR in code action

Error in code at line 2:

  xx = x;

 

at position 2: Assignment operator expected.

Odnośnik do komentarza
Udostępnij na innych stronach

To masz w końcu ten błąd czy nie?

I co mamy rozumiec przez:

Ale to mi nie leci do ściany ,tylko troche się przesuwa
?

GML
mp_potential_step( xx , yy , 3 , true );

Zamiast '3' wstaw sobie 20, jeżeli o to Ci chodzi. Jest to prędkośc poruszania się obiektu do danego punktu, w tym przypadku xx,yy

Odnośnik do komentarza
Udostępnij na innych stronach

To masz w końcu ten błąd czy nie?

I co mamy rozumiec przez:

?

 

Zamiast '3' wstaw sobie 20, jeżeli o to Ci chodzi. Jest to prędkośc poruszania się obiektu do danego punktu, w tym przypadku xx,yy

 

Jak napisze GML to mam błąd ,a jak nie to mi się troche poruszy i staje.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak napisze GML to mam błąd

lol...

Zrób połączenie mojego kodu i Marka tzn:

GML
//Create:

xx = x;

yy = y;

//global left mouse released: (Ten event znajdziesz w mouse->global->mouse left released)

xx = mouse_x

yy = mouse_y

//step:

if ( distance_to_point( xx , yy ) < 2 ) mp_potential_step( xx , yy , 3 , true );

I tyle. Aby zobaczy efekt, kliknij w grze prawym przyciskiem myszy gdziekolwiek w roomie

Odnośnik do komentarza
Udostępnij na innych stronach

lol...

Zrób połączenie mojego kodu i Marka tzn:

GML//Create:

xx = x;

yy = y;

//global left mouse released: (Ten event znajdziesz w mouse->global->mouse left released)

xx = mouse_x

yy = mouse_y

//step:

if ( distance_to_point( xx , yy ) < 2 ) mp_potential_step( xx , yy , 3 , true );

I tyle. Aby zobaczy efekt, kliknij w grze prawym przyciskiem myszy gdziekolwiek w roomie

 

To mi się objekt kręci we kółko, a mi chodzi o to, żeby szedł prosto do ściany.

 

Mimek  może ty wiesz jak to zrobić, bo z tamtym co mi zrobiłeś to nawet na GM-ie 7 PRO nie działa.

 

Bo kupiłem ,to wiem.

 

Serdecznie proszę o korzystanie z funkcji edycji posta zamiast pisania drugiego z rzędu.

Woock

Odnośnik do komentarza
Udostępnij na innych stronach

GML
zamiast mp_potential_step użyj move_towards_point( xx , yy , 3 );

 

 

Ogólnie to powinno wyglądać mniej więcej tak:

GML (create)
xx = x;

yy = y;

GML (step)
if ( mouse_check_button_released( mb_left ))

{

xx = mouse_x

yy = mouse_y

}

 

if ( point_distance( x , y , xx , yy ) > 2 ) move_towards_point( xx , yy , 3 );

else

speed = 0

 

btw. nikt nie zauważył, że w tym step powinien być znak większości a nie mniejszości =P

 

E2: dobra poprawiłem resztę tego kodu

Odnośnik do komentarza
Udostępnij na innych stronach

GMLzamiast mp_potential_step użyj move_towards_point( xx , yy , 3 );

 

 

Ogólnie to powinno wyglądać mniej więcej tak:GML (create)xx = x;

yy = y;

GML (step)if ( mouse_check_button_released( mb_left ))

{

    xx = mouse_x

    yy = mouse_y

}

 

if ( point_distance( x , y , xx , yy ) > 2 ) move_towards_point( xx , yy , 3 );

else

speed = 0

 

btw. nikt nie zauważył, że w tym step powinien być znak większości a nie mniejszości =P

 

E2: dobra poprawiłem resztę tego kodu

 

Wtedy objekt porusza się do punktu wciśnięcia myszy.

 

Mi zależy na tym, żeby poruszał się do ściany. Nie wiem jak to dokładnie opisać. Jakby ktoś miał czas to niech sobie wejdzie w GOOGLE i napisze BLOCKOBAN(to zajmie dosłownie minutkę). Tam na pierwszym poziomie wykonuje się takie poruszanie klockami. Klocki zawsze lecą do ściany w kierunku odciśnięcia myszy, ale najpierw musisz nacisnąć na klocek i wybrać kierunek myszką.                              

Odnośnik do komentarza
Udostępnij na innych stronach

Spróbuj teraz:

GML//create

newdir=false;

xx = x;

yy = y;

 

//step

if(newdir)

{

xx = mouse_x

yy = mouse_y

newdir=false;

}

if ( mouse_check_button(mb_left) )

{

newdir=true;

motion_set( point_direction(x,y,xx,yy),5 );

}

 

Znowu ale. Porusza się dobrze ,tylko ,że porusza się do ściany i leci na około ścian(kwadrat ze ścian a objekt w środku) odbija się od ściany i leci dalej ,a poza tym jeśli nie nacisnę na objekt tylko na puste pole to też się porusza, a to ma się poruszać tylko po uprzednim naciśnięciu na objekt jeśli odcisnę myszkę poza objektem .                        

Odnośnik do komentarza
Udostępnij na innych stronach

GML
//create

selected=0;

newdir=false;

xx = x;

yy = y;

//step

if (point_distance(mouse_x,mouse_y,x,y)<=8)

{

if(mouse_check_button(mb_right))

{

selected=1;

}

}

if(point_distance(mouse_x,mouse_y,x,y)>8)

{

if(mouse_check_button(mb_right))

{

selected=0;

}

}

if(selected==1)

{

if(newdir)

{

xx = mouse_x

yy = mouse_y

newdir=false;

}

if ( mouse_check_button(mb_left) )

{

newdir=true;

motion_set( point_direction(x,y,xx,yy),5 );

}

}

I ustaw originy sprite'a na center.

 

PS: Chciałem to zrobić na collision_point(mouse_x,mouse_y,self,0,0), ale mi nie działało.

Odnośnik do komentarza
Udostępnij na innych stronach

GML//create

selected=0;

newdir=false;

xx = x;

yy = y;

//step

if (point_distance(mouse_x,mouse_y,x,y)<=8)

    {

    if(mouse_check_button(mb_right))

        {

        selected=1;

        }

    }

if(point_distance(mouse_x,mouse_y,x,y)>8)

    {

    if(mouse_check_button(mb_right))

        {

        selected=0;

        }

    }

if(selected==1)

    {

     if(newdir)

        {

        xx = mouse_x

        yy = mouse_y

        newdir=false;

        }

    if ( mouse_check_button(mb_left) )

        {

        newdir=true;

        motion_set( point_direction(x,y,xx,yy),5 );

        }

    } I ustaw originy sprite'a na center.

 

PS: Chciałem to zrobić na collision_point(mouse_x,mouse_y,self,0,0), ale mi nie działało.

 

Przyciskam lewy i prawy przycisk myszki i nic się nie dzieje.

Odnośnik do komentarza
Udostępnij na innych stronach

Kliknij prawym przyciskiem na obiekcie, a następnie lewym, żeby się poruszył. kiedy klikniesz PPM poza obiektem, przestanie być zaznaczony. Jeśli obiekt jest większy niż 16x16 to w tym miejscu:

if (point_distance(mouse_x,mouse_y,x,y)<=8)

if(point_distance(mouse_x,mouse_y,x,y)>8)

Zamiast ósemek wstaw połowę długości/szerokości obiektu (zakładając, że jest kwadratowy)

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