Marek.S Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 gml prawde Ci powie! GML instance_number( object ) //zwróci Ci ilość obiektów instance_find( object, num ) //zwróci Ci id obiektu o podanej nazwie i numerze instancji</span> polecam również moj przykład bloczów https://gmclan.org/up1558_11_bloczki.html w odstępie czasowym losuje jeden z kilku bloczków, wykorzystując jego id usuwa je, zmieniając mu przy tym sprite : ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 6 Kwietnia 2010 Autor Udostępnij Opublikowano 6 Kwietnia 2010 To może innaczej bo nie kapuje. Założmy że chcę zrobic edytor plansz do mojej gry. Mam siedem obiektów: obj_ludzik, obj_sciana , obj_punkt , obj_mis , obj_bomba, obj_wrog1 ,obj_wrog2. Tworzę planszę w edytorze map. Umieszczam w niej 1 ludzika,8 ścian, 3 misie, 6 bomb, 5 wrogów1 i 5 wrogów2 .I tu proszę o pomoc. Nie chcem zapisywac planszy jako .sav lub inne rozszerzeni tylko jako plik tekstowy, w którym będą zapisane pozycje wszystkich obiektów(tych których jest po kilka też). Proszę też o pomoc w zrobieniu potem mechanizmu wczytywania tej planszy do gry (tak aby wszystkie obiekty były w tym samym miejscu co w edytorze i żeby każdy miał swoją funkcję taką jak w innych planszach). Chybaże jest jeszcze prostszy sposób o którym niewiem? Prosiłbym o jakiś przykład. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Assassin Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 Nie wiem czy takie coś ma prawo bytu. Ale może: GML with (all) Teraz zapisujesz te wszystkie pierdółki (x i y i cośtam) oraz nazwę obiektu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
CTRL Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 .daje daje w8... https://gmclan.org/index.php?sciagnijplik=161 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 GML ob[ 0 ] = obj_ludzik ob[ 1 ] = obj_sciana ob[ 2 ] = obj_punkt ob[ 3 ] = obj_mis ob[ 4 ] = obj_bomba ob[ 5 ] = obj_wrog1 ob[ 6 ] = obj_wrog2 file_txt = file_text_open_write( 'mapa_txt.map' ); for ( i = 0; i < 6; i += 1 ) { for ( n = 0; n < instance_number( ob[ i ] ); n += 1 ) { id_ = instance_find( ob[ i ], n ) text = string( ob[ i ] ) + '|' + string( id_.x ) + '|' + string( id_.y ); file_text_write_string( file_txt, text ); file_text_writeln( file_txt ); } } file_text_close( file_txt ); po wykonaniu kodu wpisze Ci do pliku mniej więcej coś takiego: 7|488|215 74|98|798 ... numer_obiektu|jego_poz_X|jego_poz_Y Co do wczytywania to wczytujesz po kolei linijki z pliku, dzielisz string względem separatorów ( znak: "|" ) i tworzysz obiekty : ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dragon Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 No, u mnie to działa. Mówiłem Ci że Marek.S Ci pomoże :). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 6 Kwietnia 2010 Autor Udostępnij Opublikowano 6 Kwietnia 2010 Marek.S : A co jeżeli np. obj_mis będzie 5 ?? Czy zostaną rozróżnione?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 po to są dwie pętle. pierwsza przelatuje po zindeksowanych obiektach, a druga po każdej instancji wyżej iterowanego obiektu : ) sam sprawdź! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 6 Kwietnia 2010 Autor Udostępnij Opublikowano 6 Kwietnia 2010 Marek.S : U mnie wyświetla się taki błąd: ___________________________________________ ERROR in action number 1 of Create Event for object object0: Error in code at line 14: text = ob[ i ] + '|' + id_.x + '|' + id_.y ^ at position 23: Wrong type of arguments to +. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 pisałem z głowy, nie sprawdzałem =p zmień na GML text = string( ob[ i ] ) + '|' + string( id_.x ) + '|' + string( id_.y ); E: dobra pomieszałem i z n, poprawiłem powyższe kod. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 6 Kwietnia 2010 Autor Udostępnij Opublikowano 6 Kwietnia 2010 Marek.S : Zmieniłem. Teraz wywala kolejny błąd: ___________________________________________ ERROR in action number 1 of Create Event for object object0: Error in code at line 11: for ( n = 0; i < instance_number( ob[ i ] ); ^ at position 37: Unknown variable ob or array index out of bounds EDIT: Ten już znikł ale jest kolejny: ___________________________________________ ERROR in action number 1 of Create Event for object object0: Error in code at line 11: for ( n = 0; n < instance_number( ob[ n ] ); n += 1 ) ^ at position 36: Unknown variable ob or array index out of bounds Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dragon Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 Jedziesz na żywioł Marek, nie :P ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 Jo. :P przeczytaj mój edit, skopiuj sobie ponownie ten kod z 3 postów wyżej E: jeszcze jedna mała poprawka ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 6 Kwietnia 2010 Autor Udostępnij Opublikowano 6 Kwietnia 2010 Ok działa. Prosiłbym jeszcze tylko o pomoc we wczytywaniu planszy do gry. Czy trzeba tworzyc każdy obiekt osobno?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bartas Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 ja mam to tak zrobione: GML var numeracja, sec, nr; sec=0 nr=0 numeracja[nr]=0 with (all) { ini_open('mapa.ini') sec = x div 1000 + y div 1000 * 3; nr = sec; numeracja[nr] += 1; ini_write_string('s' + string(sec), 'obj' + string(numeracja[nr]), object_get_name(object_index)); ini_write_real('s' + string(sec), 'objind' + string(numeracja[nr]), object_index); ini_write_real('s' + string(sec), 'objx' + string(numeracja[nr]), x); ini_write_real('s' + string(sec), 'objy' + string(numeracja[nr]), y); ini_write_real('s' + string(sec), 'total', numeracja[nr]); ini_close() } Można też z pętlą for, ale chyba łatwiej z with :). Ten kod ci zapisze nazwę obiektu, index, x, y, podzieli na sektory i zapisze liczbę wszystkich obiektów w sektorze. Łatwo go zmodyfikować żeby nie zapisywał sektora. Tylko potem jeszcze musisz sobie zaszyfrować plik za mapą coby nikt sobie nie edytował :) Marek, też próbowałem z for ale jak ktoś ma dużo obiektów w grze to niewygodne bo trzeba wszystkie do tablic dodać ;/ A jak nie chce żeby wszystkie obiekty sie zapisywały to wystarczy sprawdzać ifem index obiektu. EDIT: jak dodawałem to posta wyżej jeszcze nie było :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 6 Kwietnia 2010 Autor Udostępnij Opublikowano 6 Kwietnia 2010 Może jest to dobry sposób, lecz proszę o pomoc Marka.S ponieważ on pomógł mi napisac ten pierwszy kod. EDIT: Niedoczytałem że to jeszcze dotyczyło zapisu. Proszę o pomoc Marka.S z wczytaniem planszy do gry. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 bartas mylisz sie :P moj sposób wcale nie jest skomplikowany. A jeśli chodzi o ta większą ilość obiektów to tak samo moge sprawdzić warunkiem na pętli :P Napisze Ci ten odczyt jak bede w domu, teraz pisze z komorki :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 6 Kwietnia 2010 Autor Udostępnij Opublikowano 6 Kwietnia 2010 Ok dzięki. Czekam na kod. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 Kiedyś był taki art na GMClanie (nie mogę go teraz znaleźć) gdzie bodajże Tymon przedstawiał właśnie taki skrypt do zapisywania i odczytywania obiektów z rooma. Marek.S ma bardzo podobny skrypt ;) Kiedyś mniej/więcej zapisałem ten skrypt Tymona, więc umieszczę go tu, jeśli Tymek pozwoli ;p A ewentualne błędy sobie poprawisz. GML var _ilosc_obiektów, _wszystko; _ilosc_obiektow = 0; _wszystko = ""; file_read_open( argument0 ); _wszystko = file_read_string(); file_close(); _ilosc_obiektow = string_copy(_wszystko, 1, string_pos('|', _wszystko) - 1); _wszystko = string_replace(_wszystko, _ilosc_obiektow + '|', ''); repeat (real(_ilosc_obiektow)) { _data_temp = string_copy(_wszystko, 1, string_pos('|', _wszystko) - 1); _wszystko = string_replace(_wszystko, _data_temp + '|', ''); if (string_replace_all(_data_temp, ' ', '') != '') { _x = string_copy(_data_temp, 1, string_pos('|', _data_temp) - 1); _data_temp = string_replace(_data_temp, _x + '|', ''); _y = string_copy(_data_temp, 1, string_pos('|', _data_temp) - 1); _data_temp = string_replace(_data_temp, _y + '|', ''); _object_index = string_copy(_data_temp, 1, string_pos('|', _data_temp) - 1); _data_temp = string_replace(_data_temp, _object_index, ''); if (string_replace_all(_x, ' ', '') != '' && string_replace_all(_y, ' ', '') != '' && string_replace_all(_object_index, ' ', '') != '') { instance_create(_x, _y, _object_index); } } } To Ci pewnie też pomoże :) Pozmieniałem nazwy (jakie to były czasy) żeby sobie wtedy ułatwić, a wyszły błędy ;P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Kwietnia 2010 Udostępnij Opublikowano 6 Kwietnia 2010 możesz sprawdzić czy działa: GML file_txt = file_text_open_read( 'mapa_txt.map' ); while ( not file_text_eof( file_txt )) { line = file_text_read_string( file_txt ); file_text_readln( file_txt ); pos = string_pos( '|', line ); object = string_copy( line, 1, pos -1 ); line = string_copy( line, pos + 1, string_length( line )) pos = string_pos( '|', line ); xx = string_copy( line, 1, pos -1 ); line = string_copy( line, pos + 1, string_length( line )) yy = line; instance_create( real( xx ), real( yy ), real( object )); } file_text_close( file_txt ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 7 Kwietnia 2010 Autor Udostępnij Opublikowano 7 Kwietnia 2010 Marek.S : Niestety nie działa. Nie pojawia się także żaden błąd. Poprostu nic nie wczytuje. Pokombinuje jeszcze, ale proszę o pomoc. EDIT: W jakim evencie to wywoływac? Ja wywołuje w Left Button. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 7 Kwietnia 2010 Udostępnij Opublikowano 7 Kwietnia 2010 podeślij projekt to Ci zrobie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 7 Kwietnia 2010 Autor Udostępnij Opublikowano 7 Kwietnia 2010 Mój projekt? Jeszcze nie zacząłem go robić. Zrobiłem tylko jakąś próbną gierkę z jakiś gotowych spritów. Nie da się jeszcze nawet ustawiać obiektów.Poustawiałem je ręcznie Ale dam ci link do tego pliku. Prosiłbym abyś poprawił błąd. Link: >>>PLIK<<< Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 7 Kwietnia 2010 Udostępnij Opublikowano 7 Kwietnia 2010 Po pierwsze wczytywany tekst jest stringiem, trzeba go na liczbe rzeczywistą przerobić. Niestety zła kolejność argumentów w instance_create =p GML file_txt = file_text_open_read( 'mapa_txt.map' ); while ( not file_text_eof( file_txt )) { line = file_text_read_string( file_txt ); file_text_readln( file_txt ); pos = string_pos( '|', line ); object = string_copy( line, 1, pos -1 ); line = string_copy( line, pos + 1, string_length( line )) pos = string_pos( '|', line ); xx = string_copy( line, 1, pos -1 ); line = string_copy( line, pos + 1, string_length( line )) yy = line; instance_create( real( xx ), real( yy ), real( object )); } file_text_close( file_txt ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 7 Kwietnia 2010 Autor Udostępnij Opublikowano 7 Kwietnia 2010 Wielkie dzięki Marek.S narazie wszystko działa. W razie czego będę pisał! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 7 Kwietnia 2010 Udostępnij Opublikowano 7 Kwietnia 2010 Marku a jeżeli mam w grze do każdego z tych obiektów dodaną zmienną active- dzieki której dany obiekt sie włącza to jak po załadowaniu Twoim kodem dodać do tworzonych obi tą zmienną? np mam obj tower_photon_cannon który ma active=true w grze, dzięki czemu strzela. Zapisuje Twoim sposobem i później przy odczycie chciałbym ustawic tę zmienną także na true. zrobiłem tak ale dupa z tyłu.. : GML instance_create( real( xx ), real( yy ), real( object )); object.active=true; E: poradziłem sobie GML tower=real(object); tower.active=true; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 12 Kwietnia 2010 Autor Udostępnij Opublikowano 12 Kwietnia 2010 Mam problem!! Robiłem kodem Marka.S zapis w edytorze w oddzielnej grze i sprawdziłem że jest poprawny. Wczytywanie w grze też działa lecz np. zamiast opunkt tworzy osciana, a niektórych obiektów nie tworzy wogóle! Dlaczego? Czy gra i edytor muszą byc w jednej grze? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dragon Opublikowano 12 Kwietnia 2010 Udostępnij Opublikowano 12 Kwietnia 2010 Nie, gdzieś w przykładach jest jak zrobić edytor w oddzielnym pliku :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 12 Kwietnia 2010 Udostępnij Opublikowano 12 Kwietnia 2010 nie muszą, ale jeśli przy tworzeniu drugiego projektu dodawałeś obiekty w innej kolejności niż w pierwszym to przypiszą im się różnie indexy moje wczytywanie polega właśnie na zapisie tych indeksów i potem odczytaniu i na ich zasadzie odtwarzane są instancje po chłopksu, jeśli w projekcie zapisu masz np o_sciana z indeksem 1, a w projekcie drugim obiektem o indeksie 1 jest miś to stworzy misia a nie ścianę. jeśli chcesz aby było tak samo dopilnuj aby w obu projektach obiekty były tych samych obiektów, jeśli nie to trzeba przebudować system, zapisywać zamiast indeksów nazwy bądź jakiś identyfikator zastępczy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 13 Kwietnia 2010 Autor Udostępnij Opublikowano 13 Kwietnia 2010 Marek.S: A to dużo trzeba by było przebudowywać? Bo jeżeli tak to jaki jest inny sposób bo zależy mi na tym żeby to było oddzielnie, a nie chcem układać obiektów od nowa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę