Skocz do zawartości

problem z collision_point


Prodayle

Rekomendowane odpowiedzi

Witam, to znowu ja (po chyba 2 latach rozlaki xD

Postanowilem powrocic do game makera.

Po raz pierwszy zajrzalem do dokumentacji i udalo mi sie przeczytac prawie cala (zartuje ledwo przeczytalem dzial gameplay, co nie znaczy ze nie przeczytam reszty)

I mam problem, a nawet dwa.

Po pierwsze chcialbym zebyscie sprawdzili ten kod i pomogli mi naprawic blad z klinowaniem sie glownego bohatera na scianach

 

GML
if place_free(x,y+1)

{

gravity = 0.5;

}

else

{

gravity = 0;

}

 

if keyboard_check(vk_left)

{

hspeed=-3;

sprite_index = hero_left;

image_speed = 0.3;

}

else if place_free (x,y+1) = false

{

hspeed=0;

sprite_index = hero_stand

image_speed = 0.3

}

 

if keyboard_check(vk_right)

{

hspeed=3;

sprite_index = hero_right;

image_speed = 0.3;

}

else if place_free (x,y+1) = false

{

hspeed=0;

sprite_index = hero_stand

image_speed = 0.3

}

 

if keyboard_check(vk_space) and place_free (x,y+1) = false

{

vspeed = -10;

}

 

 

if collision_point(x,y,solid,prec,totime)// <----- no i co tam kurna wpisac???

// i co tu wpisac zeby postac sie tam tak niemilosiernie nie klinowala</span></span>

 

dziala calkiem dobrze gdyby nie to ze postal moze chodzic tylko w prawo, na lewo klawisz nie reaguje

 

przy kolizji z blokiem oczywiście:

GML
move_contact_solid(270,4) // co znaczy te 4? :>

vspeed = 0

 

Po drugie chcialbym abyscie mi wytlumaczyli jak wygladaja argumenty w collision_point...

wielkie dzieki

i przepraszam ale jestem tutaj pseudo nowy i staram sie nie bazowac na przykladach (teraz oczywiscie bede musial) tylko sam odkrywac gml i pisac po swojemu

Odnośnik do komentarza
Udostępnij na innych stronach

coz nie pomaga :/

 

 

postac zatrzymuje sie na scianie jak skocze w jaj kierunku

 

poza tym nie chodzi w lewa strone! :D

 

edit: ok pomoglo :D

zrobilem cos takiego:

 

GML
if keyboard_check(vk_left)

{

x-=3; // zmienilem hspeed na x-

sprite_index = hero_left;

image_speed = 0.3;

}

else if place_free (x,y) = false // zmienilem y+1 na y, w sumie nie wiem co to za roznica

{

hspeed=0;

sprite_index = hero_stand

image_speed = 0.3

}

 

if keyboard_check(vk_right)

{

x+=3;

sprite_index = hero_right;

image_speed = 0.3;

}

else if place_free (x,y) = false

{

hspeed=0;

sprite_index = hero_stand

image_speed = 0.3

 

dobrze jeden problem rozwiazany, dzieki :D

ale pojawily sie 3 kolejne:

jak daje y+1 wtedy sprity nie zmieniaja sie tak jak powinny kiedy ide w lewa strone

jak daje samo y ludek sie zatrzymuje jak puszcze klawisz ale jego sprite nie zmienia sie na hero_stand

no i co tym collision_point?

Odnośnik do komentarza
Udostępnij na innych stronach

jak pan sobie życzy...

10 minut później...

a jak tu sie uploaduje? :D

 

aha i jeszcze jedno, fakt ludek nie klinuje sie juz na scianach ale zmienia kierunek, tzn. skacze ludkiem na pionowa sciane a od razu po dotknieciu scniany leci w dol :/ nie mozna zrobic tak zeby sciana nie ingerowala w poczynania ludka, byle by tylko nie mogl do niej "wejsc"?

 

https://gmclan.org/up6094.html

 

dobrze to zrobilem?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

co do collision_point, to nie zadne totime, a not me, czyli po polsku "Nie mnie". Ustawiasz na true, jeśli sprawdzasz kolizję z tym samym typem obiektu i nie chcesz, aby wykrywał sam siebie za kolizję, w pozostałych przypadkach false. Prec oznacza czy sprawdzać kolizje precyzyjnie (per-pixel) czy po tak jak z nieprecyzyjną maską (prostokątną, ograniczoną x i y najbardziej wystających fragmentów maski)

Odnośnik do komentarza
Udostępnij na innych stronach

STEP:

GML
image_speed = 0.3;

if place_free(x,y+1)

{

gravity = 0.5;

}

else

{

gravity = 0;

}

 

if keyboard_check(vk_left)

{

x-=3;

sprite_index = hero_left;

}

 

if keyboard_check(vk_right)

{

x+=3;

sprite_index = hero_right;

}

if !keyboard_check(vk_left) && !keyboard_check(vk_right)

{

sprite_index = hero_stand

}

 

if keyboard_check(vk_space) and !place_free (x,y+1)

{

vspeed = -10;

}

EDIT:Zamień move_contact_solid(270,6) na move_contact_solid(270,3) ta 2 wartość to szybkość "ześlizgiwania się", bez tego będzie się klinował.

Odnośnik do komentarza
Udostępnij na innych stronach

super :) nie wiedzialem ze z image speedem tak mozna, poza tym nie wiem dlaczego twoj sposob chodzi a moj nie :P

 

jeszcze pozostal ostatni problem,

cytat:

"aha i jeszcze jedno, fakt ludek nie klinuje sie juz na scianach ale zmienia kierunek, tzn. skacze ludkiem na pionowa sciane a od razu po dotknieciu scniany leci w dol :/ nie mozna zrobic tak zeby sciana nie ingerowala w poczynania ludka, byle by tylko nie mogl do niej "wejsc"?"

Odnośnik do komentarza
Udostępnij na innych stronach

dziekuje, naprawde dziala wysmienicie

chociaz chwile... kurde

nic nigdy nie jest doskonale

gdy skacze moja postacia ona na chwile jakby zacina sie przed uderzeniem w sufit (bloczki nad nia), potem na chwile sie zacina bedac juz przy suficie i normalnie spada

troche to dziwne i nad wymiar irytujace nie moge sie z tym uporac

 

w create mam:

 

GML
skok = true

 

w step mam:

 

 

GML
image_speed = 0.3; // Poczatkowe okreslenie szybkosci animacji sprite'a

// Grawitacja

if place_free(x,y+1)

{

gravity = 1

}

else

{

gravity = 0;

}

// Klawisz w lewo

if keyboard_check(vk_left)

{

x-=3;

sprite_index = hero_left;

}

//Klawisz w prawo

if keyboard_check(vk_right)

{

x+=3;

sprite_index = hero_right;

}

if !keyboard_check(vk_left) && !keyboard_check(vk_right)

{

sprite_index = hero_stand

}

// Klaiwsz spacji

if keyboard_check(vk_space) and collision_point(x,y+17,object1,1,1) and skok = true

{

vspeed = -20;

}

// Brak animacji w powietrzu

if place_free (x,y+1)

image_speed = 0

 

// Zasada skakania

if keyboard_check_pressed (vk_space)

skok = false

 

if keyboard_check_released (vk_space)

skok = true

 

sorki za opisy ale potrzebuje ich bym sie pozniej nie pogubil

 

w collision z object1 (oczywiscie to bloczek i jest solid) mam:

 

GML
if vspeed >=0 {

move_contact_solid(270,5)

vspeed = 0;

}

Odnośnik do komentarza
Udostępnij na innych stronach

znowu powraca problem ze postac zawraca w dol gdy dotknie sciany, ponadto zlatuje w dol bardzo powoli :/ o czywiscie jesli kieruje ludzika do sciany

ludzie naprawde, malo co sie znam na gierkach ale chcialbym miec taki system sterowania bez zadnym skaz, spowolnien, zacinajacych i tnacych sie obiektow w ktorym wszystko gladko chodzi ja na przyklad w grze podziemia&podziemia autorstwa jednego (lub nawet paru) tutejszego forumowicza

 

edit: dobrze przywrocilem stary kod, ale problem pozostal, chciaz wszystko inne jest ok.

to co mi poradzisz?

Odnośnik do komentarza
Udostępnij na innych stronach

To jak chcesz żeby szybciej zlatywał, to zwiększ wartość vspeed np na 10. Postać zawsze Ci będzie zlatywała w dół/albo wlatywała, ponieważ Twoja postać po prostu wbija się w ścianę. Wtedy wykonywany jest kod w collision with sciana. Musisz dodać warunek w sterowaniu aby uniemożliwić postaci wchodzenie na ścianę. Tam gdzie masz x+=3;/x-=3; zamień na:

GML
//==x+=3; na

if(place_free(x+3,y))

x+=3;

 

//===x-=3; na

if(place_free(x-3,y))

x-=3;

Wtedy postać nie będzie wbijać się w ścianę.

 

gdy skacze moja postacia ona na chwile jakby zacina sie przed uderzeniem w sufit (bloczki nad nia), potem na chwile sie zacina bedac juz przy suficie i normalnie spada

Czyżby ediepl?

Odnośnik do komentarza
Udostępnij na innych stronach

Lol nadal nie o to chodzi, umiesz czytać??

 

 

stary, ten problem sie rozwiazal i jest jeszcze lepiej niz bylo :P

ale j/w jest jeszcze jeden problem

 

edit: candy, tak o to PRAWIE chodzilo, chdzi mi jeszcze o przedwczesne odbijanie sie od sufitu, na oko jakies 15-20 pikseli, ale mam 13 lat i nie jestem w tym dobry :D (nie to ze sie usprawiedliwiam)

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