
ereg
Użytkownicy-
Postów
253 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez ereg
-
nieczytalem dokladnie o co ci chodzi(i niechce sie teraz domyslac), ale dle dalszych postow proponuje pomyslec nad algorytmem ktory by: - testowal caly screen z 1 instancji, ale tylko 1x . mozna wtedy cesto podzielic screen na segmenty ktore nietrza testowac i jesce zmiejsyc czas wykonywania kodu - niezawse jest powinny deaktiwowac instancje. -- jezeli jej nietrzeba to destroy -- jezeli ma sie znow pojawic to visible=false lub zmiana depth zamiast deaktivate - jezeli skryty blok ma byc tlo, to dlaczego go niewytwarzac az w dobie zniscenia bloku ktory go zaslanial? mozna tu uzyc file_ -- mozna wtedy pomyslec o wirtualnych testach. kody blokow so v datowej strukturze i testy tylko liczo id z tej struktury, nietrza vogule testowac instancje jezeli bedzies chciec miec swiat 50000x50000 blokow to cos takiego bedzie trza :thumbsup:
-
dokladnie :) tez pisalem bys uzyl help a w nim vystarczy napisac file_ i mozes dowoli wybierac wedlog tego co cie interesuje. mysl o mnie ze jestem za leniwy by napisac calo komende, kdyz kopiowanie helpu uwazam za zbedne ja zawse o dobrych programatorach myslalem, ze to lenie. bo zamiast pisac dlugie pentle zmieniajo algorytm, skracajoc tym kod z kilkuset linijek na zaledwie dziesec :thumbsup:
-
1, zapis objektu do file -mowis sobie struktura file bedzie taka: -- id_objektu(1byte), x(2byte), y(2byte), hp(1byte), direction(8 axis ... 1byte), speed (1byte) . 8 byte na jeden objekt a na 9. byte jest drugi objekt. i tak dalej. - otwierasz file_xxx_open (xxx = bin/text/ini. bin jest fajny) - zapisujesz wszystkie objekty wedlog struktury ktoro sobie ustaliles. - zamykasz file_ do rooma by wczytac takto zapisane objekty robisz to samo, ale zamiast zapisiwac zmienne objektu do file, to je wczytujes z file do zmiennych _id, _x, _y, _hp, _direction, _speed. te uzyjesz do stwrorzenia instancji v roomie -- id_instancji=instance_create(_x,_y,_id_objektu) -- id_instancji.hp=_hp -- id_instancji.direction=_direction -- id_instancji.speed=_speed 2, no to fajnie :) 3, podobno jak objekty tylko zapisujesz inne zmienne poczytaj o: room_add() room_instance_add(ind,x,y,obj) room_set_
-
fajne jest miec swoj editor ktory zapisuje roomy i objekty do pliku. zapis do pliku (wybieracie bin/ini/txt) w formacie ktory wy wymyslicie. format ulozienia danych moze byc dowolny bo to zas wy bedziecie odczytywac ten format w samej grze. mysle ze niepisalisce nic o GM:S a to dobrze bo tak to zupelnie inna sprava. v gm8 niema problemu zapisujecie wzystkie wazne parametry i zmienne. to dotyczy jak zapisu rooma, tak zapisu objektu. jezeli ma byc w roomie nowy objekt, ktory w grze niema, to musicie go zbobic znow przez: - objekt_add - event_add widz help jezeli objekt jest juz w gre to tylko zapisujecie do pliku jego id, x, y, i to co jest inne od originalnego objektu. by potem moc poprawnie odtworzyc objekt w roomie. doteraz mailem bardzo malo czasu, ale moze po nowym roku sie to poprawi( obi :) ) to jak by bylo cos niejasnego, to moze pozniej pokaze jakis przyklad
-
Zapis zmiennych z wielu obiektów
ereg odpowiedział(a) na Mateusz Nejman temat w Pytania początkujących
jak bys uzywal datowych struktur ds_ to kazda umie dac swa wielkosc, nie jak array. chyba zu raz pisalem o produ i ampermetru :) jest barddzo podobny do sposobu szmalu, ale mozna wedlog potrzeby uzyc roznych typow ds_ sam wypis, tak jak pisal I am vader, lub jakis format stringu(draw_text_ext, ...) -
_idn=obj_strzalka mowi grze, ze obj_strzalka ma podozac za obj_strzalka daj bodz _idn=obj_cars lub _idn=obj_char . co dajesz zalezy od tego jesli gracz jedzie v aucie(_idn=obj_cars) lub chodzi na piechote( _idn=obj_char)
-
obj_cars. a obj_char. zmien na _idn. nastepnie aktualny objekt dla strzalky wpisujesz tylko do _idn a wszystko gra
-
w obj_strzalka uzywaj zmiennej dla objektu obj_char GML // event in obj_strzalka _idn=obj_char; x=_idn.x; y=_idn.y; //akcja zmiany obj_char na obj_car _idn=obj_car; x=_idn.x; y=_idn.y; podobno zmien kazdy odkaz na zmienno obj_char !
-
na poruzszanie moze by mogl byc test GML if ( abs(x-xprevious) + abs(x-yprevious) >0 ) {/* akcja - postac rusza sie*/ };mozna prosciej napisac, ale chcialem by bylo widac o co mi chodzi
-
osobisce niebardzo lubilem a nielubie Treat uninitialized variables as 0 bo troche niepozornosci, i masz problem dlaczego sie program zachowuje dziwnie :)
-
proste rozwiozanie :) kazdy ampermetr ma swoj queue a id( od queue) jest w _amperid w objektu ampermetra wystarczy przy kolizji produ z ampermetrem zapisac id produ do id wlasciwego ampermetra. cos w tym stylu GML Information about object: o_hrac Sprite: sprite0 Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: execute code: _action=false; Step Event: execute code: _idamp=instance_place(x,y, o_nepritel); //if (place_meeting(x,y, o_nepritel) && !_action) { if (_idamp && !_action) { //ds_queue_enqueue( o_nepritel._amperid, id); ds_queue_enqueue( _idamp._amperid, id); _action=true; }; //if (!place_meeting(x,y, o_nepritel) ) {_action=false; }; if (!_idamp ) {_action=false; }; Mouse Event for Left Button: execute code: x=mouse_x; y=mouse_y; troche wypolerowalem kod od zbednych testow instance :thumbsup: EDIT: queue jest bardzo wydajne. jesli bedzie duuuzo prod objektow, to niespowalnia bieg programu u mnie dopiero przy 2000 instancjach zwolnil z 90fps na 59fps
-
kazdy prod wstepujoc do ampermietra moze zapisac swe id w datowej strukrurze( polecam queue) ampermierz tylko policzy wszystkie objekty wedlog ich id mozna zatem zrobic inne wartosti produ dla roznych objektow ipt. :) moze pokaze szybki przyklad GML Information about object: o_hrac Sprite: sprite0 Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: execute code: _action=false; Step Event: execute code: if (place_meeting(x,y, o_nepritel) && !_action) { ds_queue_enqueue( o_nepritel._amperid, id); _action=true; }; if (!place_meeting(x,y, o_nepritel) ) {_action=false; }; Mouse Event for Left Button: execute code: x=mouse_x; y=mouse_y; ______________________________________________________ Information about object: o_nepritel Sprite: sprite1 Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: execute code: _amperid=ds_queue_create(); _amper=0; Step Event: execute code: // _amper=0; for( iti=0; iti<ds_queue_size(_amperid); iti+=1){ _idn=ds_queue_dequeue(_amperid); if(instance_exists(_idn)){ if place_meeting(x, y, _idn){ _amper+=1; ds_queue_enqueue(_amperid, _idn); }; }; }; Mouse Event for Glob Middle Released: execute code: instance_create(mouse_x, mouse_y, o_hrac); Draw Event: execute code: draw_sprite_ext(sprite_index,-1,x,y,1,1,0,c_white,1); draw_text(x,y-30, "amper="+string(_amper)+" ilosc _amperid v queue="+string(ds_queue_size(_amperid)) ); o_hrac= prod o_nepritel= ampermetr
-
przepraszam, ale glowa mi to niebierze. jesli niemozna wogule pokazac strone internetowo v GMS, to dlaczego chlopaka gonicie po googlu apod ? :) szperam bo tema mnie interesuje z dlugiej perspektywy
-
to jaka werzja GMS zna tako komende? :) robice z tego tajemnice wojskowo a duzo informacji z googla jest do kitu. ja przyznaje niewiem jak na to, bo z webem niedzalialam, ale niejest to tak proste dla kogos kto niejest zbiegly roboto na webie prze gm.
-
no chyba jakies roznice so :) bo ten kod jest edit / Show objekt information :thumbsup: mozes tak odtworzyc ten sam projekt a bedzie dzilac.
-
Inteligentni Wrogowie i Sprzymierzeńcy
ereg odpowiedział(a) na LolikZabijaka temat w Pytania początkujących
patrol mozesz zrobic trzeba tak GML Information about object: o_enemy Sprite: sprite1 Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: execute code: // start _x1=50; _x2=50; // end _y1=100; _y2=150; // direction _ruch=1; // speed _spd=3 Step Event: execute code: if (_ruch==0) {/*stoji na miesjscu, mozna dac jakis kod*/}; else if (_ruch==1) { // ruch do x2,y2 x+=_spd*(x<_x2); y+=_spd*(y<_y2); //jesli dotarl do x2,y2 zmien kierunek ruchu do x1,y1 if ((x>=_x2) && (y>=_y2) ) { _ruch=-_ruch; }; } else if (_ruch==-1) { // ruch do x1,y1 x-=_spd*(x>_x1); y-=_spd*(y>_y1); //jesli dotarl do x1,y1 zmien kierunek ruchu do x2,y2 if ((x<=_x1) && (y<=_y1) ) { _ruch=-_ruch; }; }; fajne je to ze mozesz kierowac traso zmienajoc x1, y1 a x2, y2, lub zatrzymac niemca jak ma podejrzenie :D by sie mogl rozglodac( fajne by poszerzyl mu sie zasieg detekcji kdy stoji) jesli instancja jest mimo droge patrolu to sama jodzie najkrotso traso na trase jest maly minus jesli _spd jest napr 3, trasa na x1 x2 na 50 a instancja na 52 to w stepu instancja jest na 49 a nie 50. jezeli to vazne bezdie trza poprawka :) cos w stylu GML if (_ruch==0) {/*stoji na miesjscu, mozna dac jakis kod*/}; else if (_ruch==1) { // ruch do x2,y2 x+=_spd*(x<_x2); y+=_spd*(y<_y2); //jesli dotarl do x2,y2 zmien kierunek ruchu do x1,y1 if ((x>=_x2) && (y>=_y2) ) { _ruch=-_ruch; x=_x2; // dokladnosc trasy na 1 pix y=_y2; }; } else if (_ruch==-1) { // ruch do x1,y1 x-=_spd*(x>_x1); y-=_spd*(y>_y1); //jesli dotarl do x1,y1 zmien kierunek ruchu do x2,y2 if ((x<=_x1) && (y<=_y1) ) { _ruch=-_ruch; x=_x1; y=_y1; }; }; ale mozliwosci jest duzo -
tu mas pokazane jak by moglo wyglodac: GML Information about object: o_bohater Sprite: sprite0 Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Step Event: execute code: x=mouse_x; y=mouse_y; Collision Event with object o_ufo: execute code: instance_destroy(); instance_create(x,y, o_ufobohater); with(other) {instance_destroy(); }; ______________________________________________________ Information about object: o_ufo Sprite: sprite1 Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> ______________________________________________________ Information about object: o_ufobohater Sprite: sprite2 Solid: true Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: execute code: alarm[0]=5*room_speed; Alarm Event for alarm 0: execute code: // to same ale s instance change //instance_destroy(); //instance_create(x,y, o_bohater); instance_change(o_bohater,false); Step Event: execute code: x=mouse_x; y=mouse_y; _______________________________________________
-
@Daniealus: mozna, ale jesli ma dobrze zorganizowane no wierze ze sie niepomyli, lub latwo znajdzie blad :) @Opisek: niepiszes co niedzialalo s alarmami. obecnie niema powodu dlaczego by niemialy dzalac: 1, Zderzenia bohatera z ufem - zmien bohatera na ufobohatera (ufobohater v create ma ustaviony alarm na zmiane powrotno na bohatera) 2, Istance destroy dla ufa(robi sie jak jest v akcji 1, ) - znisc ufo 3, Istance change dla bohatera - po uplywu czasu alarm v ufobohaterze odpala zmiane na bohatera
-
@up: masz racje, ale jesli ma kazde ufo wiecej roznych eventow to czeka go dosyc roboty :) niemowojc jesli bedzie dodawa nowe ufa i zmienac stare sam zdecyduje jaki kod zwoli, ja tylko podpowiadam inne mozliwosci
-
zmienac v tej samej instancji jeden objekt za drugi moze miec sens, jezeli ma sie zmienic tez eventy. do tego sama zmiana sprite niewystarczy. fajne to moze byc jesli jest wiecej typow ufo a gracz tymcasowo przejmuje ich zdolnosci. co do "Unknown variable _timer" poprostu mogles dla ufozbohaterem niedac zmiennej _timer. sproboj zamiast instance_destroy+ instance_create uzyc instance_change, lub poprostu zadbaj by nowo zrobiona instancja miala potrzebne zmienne GML _idn=instance_create(x, y, ufozbohaterem); _idn._timer=_timer; obecnie ja ci pokazalem jak mozna i z timerem zrobionym v current_time, ale jak go aplikujesz w grze to czysto twoja sprawa :thumbsup: jak dobrze zrobisz ufazbohaterem to niebezdzie problemu.
-
dla textu GML draw_text(view_xview+5, view_yview+2,"Score"+string(score)); draw_text(view_xview+5, view_yview+52,"Punkty"+string(global.pkt)); draw_text(view_xview+5, view_yview+102,"suma score+ pkt"+string(score)+string(global.pkt)); jak bys chcial graficnie to vystarczy GML draw_rectangle(view_xview+1,view+y_view+1,view_xview+10*global.pkt,view_yview+32,1); modifikuj jak ci trza
-
score jest wyliczane z pkt, lub pkt=score, czy jak? :) poprostu jak cos sie nierobi izd od poczotku(definicji zmmiennej) do konca( wyswietlanie zmiennej na screen) i sprawdzaj czy kazdy faza rzeczywisce robi to co ma. mozesz uzywac debugera, lub naprzyklad show_message(string(global._pkt)), draw_text(10,10,string(global._pkt)) i podobne sposoby wedlug ograniczen. nienajlepszy pomysl jest dawac show_message do step lub draw
-
tak masz racje potem mozna uzyc global.pkt+=1; kdziekolwiek
-
wszystkie GM majo v debugerze Show Global Variables. zobaczys zabudovane global + swe global variables :) jezeli rysujesz przes draw global.ptk sprawdz - global.pkt zmienia sie? - dajesz prawidlowo do draw zawartosc global.pkt a niezmienia jej cos przypadkowo? 100% tylko jakis drobny bad broni suckcesu :) jak niepomoze to pokaz kody dotyczoce puktow
-
prosty przyklad, mozna duzo zmienic k lepszsemu :) ale teraz jest latwy na zrozumienie. GML // W o_gracz zrob eventy: // event create: _zycie=3; _xstart=x; // start pozycja _ystart=y; // event collision z o_sciana: _zycie-=1; x=_xstart; // powrot na start y=_ystart; // event step: if ( _zycie<1) { show_message("Koniec gry"); // kod na ukonczenie gry game_restart(); // zacni odnowa };