Skocz do zawartości

objeckt przechodzi przez ściany


aaaaaa

Rekomendowane odpowiedzi

mam problem ustawiłem środek objectu na jego ręke (mianowicie jest to gosteg widok od góry z dwoma rękami coś jak u Raymana)i ustawiłem solin i w kolizji z blokiem speed=0 nibu wszystko jest dobrze ale jak podekde do bloku i się obruce to rę ka zostaje przed blokiem i normalnie się zatrzymuje a cała reszt wchoddzi na blok i nie wiem co zrobić . Używam opcij image_angle

Odnośnik do komentarza
Udostępnij na innych stronach

w evencie prawo:

if place_free(x+4,0)

{

x+4

}

 

//sprawdza czy teren 4 pixele w prawo od objektu jest wolny. jezeli tak to przesuwa sie o te 4 pixele w prawo a jezeli nie nie przesuwa sie.

 

i do innych eventów to samo tylko zmieniaj dane w nawiasach :D

Odnośnik do komentarza
Udostępnij na innych stronach

if keyboard_check_direct(vk_left)

if place_free(x-4,0)

{hspeed=-5}

if keyboard_check_direct(vk_right)

if place_free(x+4,0)

{hspeed=5}

if !keyboard_check_direct(vk_right) and !keyboard_check_direct(vk_left)

{hspeed=0}

if keyboard_check_direct(vk_up)

if place_free(0,y+4)

{vspeed=-5}

if keyboard_check_direct(vk_down)

if place_free(0,y-4)

{vspeed=5}

if !keyboard_check_direct(vk_up) and !keyboard_check_direct(vk_down)

{vspeed=0}

ja mam w steep taki kod

Odnośnik do komentarza
Udostępnij na innych stronach

Qrcze... Może jakoś sparentuj ten obiekt lub sprite'a z jego ręką :P Zresztą ten Twój @up kod jest do bani... Możesz też dać w obiekcie if distance_to_object(blok) <= 4 { speed = 0 } i też będzie dobrze :D

Odnośnik do komentarza
Udostępnij na innych stronach

A ja Wam powiem, że najlepsze są motiony xP Działają i na speedach i na x-ach i y-ach i nawet na kolizjach :P

 

@Up: Hm, a może po prostu zapodaj przykład jakiś, bo chyba wszystkie możliwości zostały wyczerpane :D Albo pokombinuj z motion planning ;) Chociaż właściwie w tym wypadku to raczej nic nie pomoże... ;/

Odnośnik do komentarza
Udostępnij na innych stronach

Chyba powinieneś nałożyć okrągłą maskę na obiekt, która będzie obejmowała jego całego... ;) Ręka nie jest pośrodku, więc będziesz musiał pokombinować z jej pozycją (tzn. x+ileś y+ileś)...standardowe GMowe "Mask" będzie niewygodne, gdy orgin nie jest pośrodku.

 

Przynajmniej tak zrozumiałem Twój problem i Twoje wyjaśnienia...

Odnośnik do komentarza
Udostępnij na innych stronach

if keyboard_check_direct(vk_left)

if place_free(x-4,0)

{hspeed=-5}

if keyboard_check_direct(vk_right)

if place_free(x+4,0)

{hspeed=5}

if !keyboard_check_direct(vk_right) and !keyboard_check_direct(vk_left)

{hspeed=0}

if keyboard_check_direct(vk_up)

if place_free(0,y+4)

{vspeed=-5}

if keyboard_check_direct(vk_down)

if place_free(0,y-4)

{vspeed=5}

if !keyboard_check_direct(vk_up) and !keyboard_check_direct(vk_down)

{vspeed=0}

ja mam w steep taki kod

 

if( keyboard_check_direct( vk_left ) )
{
     if( place_free( x-4, y ) ) then hspeed = -5;
}
if( keyboard_check_direct( vk_right ) )
{
     if( place_free( x+4, y ) ) then hspeed = 5;
}

if( !keyboard_check_direct( vk_right ) ) and ( !keyboard_check_direct( vk_left ) ) then hspeed = 0;

if( keyboard_check_direct( vk_up ) )
{
     if( place_free( x, y+4) ) then vspeed = -5;
}
if( keyboard_check_direct(vk_down) )
{
     if( place_free( x, y-4) ) then vspeed = 5;
} 
if( !keyboard_check_direct( vk_up ) ) and ( !keyboard_check_direct( vk_down ) ) then vspeed = 0;

 

:sleeping:

Odnośnik do komentarza
Udostępnij na innych stronach

A więc, skoro do połowy, maski się kłaniają. Kombinowałeś też z image_angle i takie są efekty.

 

Kod Maxpayna i stary kod aaaaaa powodują klinowanie się w ścianie, bo wartość ustawianego speeda jest większa od wartości umieszczonej w place_free.

 

4<5

 

Prędzej powinno być:

if( keyboard_check_direct( vk_left ) )
{
     if( place_free( x-5, y ) ) then hspeed = -5;
}
if( keyboard_check_direct( vk_right ) )
{
     if( place_free( x+5, y ) ) then hspeed = 5;
}

if( !keyboard_check_direct( vk_right ) ) and ( !keyboard_check_direct( vk_left ) ) then hspeed = 0;

if( keyboard_check_direct( vk_up ) )
{
     if( place_free( x, y+5) ) then vspeed = -5;
}
if( keyboard_check_direct(vk_down) )
{
     if( place_free( x, y-5) ) then vspeed = 5;
} 
if( !keyboard_check_direct( vk_up ) ) and ( !keyboard_check_direct( vk_down ) ) then vspeed = 0;

 

@Down: Dobrze. :)

Odnośnik do komentarza
Udostępnij na innych stronach

Załóżmy że jest tak:

Nowy_Obraz___mapa_bitowa.jpg

//A ta czerwona kropka to origin, a ten gruby pasek to ściana.\\

I myślę że dlatego przenika. :jezor:

 

Ale i tak zamień ten twój kod na ten:

if( distance_to_object( <ten objekt na ktorym ma sie zatrzymac> ) > 8 )
{
     if( keyboard_check_pressed( vk_up ) ) then vspeed = -5;
     if( keyboard_check_pressed( vk_down ) ) then vspeed = 5;
     if( keyboard_check_pressed( vk_left ) ) then hspeed = -5;
     if( keyboard_check_pressed( vk_right ) ) then hspeed = 5;
}
else
{
     speed = 0;
}

I tu tylko zmieniasz to 8, jeśli wchodzi wściany dajesz więcej jeśli ich nie dotyka a się zatrzymuje dajesz mniej. ;)

 

PS. A jeśli ten powyższy kod nie działa wróć do tamtego i zmień tam co jest na obrazku wyżej. :thumbsup:

 

@Up: Jaklub był szybszy :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ę...