Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

Edit: A jeżeli użył nazwy zasobu jak zmiennej, to jest w ogóle dozwolone?
Nazwy zasobów są stałymi kompilowanymi od nowa przy każdym uruchomieniu gry. Wskazują na ID zasobu w kategorii. Sprite na samej górze drzewka sprite będzie miało wartość 0, następny 1, etc.

Ale każdy pierwszy obiekt, sound, timeline, room i nie wiem co jeszcze będzie miało ID 0.

 

Przez to będzie dochodzić do błędów gdy sprite i obiekt mają tę samą nazwę. Nie wiem czemu GM nie zgłasza tego jako błąd kompilacji. Wydaje mi się wcześniej to robił. No, ale jest opcja w menu która pokarze wszystkie duplikaty nazw.

 

No i kolejny raz, bo to fajny feature, przypomnę że są tego plusy. Jeżeli mamy 10 przeciwników (oEnemy1, oEnemy2, oEnemy3...) to nie musimy ich losować, a możemy zrobić oEnemy1+irandom(10).

Odnośnik do komentarza
Udostępnij na innych stronach

Nazwy zasobów są stałymi kompilowanymi od nowa przy każdym uruchomieniu gry. Wskazują na ID zasobu w kategorii. Sprite na samej górze drzewka sprite będzie miało wartość 0, następny 1, etc.

Ale każdy pierwszy obiekt, sound, timeline, room i nie wiem co jeszcze będzie miało ID 0.

 

Przez to będzie dochodzić do błędów gdy sprite i obiekt mają tę samą nazwę.

jest opcja w menu która pokarze wszystkie duplikaty nazw.

 

No i kolejny raz, bo to fajny feature, przypomnę że są tego plusy. Jeżeli mamy 10 przeciwników (oEnemy1, oEnemy2, oEnemy3...) to nie musimy ich losować, a możemy zrobić oEnemy1+irandom(10).

 

Wiem.

 

Nie wiem czemu GM nie zgłasza tego jako błąd kompilacji. Wydaje mi się wcześniej to robił.

 

O to pytałem a nie odpowiedziałeś.

 

TL;DR

 

Odpowiedziałeś na wszystko na co nie miałeś odpowiadać.

Odnośnik do komentarza
Udostępnij na innych stronach

Jest na to wiele sposobów, jednym z prostszych(wg mnie Threef) jest zapisywanie jest stworzenie listy i tam gromadzenie tych wszystkich obiektów.

Najpierw tworzysz gdzieś tę listę za pomocą:

GML
global.lista=ds_list_create();

Potem za każdym razem jak tworzysz ten obiekt dodajesz w create coś takiego:

GML
ds_list_add(global.lista)

I gdzieś sobie sprawdzasz, czy lista jest większa od np 10 i usuwasz:

GML
if ds_list_size(global.lista)>10

{

repeat(10)

{

with(ds_list_find_value(global.lista,0){instance_destroy();}

ds_list_delete(global.lista,0)

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

Nie możesz się odwołać do tej listy, bo jej nie stworzyłeś.

Najpierw musisz napisać

GML
global.lista=ds_list_create

Ale to tylko raz,np w poprzednim roomie, czy też w obiekcie o_system w room_start, a ds_list_add przy każdym nowym obikecie

Odnośnik do komentarza
Udostępnij na innych stronach

Jak sprawdzić jakie texture page mam akutalnie załadowane do pamięci?

 

W manualu jest opis funckcji z debugera "Surface/Textures"

"Surfaces/Textures

 

This watch enables you to see exactly what is being drawn to any surfaces you have in your game (including the application surface) as well as see the texture pages that are in memory. You can select from textures or surfaces from the top of the watch, and then select the texture or surface ID to have it displayed in the window. "

 

Ale w praktyce mogę sobie ewentualnie po zapauzowaniu sprawdzić jakie w ogóle są w grze wszystkie stworzone texture page co jest wiedzą skrajnie zbędną (na liście są po prostu wszystkie-aktualnie mam 6,ale zawsze powinna być używana tylko 1-tak to zaplanowałem,chce zobaczyć czy to działa), - jak sprawdzić która aktualnie jest używana??

Odnośnik do komentarza
Udostępnij na innych stronach

GML
//losowy obiekt

l_ob = instance_find(nazwa_obiektu,irandom(instance_number(nazwa_obiektu)-1))

Tyle, że wojzax chciał wylosować jeden z tych które właśnie utworzył ;)

Pewnie można by też wykorzystać, że jak stworzymy kilka instancji pod rząd to powinny mieć kolejne numery ID, ale pewien nie jestem, czy to tak działa.

Jak chcesz czegoś optymalnego to pobaw się tym może :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Dokładnie chodziło mi o to co napisał Amaterasu, bo instancje miałem już utworzone, musiałem tylko znajdywać ciągle jedną z nich losową. Działa wyśmienicie :)

 

@EDIT: kolejne pytanie xD

 

Moje ludziki mają sobie losować daną instancję obiektu patrol_stop (jasno zielone kwadraciki). Po wylosowaniu idą w kierunku tej instancji po pathu patrol po gridzie o nazwie grid. Wszystko działa pięknie, jednak gdy wylosowana instancja znajduje się za blokadą danego grida (czerwone kwadraty), postać idzie w jakieś losowe miejsce poza mapą. Co może być tego przyczyną, albo co ważniejsze - jak sprawić by nie można było wylosować instancji poza zasięgiem postaci? (to załatwiłoby problem)

 

asdsad.png

Odnośnik do komentarza
Udostępnij na innych stronach

Jak sprawdzić jakie texture page mam akutalnie załadowane do pamięci?
GML
show_debug_overlay(true)
Pokaże ci się widok debugowy pokazujący np FPS. PIerwsza liczba w nawiasie to liczba texture swap, czyli ile razy na step zmieniane są texture pages. To Cię interesuje. Więcej możesz przeczytać w dokumentacji.

 

Moje ludziki mają sobie losować daną instancję obiektu patrol_stop (jasno zielone kwadraciki). Po wylosowaniu idą w kierunku tej instancji po pathu patrol po gridzie o nazwie grid. Wszystko działa pięknie, jednak gdy wylosowana instancja znajduje się za blokadą danego grida (czerwone kwadraty), postać idzie w jakieś losowe miejsce poza mapą. Co może być tego przyczyną, albo co ważniejsze - jak sprawić by nie można było wylosować instancji poza zasięgiem postaci? (to załatwiłoby problem)
Funkcja tworząca path, czyli mp_grid_path(), zwraca wartość true/false zależną od tego czy droga jest wytyczona czy nie. path zostaje utworzony nawet jak się nie uda, więc to ty musisz zareagować.
Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

ja to mam tak:

GML
if (mp_grid_path(grid, patrol, x, y, current_patrol_target.x, current_patrol_target.y, false)) then

{

path_start(patrol, 1, 3, 0);

}

else

{

}

 

to nie wiem czy to nie jest dobrze czy to jest źle

 

teoretycznie nie powinna postać sie ruszać skoro mp_grid_path jest false, ale jednak wynajduje sobie jakiś punkt poza mapą i tam idzie

Odnośnik do komentarza
Udostępnij na innych stronach

ja to mam tak:

GML
if (mp_grid_path(grid, patrol, x, y, current_patrol_target.x, current_patrol_target.y, false)) then

{

path_start(patrol, 1, 3, 0);

}

else

{

}

 

to nie wiem czy to nie jest dobrze czy to jest źle

 

teoretycznie nie powinna postać sie ruszać skoro mp_grid_path jest false, ale jednak wynajduje sobie jakiś punkt poza mapą i tam idzie

 

W zasadzie kod powinien zadzialac, wiec problem musi byc gdzies indziej, ale mozesz zastosowac nastepujace kroki(Nie wiem co zaproponowac wiec masz tu garść tipów w razie co):

1. path_clear_points(patrol) przed mp_grid_path

2. Upewnij sie ze mapie nie ma dziur - Brak obiektu blokującego wyjscie poza room to dziura. Upewnij sie ze rogi sa pokryte(moze nie miec znaczenia jak masz diag wylaczone, ale spróbuj)

3. Upewnij sie ze path jest otwarty (Po utworzeniu path path_set_closed(patrol,false);)

 

Szczerze, jakbym mial strzelac zakladalbym, ze pojscie w losowe miejsce to efektu uboczny nie czyszczenia pathu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Dziękuję za pomoc, chociaż pierwsze dwa pomysły nie zadziałały, nadal w przypadku zamknietych pathy wrogowie nie uznawali ścian albo uciekali za mapę.

Podziałało natomiast, kiedy po else w powyższym kodzie a więc w przypadku gdy path jest zamkniety dałem ponowne losowanie punktu celu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

mam dziwny problem

 

W create obiektu enemy1_body mam kod

GML
own_head=instance_create(x,y,enemy1_body_head)

own_head.cialo=self.id

 

A w create obiektu enemy1_body_head mam

GML
image_angle=cialo.image_angle

 

mimo to, widzi błąd w obiekcie enemy1_body_head - mianowicie nie ma takiego obiektu jak cialo :(

co zrobić

 

@EDIT:

ok, dałem to drugie do stepa i działa, ale dlaczego nie działa w create?

Odnośnik do komentarza
Udostępnij na innych stronach

object0 po kolizji na środku sprite z object1 usuwa object1

 

GML
if collision_point(128,122,object0,true,false) {with(object1 instance_destroy()}

 

ten kod nie działa, obiekt swobodnie przelatuje przez to...

Źle użyty nawias. Powinno być

GML
if( collision_point(128, 122, object0, true, false) )

{

with(object1)

{instance_destroy();}

}

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