Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

 

 

W pewnym momencie gry (jeszcze nie odkryłem dokładnie w którym) gra zaczyna zwalniać- cały czas mam 60/60 nagle z każdą kolejną mapą spada kilka fps.Jeżeli zresetuje grę dana mapa która spowolniła już np do 40fps ma już normalnie 60/60- tak więc proces następuje wraz z czasem grania- i tutaj kluczowy element i pytanie używam sobie "show_debug_overlay" i wraz ze spadkiem fps drastycznie rośnie mi żółty pasek , według opisu funkcji to :

"Yellow - The time required for the draw event"

Co to oznacza w praktyce? Praktycznie nie używam funkcji draw (poza jakimś wyświetlaniem fps itp).Co może spowalniać?

Odnośnik do komentarza
Udostępnij na innych stronach

@XBlackX:

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

1. Co oznaczają liczby 128 i 122?

2. W jakim evencie w którym obiekcie masz ten kod wpisany?

3. with(object1) spowoduje usunięcie wszystkich instancji obiektu object1 (czyli wszystkich object1 na mapie). Użycie with(other) spowoduje, że zostanie usunięty tylko obiekt kolidujący. Funkcja collision_point zwraca ID obiektu, z którym następuje kolizja w danym punkcie, lub -1, jeżeli żaden obiekt nie wywołuje kolizji. Powinieneś przypisać wartość collision_point do jakiejś zmiennej, dzięki temu pisząc with(zmienna) {kod} kod zostanie wykonany tylko dla tego obiektu, który wywołuje kolizję w punkcie.

 

To może brzmieć nieco skomplikowanie, ale tak to jest, gdy chce się załatwiać kolizje samemu, zamiast korzystać z eventu Collision with (zakładam, że twój kod nie znajduje się w Collision with).

Odnośnik do komentarza
Udostępnij na innych stronach

object0 po kolizji na środku sprite z object1 usuwa object1

 

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

 

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

Twój punkt [128,122] jest punktem na mapie, nie na sprite co widocznie chciałeś uzyskać. Każdy instance ma swoje wewnętrzne zmienne takie jak: speed, direction, image_xscale, ale też x i y. Pewnie to już wiesz. Ale jeżeli gdzieś w obliczeniach chcesz odnieść się do pozycji instance to musisz podać jego x i y.

Poza tym mam nadzieję że nie masz tego kodu w evencie kolizji? Wtedy on prawie na pewno się nie wykona, bo najpierw będzie musiał sprawdzić kolizję masek, a dopiero potem twój kod.

Odnośnik do komentarza
Udostępnij na innych stronach

Jest jakiś sposób na proste zabezpieczenie .ini przed ingerencją użytkownika?

 

 

I ponownie proszę o przyjrzenie się mojemu poprzedniemu pytaniu,może ktoś wie o co chodzi

Tak, szyfrujesz zapisywane dane, a przy odczytywaniu odszyfrowujesz.

Odnośnik do komentarza
Udostępnij na innych stronach

thx

 

Teraz ważniejsze pytanie

 

Jak zrobić system mikrotranzakcji w grze na androida? Muszę jakoś to ustawiać w google play?Jak się do tego zabrać?

 

:) :) :)

 

O tym można książkę napisać :)

 

Sorry, ale tu masz link do helpa.

 

Odnośnik do komentarza
Udostępnij na innych stronach

A jest jakiś najprostszy sposóbt żeby mnie nakierować?Nie chcę tydzień grzebać po to żeby się dowiedzieć że można to w 5minut ogarnąć tak jak miałem w przypadku ustawienia reklam na andku-totalny banał ale żeby dotrzeć do 1 linijki kodu którą musiałem wstawić w odpowiednim miejscu poświęciłem kilkadziesiąt godzin:/

 

Rozumiem że najlepiej ogarnąć te tematy?:

http://help.yoyogames.com/forums/22944718-IAPs

 

Chce tylko 1 opcję dodać, możliwość kupowania "monet" za realne pieniądze.

Odnośnik do komentarza
Udostępnij na innych stronach

Witam :)

Mam małe pytanko :)

Jak lepiej jest przechowywać dane z gry?

Pliki ini czy rejestr ?

Dziękuje za odpowiedz i pozdrawiam :)

Jakub

 

Wszystko zależy od rodzaju danych.

Pliki ini są do danych konfiguracyjnych. Takich jakie użytkownik może sam zmieniać. Bo ich jedynym plusem jest to że są bardzo czytelne po otwarciu.

Pliki tekstowe wymagają dobrego zaplanowania danych. Możesz sobie zapisywać każdą daną w osobnej linijce i tylko pamiętać co jest w której. Np w pierwszej linijce jest hp gracza, w drugiej złoto, etc.

Możesz przechowywać dane w ds_map i zapisywać je do stringu dzięki specjalnej funkcji. Wtedy wystarczy że w ds_map masz klucze "hp gracza", "gold". Taki string jest zapisany w sposób nie do odczytania przez człowieka (ale łatwo go odszyfrować)

Najpotężniejszy i bardzo przyjemny po opanowaniu jest zapis w formacie JSON. Jest łatwy do przeglądania, bardzo prosty do zapisu i odczytu i ma strukturę drzewa. Możesz np.: zrobić tablicę w tablicy w tablicy. Więc nie ma problemu żeby zrobić tablicę postaci, w jednej postaci zrobić tablicę ekwipunku, która będzie miała pozycje inventory zapisane jako ds_map z różnymi właściwościami jak "dmg", "cena" i w środku kolejną tablicę na efekty. Problem z JSON jest taki że sprawia bardzo dużo kłopotu pilnowanie w GM żeby wszystkie dane były traktowane jako JSON.

 

Wszystkie pliki można szyfrować poza ini.

Zaszyfrować ini można na 2 sposoby: Szyfrując wartości (tak jak Sutikku pokazał kilka potów wyżej) albo szyfrując cały plik, ale żeby to zrobić trzeba go pierw otworzyć jako plik tekstowy, odszyfrować, zapisać jako niezaszyfrowany ini, dokonać operacji zapisu,otworzyć ponownie jako plik tekstowy, zaszyfrować i zapisać. Bardzo dużo głupich operacji.

Odnośnik do komentarza
Udostępnij na innych stronach

Wszystko zależy od rodzaju danych.

Pliki ini są do danych konfiguracyjnych. Takich jakie użytkownik może sam zmieniać. Bo ich jedynym plusem jest to że są bardzo czytelne po otwarciu.

Pliki tekstowe wymagają dobrego zaplanowania danych. Możesz sobie zapisywać każdą daną w osobnej linijce i tylko pamiętać co jest w której. Np w pierwszej linijce jest hp gracza, w drugiej złoto, etc.

Możesz przechowywać dane w ds_map i zapisywać je do stringu dzięki specjalnej funkcji. Wtedy wystarczy że w ds_map masz klucze "hp gracza", "gold". Taki string jest zapisany w sposób nie do odczytania przez człowieka (ale łatwo go odszyfrować)

Najpotężniejszy i bardzo przyjemny po opanowaniu jest zapis w formacie JSON. Jest łatwy do przeglądania, bardzo prosty do zapisu i odczytu i ma strukturę drzewa. Możesz np.: zrobić tablicę w tablicy w tablicy. Więc nie ma problemu żeby zrobić tablicę postaci, w jednej postaci zrobić tablicę ekwipunku, która będzie miała pozycje inventory zapisane jako ds_map z różnymi właściwościami jak "dmg", "cena" i w środku kolejną tablicę na efekty. Problem z JSON jest taki że sprawia bardzo dużo kłopotu pilnowanie w GM żeby wszystkie dane były traktowane jako JSON.

 

Wszystkie pliki można szyfrować poza ini.

Zaszyfrować ini można na 2 sposoby: Szyfrując wartości (tak jak Sutikku pokazał kilka potów wyżej) albo szyfrując cały plik, ale żeby to zrobić trzeba go pierw otworzyć jako plik tekstowy, odszyfrować, zapisać jako niezaszyfrowany ini, dokonać operacji zapisu,otworzyć ponownie jako plik tekstowy, zaszyfrować i zapisać. Bardzo dużo głupich operacji.

 

Wszystko pięknie wytłumaczone, dziękuje Bardzo :)

A co do plików JSON.

Może korzystać z nich GameMaker 8.1 ?

Czy to dotyczy się GM:Studio?

Za znajomiłem sie ze sposobem szyfrowania danych Gnyska i kriso99. Masz racje że dużo z tym zachodu.

 

Co do gry to chodzi mi o takie małe zapisywane plików jak:

- ilosc żyć

- ilosc amunicji w danej broni

- ilosc amunicji w magazynku etc

 

Porzebuje tego do swojej gry. a problem jest taki że zazwyczaj korzystałem zer skryptu:

GML
if room == level1

{

//i tu tworzylem zmienne ktore nie maja sie pojawiac na nowo gdy przechodzi do kolejnego pokoju np:

hp = 100;

global.ammo_pistol = 0;

// etc...

}

A teraz, niby wszystko działa ale nie bochater nie chce strzelać....

Odnośnik do komentarza
Udostępnij na innych stronach

Obsługa JSON jest tylko w Studio. Ale w poprzednich GM było już ds_map_write() i ds_map_read(). I tego użyj. Jest niesamowicie łatwo, wygodnie, i bezproblemowo. Tylko nie ma plusu struktury drzewa.

Odnośnik do komentarza
Udostępnij na innych stronach

Ponawiam bo nadal nie mam pojęcia o co chodzi

 

"W pewnym momencie gry (jeszcze nie odkryłem dokładnie w którym) gra zaczyna zwalniać- cały czas mam 60/60 nagle z każdą kolejną mapą spada kilka fps.Jeżeli zresetuje grę dana mapa która spowolniła już np do 40fps ma już normalnie 60/60- tak więc proces następuje wraz z czasem grania- i tutaj kluczowy element i pytanie używam sobie "show_debug_overlay" i wraz ze spadkiem fps drastycznie rośnie mi żółty pasek , według opisu funkcji to :

"Yellow - The time required for the draw event"

Co to oznacza w praktyce? Praktycznie nie używam funkcji draw (poza jakimś wyświetlaniem fps itp).Co może spowalniać? "

 

Ktoś wie?

Odnośnik do komentarza
Udostępnij na innych stronach

Ponawiam bo nadal nie mam pojęcia o co chodzi

Tu nie chodzi o to że nie używasz funkcji draw. Event draw jest wykonywany dla każdego obiektu który ma visible=true. Rysowanie sprite, tekstu, zmiana alpha, ustawienie blend. Każda akcja dodaje więcej czasu obliczeń, a event draw jest najcięższym do wykonania i to on prawie zawsze spowalnia grę.

 

Nie mam pojęcia czemu dzieje się akurat coś takiego że FPS spada z czasem. Może dodajesz grafiki z plików zewnętrznych?

 

Tak czy inaczej odsyłam cię na http://www.yoyogames.com/tech_blog/30 gdzie znajdziesz wytłumaczenie, a potem http://www.yoyogames.com/tech_blog/61 gdzie omawiana jest optymalizacja draw dla Androida.

 

Edit: Przy czym pierwszy artykuł jest z 2013 i np Nest "if" jest nie aktualne bo mamy już Short Circuit Evaluation. ;)

Odnośnik do komentarza
Udostępnij na innych stronach

thx, to już jest jakiś trop

 

 

Teraz 2 pytanka na szybko

 

1.Kiedyś pytałem czy można jakoś ominąć global lub usunąć wartość po wykorzystaniu, tak żeby cały czas nie zaśmiecała pamięci mimo że dawno jest niepotrzebna.Wpadłem na taki pomysł.Jakby tak stworzyć obiekt który będzie parentem dla wszystkich obiektów na które dany global miał oddziaływać i w tyb obiekcie użyć var zmienna a w danych obiektach inherited event().Takie coś ma jakikolwiek sens?

 

2.Jaka jest realna opcja promowania i reklamowania gier na android market?

Odnośnik do komentarza
Udostępnij na innych stronach

To już nie są drobne pytania więc następnym razem zastanów się nad napisaniem nowego tematu. Niech ten temat zostanie na pytania które można odpowiedzieć w jednym zdaniu.

1.Kiedyś pytałem czy można jakoś ominąć global lub usunąć wartość po wykorzystaniu, tak żeby cały czas nie zaśmiecała pamięci mimo że dawno jest niepotrzebna.Wpadłem na taki pomysł.Jakby tak stworzyć obiekt który będzie parentem dla wszystkich obiektów na które dany global miał oddziaływać i w tyb obiekcie użyć var zmienna a w danych obiektach inherited event().Takie coś ma jakikolwiek sens?
To nie ma sensu. Użycie global i tak jest już bardzo optymalne bo możesz mieć tylko jedną zmienną globalną o danej nazwie w całej grze. To co opisujesz to zwykłe dziedziczenie zmiennych. Tak powinieneś to robić dla zmiennych które nie są globalne a maja być wspólne dla bratnich obiektów. Tylko jeżeli ta zmienna ma się zmieniać tak samo dla każdego z tych obiektów (np.: buff prędkości dla wszystkich przeciwników) to wtedy nie ma to sensu. W takim wypadku warto mieć jeden obiekt kontroler który tym zarządza i nie jest rodzicem, a inne obiekty odnoszące się do niego.

 

2.Jaka jest realna opcja promowania i reklamowania gier na android market?
Zapytaj 10 producentów z top 10. Nikt z nas nie zna odpowiedzi na to pytanie.
Odnośnik do komentarza
Udostępnij na innych stronach

Może głupie pytanie, ale czy repeat(15), wykona się w ciągu 15 stepów, czy to zależy?

Ok, drugie podejście.

Chcę podejść do strzelania w drugi sposób. Zawsze odległość pomiędzy strzałami ustawiałem sobie alarmem i sprawdzałem czy jest wyzerowany. Im na większy ustawiłem alarm, tym dłużej czekałem. Wiadomo, proste. Ale chciałbym teraz osiągnąć, że mam jakąś wartość. I to będzie moja prędkość strzelania. Im większa, tym szybciej strzelam. I jak takie cudo wykonać? Podejrzewam, że to jakiś prosty szybki trik. Próbowałem robić coś w stylu 180-wartość, ale to miało limit. Powyżej 180 przestawało działać. Mogę jakoś inaczej to zrobić?

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