
ereg
Użytkownicy-
Postów
253 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez ereg
-
tutaj masz gotowe algoritmy v roznych jezykach. znajdz ten ktory nejlepiej odpowiada twej wiedzy a napisz sobie GM kod :)
-
GM: studio niemam, ale sprawdz gml_Object_Chat_Draw_0 moze jest cos v scrypt scr_drawlines? error vygloda jak by niemogl znalezc jakis objekt lub zmienno.(ale tylko zgaduje ... -1.view_top)
-
Krzywe Beziera - zastosowanie w grach
ereg odpowiedział(a) na Amaterasu temat w Gotowe Skrypty, przykłady, dodatki, silniki 3D dla GM
spoiler chcialem tylko spowodu dlugosci scryptow mas racje nic nowego pod sloncem. :) brakovalo mi dostepu do GM8.1(innym moze tez), dlatego umiescilem je do twego tematu. obliczenia so z neta, ja tylko zrobilem z nich script latvy do vbudovania i uzycia v dovolnym programu :) -
Krzywe Beziera - zastosowanie w grach
ereg odpowiedział(a) na Amaterasu temat w Gotowe Skrypty, przykłady, dodatki, silniki 3D dla GM
vygloda dobrze, ale niemam 8.1 :) wiec pozvole sobie dodac pare scryptovanych fukcji, ktore uzywam. (przepraszam ,ale nieumiem uzyc spoilera. nic nierobi) cala krzyva: GML //*************************************************** ********************** * Bezier() (funkcja sześciennych krzywej Beziera (n = 3) przez EREG H.) * * Opis: dostosowany skrypt Beziera zarządzanie 4 punkty kontrolne. * Script obliczća pojedyncze punkty krzywych Beziera z określoną dokładnością (argument12) * Następnie zapisuje indywidualnie początki do ds_grid. * Ds_grid jest przechowywany w zmiennej globalnej global.DS_GRIDbezier * W o_bezier DRAW przypadku jest przykładem tego, co kod można użyć danych z ds_grid * Krzywej Beziera tworzy gładką krzywą. Dla lepszego pomysłu patrz wiki: * cs.wikipedia.org/wiki/Bézierova_křivka * lubovo.misto.cz/_MAIL_/curves/bezierr.html * * Zastosowanie: ustawienie różnych parametrów ścieżek (spada, rzucanie), wpływ artykułów sił * (Np. wiatr na spadających liści, strumieniem wody pływające na drewnie) * Na przykład zmienia swoje motyl menedżerów w oparciu o zmiany w pozycjach 1-4 punktów. * * argumenty: * argument00 = ax x souradnice bodu a * argument01 = ay y souradnice bodu a * argument02 = w1 w waga punktu. w = 0 (w linii prostej), w <1 (elipsa), w = 1 (parabola), w> 1 (hiperbola) * argument03 = bx * argument04 = by * argument05 = w2 * argument06 = cx * argument07 = cy * argument08 = w3 * argument09 = dx * argument10 = dy * argument11 = w4 * argument12 = pocet usecek+1* * * priklad: * bezier(ax, ay, w1, bx, by, w2, cx, cy, w3, dx, dy, w4, krok, nr); * * return: ID cislo ds_grid-u ve kterem je ulozena bezier() krivka. * * zdroj: [url="http://gmc.yoyogames.com/index.php?showtopic=329984&page=2"]http://gmc.yoyogames.com/index.php?showtop...9984&page=2[/url] * *************************************************************************/ var cp1x, cp1y, cp2x, cp2y, cp3x, cp3y, cp4x, cp4y, cp5x, cp5y; var drawx, drawy, prevx, prevy, dsId, dsIdName, krok, nr; var t, t13, t3, w1, w2, w3, w4, wt; ax = argument0; ay = argument1; w1 = argument2; bx = argument3; by = argument4; w2 = argument5; cx = argument6; cy = argument7; w3 = argument8; dx = argument9; dy = argument10; w4 = argument11; krok = argument12; nr = argument13 // nastavi cislo gridu bezierovy krivky dsIdName = "DS_GRIDbezier"+string(nr); variable_global_set(dsIdName, ds_grid_create(4,krok+1) ); dsId = variable_global_get(dsIdName ); //ds_grid_clear(dsIdName,0); // ulozi 1. souradnici 1. usecky prevx = ax; prevy = ay; // kontrola kvuli deleni 0 if (krok<=0) {krok=0.000001; }; // vypocet bezierovy krivky a ulozeni souradnic do ds_GRID for(iti=0; iti<=krok; iti+=1){ t = iti/krok t1 = 1 - t; t13 = t1 * t1 * t1; t3 = t * t * t; wt = t13*w1 + t*t1*t1*3*w2 + t*t*t1*3*w3 + t3*w4; if (wt=0){wt=0.000001; }; // kontrola kvuli deleni 0 // vypocet souradnic bodu na krivce drawx = (ax*t13*w1 + bx*t*t1*t1*3*w2 + cx*t*t*t1*3*w3 + dx*t3*w4)/wt; drawy = (ay*t13*w1 + by*t*t1*t1*3*w2 + cy*t*t*t1*3*w3 + dy*t3*w4)/wt; ds_grid_add(dsId, 0, iti, prevx); ds_grid_add(dsId, 1, iti, prevy); ds_grid_add(dsId, 2, iti, drawx); ds_grid_add(dsId, 3, iti, drawy); prevx = drawx; prevy = drawy; } // ulozi posledni usecku do GRID ds_grid_add(dsId, 0, iti, prevx); ds_grid_add(dsId, 1, iti, prevy); ds_grid_add(dsId, 2, iti, dx); ds_grid_add(dsId, 3, iti, dy); return dsIdName; jedyny punkt ustavienie: GML //************************************************* ********************** * Beziera () (funkcja sześciennych krzywej Beziera (n = 3) przez EREG H.) * * Opis: dostosowany skrypt Beziera zarządzanie 4 punkty kontrolne. * Skrypt oblicza punktów Beziera krzywa z określoną dokładnością (argument12) * Następnie zwraca x, y na krzywej. * Krzywej Beziera tworzy gładką krzywą. Dla lepszego pomysłu patrz wiki: * Cs.wikipedia.org/wiki/Bézierova_křivka * lubovo.misto.cz/_MAIL_/krzywe/bezierr.html * * Zastosowanie: ustawienie różnych parametrów ścieżek (spada, rzucanie), wpływy z artykułów sił * (Np. wiatr na spadających liści, strumieniem wody pływające na drewnie) * Na przykład, piłka zmienia swoje menedżerów w oparciu o zmiany w pozycjach 1-4 punktów. * * Argumenty: * Argument00 = ax x współrzędnych punktu i * Argument01 = y i y współrzędne punktu * Argument02 w = masa Punkt w1. w = 0 (w linii prostej), w <1 (elipsa), w = 1 (parabola), w> 1 (hiperbola) * Argument03 = bx * Argument04 = by * Argument05 = w2 * Argument06 = cx * Argument07 = cy * Argument08 = w3 * Argument09 = dx * Argument10 = dy * Argument11 = w4 * Argument12 = Punkt między 0 a 1 = 0% do 100% krzywej orbity * * Zwraca: globalnej tablicy, która przechowuje x,y punktu na krzywej. * Wybór pól odbywa się poprzez BezierGetP(stringName) * Albo pomoc variable_global_get(nazwa); * * Przykłady: * Beziera (ax, ay, w1, bx, by, w2, cx, cy, w3, dx, dy, w4, krok, punkt); * * Źródło: [url="http://gmc.yoyogames.com/index.php?showtopic=329984&page=2"]http://gmc.yoyogames.com/index.php?showtop...9984&page=2[/url] * ************************************************** ***********************/ var cp1x, cp1y, cp2x, cp2y, cp3x, cp3y, cp4x, cp4y, cp5x, cp5y; var drawx, drawy, prevx, prevy, dsId, dsIdName, krok, nr; var t, t13, t3, w1, w2, w3, w4, wt; ax = argument0; ay = argument1; w1 = argument2; bx = argument3; by = argument4; w2 = argument5; cx = argument6; cy = argument7; w3 = argument8; dx = argument9; dy = argument10; w4 = argument11; bod = argument12; nr = argument13; // nastavi cislo gridu bezierovy krivky dsIdName = "ARRAYbezier"+string(nr); // kontrola kvuli deleni 0 if (bod<=0) {bod=0.000001; }; // vypocet bezierovy krivky a ulozeni souradnic do ds_GRID t = bod t1 = 1 - t; t13 = t1 * t1 * t1; t3 = t * t * t; wt = t13*w1 + t*t1*t1*3*w2 + t*t*t1*3*w3 + t3*w4; // kontrola kvuli deleni 0 if (wt=0){wt=0.000001; }; // vypocet souradnic bodu na krivce variable_global_set(dsIdName+"[0]", (ax*t13*w1 + bx*t*t1*t1*3*w2 + cx*t*t*t1*3*w3 + dx*t3*w4)/wt ); variable_global_set(dsIdName+"[1]", (ay*t13*w1 + by*t*t1*t1*3*w2 + cy*t*t*t1*3*w3 + dy*t3*w4)/wt ); return dsIdName; jedyny punkt latve uzyskanie x albo y:GML /************************************************* **************************** * BezierGetP (Punkt Beziera przez Ereg H.) * * Opis: wybiera współrzędne punktu P na krzywej Beziera z pola danego argumentu * * argumenty: argument0 = jmeno_ds_grid * argument1 = cislo nebo retezec "x" nebo "y" bodu * ("x" muze byt nahrazeno 0/false a "y" muze byt nahrazeno 1/true) * * Zwraca: wielkość współrzędnych x lub y * * Przykłady: object.x = BezierGetP(global.ARRAYbezier1,x) * object.x = BezierGetP(variable_string,x) * instance_create( BezierGetP(pok,0), BezierGetP(pok,"y"), o_pokus1 ); * instance_create( BezierGetP(pok,false), BezierGetP(pok,true), o_pokus1 ); * *****************************************************************************/ dsIdName = argument0; osa = argument1; if (!variable_global_exists(dsIdName+"[0]") ) {return "BezierGetP: array error"; }; if (string(osa)=="x" || string(osa)=="0") {osa=0; } else if (string(osa)=="y" || string(osa)=="1") {osa=1; } else {return "BezierGetP: axis error"; }; return variable_global_get(dsIdName+"["+string(osa)+"]" ); -
zaladuj z ini text do stringa_wstepu potem znak po znaku dodavaj do finalovego_stringa i do testu uzyj string_width(string) spravdzaj szerokosc room jakwiekszy to dodaj "#" drukuj linie przyklad jest prosty(object info), jednoobiektovy GMK: GML Information about object: object0 Sprite: <no sprite> Solid: false Visible: true Depth: 0 Persistent: false Parent: <no parent> Mask: <same as sprite> Create Event: execute code: _txt_input=""; _txt_draw=""; Step Event: execute code: if (keyboard_check_released(vk_anykey)) { if (string_width(_txt_input)+10>room_width) { _txt_input+="#"; _txt_draw+=_txt_input; _txt_input=""; }; _txt_input+=keyboard_lastchar; }; Draw Event: execute code: draw_text(0,0,_txt_draw); draw_text(0,string_height(_txt_draw),_txt_input);
-
dobrze sie gra :thumbsup: jak dla mnie wolal bym jesce dodac mozlivosc grania ve dvuch playerach. chyba nie zatrudne zrobic PL1 vs PL2: - sterovanie na keyboard - mniej przeskod i nizsa szybkosc pozvoli na konkurencie - odrucanie przecivnika v bok przy kolizji na przeskody - jump by uniknoc zderzeniu s innym graczem moze i koop by sie dal: - by otvorzyc brane, treba stluc kvadrat vybranego koloru. ve dvuch =dva kvadraty itp. - albo koop v stylu ja zbieram zielone, ty modre a inne nam ubierajom lives tzrymam kciuki :rolleyes:
-
samochod niecognie sviatlo za sobo, ale nierobi CLEAR dla sviatla v surface. GML // object oCtrlLight event STEP: surface_set_target(global.sfShadow); { draw_clear_alpha($dddddd, 1); draw_set_blend_mode(bm_subtract); { with(oLight) { draw_clear_alpha($dddddd, 1); // TUTAJ NOWY CLEAR draw_sprite_ext(spr, 0, x-view_xview[0], y-view_yview[0], sclX, sclY, dir, make_color_rgb(alpha*255, alpha*255, alpha*255), 1); } } draw_set_blend_mode(bm_normal); draw_set_blend_mode(bm_add); { with(oLight) { if(cAlpha > 0) { draw_sprite_ext(spr, 0, x-view_xview[0], y-view_yview[0], sclX, sclY, dir, $ffffff-color, cAlpha); } } } draw_set_blend_mode(bm_normal); } surface_reset_target();
-
chociaz niepracuje s delfi ani z pascal to zasady pracy z file so bardzo podobne do pracy v prawie kazdym jezyku, tylko znadz sobie pravidlovy zapis (syntax). :) nieviem jestli to ta tva syntax, ale warto tu zbadac. -to co pisal @ALT jest dobre do txt file i da sie stosowac procedury. -jezeli v file masz zavse 3 columny odseparovane znakiem space, to mozes uzyc tez binarnego odczytyvania z file. v bin czytas byte po byte a to jest v takim przypadku korzystne, bo latvo napisac pentle bez vycinania stringow i analizy jakie one so. mam nadzieje, ze chociaz trosecke cie nakierovalem.
-
tak choose jest najlepszy. jednak dobrze jest vytlumaczyc, dlaczego program niedziala popravnie. :thumbsup: jego kod mogl dzilac, jak by byl popravnie zrobiony. mogl napisac: GML a = random(3) if ( a < 1) background_assign(Tlo2,back) else if ( a < 2) background_assign(Tlo4,back) jasne, taki kod ma sve specifika. trzeba zmienia tlo tylko kdy zmienna ma dosyc nisko vartosc BTW: przepraszam. niechcialem pisac przykladu, bo inni v sumie napisali podstavy, ale jak juz pise, to nic mnie nepovstrzyma od pokazania jak tez mozna ;)
-
czasami show_message nienadaje sie (v STEP event itp.) v takim razie przyda sie draw_text :thumbsup:
-
mala modyfikacia przykladu jaki podales. dodaj GML obiektu Kratka v eventu moze step albo inny kiedy v ktorym ruzsasz inventarzem GML x = Inwentarz.x + i * ( sprite_get_width( Inwentarz.iSprite ) + Inwentarz.iOff ); y = Inwentarz.y + j * ( sprite_get_height( Inwentarz.iSprite ) + Inwentarz.iOff ); krata inventarza beidzie sie ruszala tak, jak ty ruzsysz obiekt inventarz :)
-
1, uzytkovnik podaje imie (emailem) v GM a ty czytas v nie GM? 2, uzytkovnik podaje imie (emailem) v nie GM a ty czytas v GM? 3, uzytkovnik podaje imie (emailem) v GM a ty czytas v GM?
-
Jaklub juz napisal, to moze tylko podsumuje :) GML //jakis event v obiektu_A if (image_xscale>5 && next==1 ) { id_obiekt_B = instance_create(x, y, obiekt_B); id_obiekt_B.depth = depth+1; }; twoj problem vidze v zlym uzycu zmiennej depth
-
Inżynier Game Makera (c)
ereg odpowiedział(a) na Trupsoft temat w Gotowe Skrypty, przykłady, dodatki, silniki 3D dla GM
calkovicie sie zgadzam, poczotkujocy niech zda sobie sprave iz jest viecej sposobow jak vykonac jakis kod, ale ze czasami jest duza roznica miedzy tymi sposobami :) spotykam sie tez z problemem, ze ludzie czesto niemajom zielonego pojecia o uzyvaniu zmiennych v GM :) -
jezeli chodzi o wczytyvanie tylko a-z, A-Z, 0-9 to jest latviej uzyc string_lettersdigits naprzyklad: _txt="witam v domu 2 pany/3panie" draw_text(10,10,string(_txt)); draw_text(10,30,string_lettersdigits(_txt)); to rezultat jest: witam v domu 2 pany/3panie witamvdomu2pany3panie
-
czesto byva tak, ze problem jest na tam, kam niepatrzysz :) zrob to samo rysovanie sprita v nowym projektu, i zobaczysz iz bedzie dzialac popravnie. zatem cos innego psuje funkcje rysovania. zatem zrob co radzo ludzie vyzej. a tak naviasem.. nie od parady jest spravdzenie Scripts/Check Resources Names