PanciK Opublikowano 15 Lipca 2008 Udostępnij Opublikowano 15 Lipca 2008 Witam Wiecie moze w jaki sposob zrobic wyswietlanie tabeli hi-score w menu?(nie chodzi mi o zwykla tabele wynikow:P) Wiem ze to jest mozliwe gdyz w tej grze tak zrobiono i calkiem niezle to wyglada :) Screen Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 15 Lipca 2008 Udostępnij Opublikowano 15 Lipca 2008 Ale screena zrobić dla takiej tabeli to nie łaska :confused: . Zaraz dam przykład. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 16 Lipca 2008 Udostępnij Opublikowano 16 Lipca 2008 co to jest hi-score? chyba highscore... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Pieter, tych dwóch określeń się używa do tego samego... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Najlepiej chyba ini z szyfrowaniem, no nie??? albo zmienne globalne a po kliknięciu "Exit" save do pliku i przy kolejnym uruchamianiu load -> Ja takie metody stosuję jak chce, żeby dane przetrwały >1 uruchomienie, ew. jeszcze można za pomocą rejestru, ale to odradzam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Miałem bajerowy przykład zrobić, ale nie mam ochoty i przez to kolejny zbędny post... Dodanie wyniku: GML _max = 10; _nick = get_string( "Podaj nick:", "Pental" ); highscore_add( _nick, global._score ); Wyświetlanie: GML for ( _i = 0; _i < _max; _i += 1; ) { draw_set_color( c_blue ); draw_set_halign( fa_left ); draw_text( x, y + 20 * _i, highscore_name( _i ) ); draw_set_halign( fa_right ); draw_text( x + 250, y + 20 * _i, highscore_value( _i ) ); } Raczej działa ;) . Można by było to nieco zoptymalizować, np. najpierw wyświetlanie wyniku, potem nicku, to by uniknęło potem ciągłego używania tej funkcji. I sprawdzanie czy wynik ostatni (używając zmiennej _max) nie jest większy od zmiennej, to by uniknęło ciągłego dodawania wyników :P . @Up: Najlepiej na gotowych funkcjach, same gdzieś to zapisują i nie trzeba pisać własnego systemu dodawania wyniku, a to wcale takie proste nie jest, jeśli ma być jeszcze sortowanie wg. daty, pierwszej litery, itp. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Nie, własny system - to jest proste. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Heh, wyzwanie :P ? Może zaraz coś napiszę. A może jakieś argumenty? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Argumenty, że to jest proste? Po prostu jest. =P Tabelka z dwoma kolumnami to na prawdę jeszcze pikuś. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Ta, wyświetlenie tabelki to nie problem, tylko sortowanie =P . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Nie, to też nie jest problemem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Cały czas pomysł mi po głowie chodzi... Zaraz coś napiszę ;) ! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PanciK Opublikowano 17 Lipca 2008 Autor Udostępnij Opublikowano 17 Lipca 2008 No Pental niezle :). Tylko, ze pkt dodaje od drugiego miejsca w tabeli wiec wyglada to tak: nobody 0 Gracz 5 nobody 0 etc. Wyskakuje tez błąd ERROR in action number 1 of Create Event for object object0: Error in code at line 3: highscore_add( _nick, global._score ); at position 31: Unknown variable _score Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 O jedną wartość w tył :/ . Zaraz poprawię, pracuję nad nową wersją. @Edit: Nowa wersja gotowa, jeszcze tylko zapis do pliku i odczyt :P . GML // tworzenie tabeli global._max = 5; global.l[0] = 5; global.l[1] = 4; global.l[2] = 3; global.l[3] = 2; global.l[4] = 1; global.n[0] = "try"; global.n[1] = "ytgf"; global.n[2] = "gffgdg"; global.n[3] = "gfdf"; global.n[4] = "gggg"; // punkty global._score = round( random( 10 ) ); // podawanie nicka _nick = get_string( "Podaj nick:", "Pental" ); // dodawanie wyniku (skomplikowana sprawa;P) if ( global._score ) && ( global._score > global.l[global._max - 1] ) { for( _i = global._max - 1; _i >= 0; _i -= 1; ) { if ( global._score <= global.l[_i] ) { for( _j = 0; _j < _i; _j += 1; ) { global.l[_j] = global.l[_j + 1]; global.n[_j] = global.n[_j + 1]; } global.n[_i] = _nick; global.l[_i] = global._score; // koniec petli break; } } } Wyświetlanie bez zmian, musisz troszkę zaczekać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
FanN Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 No no ;] taka tabela o wiele lepsza :) Pental stosując Twoją pierwszą wersję mam te same błędy co PanciK a ta druga wcale mi nie działa :( (nie ma tabeli). Możesz dac przykład?:P ^^ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 Create: GML // tworzenie tabeli global._max = 5; _sx = "ile"; _sy = "nick"; if ( !file_exists( 'high.txt' ) ) { ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sx, string( _i ), "0" ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sy, string( _i ), "brak" ); ini_close(); } ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) global.l[_i] = real( ini_read_string( _sx, string( _i ), "0" ) ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) global.n[_i] = ini_read_string( _sy, string( _i ), "brak" ); ini_close(); // punkty global._score = round( random( 10 ) ); // podawanie nicka _nick = get_string( "Podaj nick:", "Pental" ); // dodawanie wyniku if ( global._score ) && ( global._score > global.l[global._max - 1] ) { for( _i = global._max - 1; _i >= 0; _i -= 1; ) { if ( global._score <= global.l[_i] ) || ( _i == 0 ) { for( _j = 0; _j < _i; _j += 1; ) { global.l[_j] = global.l[_j + 1]; global.n[_j] = global.n[_j + 1]; } global.n[_i] = _nick; global.l[_i] = global._score; // koniec petli break; } } } Draw tak samo jak na początku. Są bugi. Jutro poprawię ;p . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 17 Lipca 2008 Udostępnij Opublikowano 17 Lipca 2008 a ta druga wcale mi nie działa sad.gif (nie ma tabeli). jak może być, skoro tam nie ma rysowania, no jak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 18 Lipca 2008 Udostępnij Opublikowano 18 Lipca 2008 Ok, wszystko naprawione. Create: // tworzenie tabeli // maksymalna ilosc wynikow global._max = 7; _sx = "ile"; _sy = "nick"; if ( !file_exists( 'high.txt' ) ) { ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sx, string( _i ), "0" ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sy, string( _i ), "brak" ); ini_close(); } ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) global.l[_i] = real( ini_read_string( _sx, string( _i ), "0" ) ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) global.n[_i] = ini_read_string( _sy, string( _i ), "brak" ); ini_close(); // punkty global._score = floor( random( 100 ) ); // podawanie nicka _nick = get_string( "Podaj nick:", "Pental" ); // dodawanie wyniku if ( global._score ) && ( global._score > global.l[global._max - 1] ) { for( _i = global._max - 2; _i >= 0; _i -= 1; ) { if ( global.l[_i] >= global._score ) || ( !_i && global._score >= global.l[0] ) { if ( _i ) || ( !_i && global._score <= global.l[0] ) _i += 1; for( _j = global._max - 1; _j > _i; _j -= 1; ) { global.l[_j] = global.l[_j - 1]; global.n[_j] = global.n[_j - 1]; } global.l[_i] = global._score; global.n[_i] = _nick; break; } } } // zapis tabelki ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sx, string( _i ), string( global.l[_i] ) ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sy, string( _i ), global.n[_i] ); ini_close(); Draw: for ( _i = 0; _i < global._max; _i += 1; ) { draw_set_color( c_blue ); draw_set_halign( fa_right ); draw_text( x + 250, y + 20 * _i, global.l[_i] ); draw_set_halign( fa_left ); draw_text( x, y + 20 * _i, global.n[_i] ); } By wyczyścić "ręcznie" tabelę, usuń plik high.txt . Zrobię jeszcze kodowanie, bo zaraz Tymon się przyczepi :P . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PanciK Opublikowano 18 Lipca 2008 Autor Udostępnij Opublikowano 18 Lipca 2008 Ehhh cos mi nie dziala :P nie wiem moze ja cos zle robie :P Przy podawaniu nick'a dodaje mi ilosc pkt z przedzialu 1-100 (nawet jesli mialem 0 pkt) a rzeczywista ilosc pkt traci sie nie wiadomo gdzie :P Bylbym Ci jeszcze bardziej wdzieczny gdybys mogl mi dac gotowy przyklad :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Misiek999 Opublikowano 18 Lipca 2008 Udostępnij Opublikowano 18 Lipca 2008 skąd on ma wiedzieć jak się nazywa u ciebie ta zmienna ? zrobił ci po prostu przykladowo losowanie punktów, ty musisz tylko podmienić nazwę zmiennej a tamto wywalić :tv_horror: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 18 Lipca 2008 Udostępnij Opublikowano 18 Lipca 2008 Masz tam takie cacko jak GML global._score = floor( random( 100 ) ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 18 Lipca 2008 Udostępnij Opublikowano 18 Lipca 2008 Ech, nie ma potrzeby. Losowe punkty są celowe. Wystarczy, że GML global._score = floor( random( 100 ) ); zamienisz na: GML global._score = score; Lub jakąś inną nazwę zmiennej ;) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PanciK Opublikowano 18 Lipca 2008 Autor Udostępnij Opublikowano 18 Lipca 2008 Wielkie dzieki stary :D Niechaj Bóg wynagrodzi Ci to w dzieciach ^^ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Milord Opublikowano 14 Października 2015 Udostępnij Opublikowano 14 Października 2015 Cześć wszystkim posłużyłem się tutaj przykładem kolegów odnośnie wyświetlania tabelki w menu: I mam takie pytania do tego tematu: Wchodzę do menu,gdzie umieściłem sobie obiekt tabelka_highscore,wpisuje imię i jest pusto. Rozumiem,że to oczywiste,no bo przecież trzeba jeszcze zmienną utworzyć w obiekcie,gdzie mam życia,punkty,hud itp,i wtedy domyślam się,że się wyświetli lista wyników w menu gry po ukończeniu planszy,czy utracie żyć.. Dokładnie chciałbym tak,że jak uzyskam już jakieś tam punkty w grze no i np zginę,to żeby wyświetlił mi się możliwość wpisu swojego imienia i ta tabelka co w menu,ale to musiałaby się wyświetlić przed planszą game over,no chyba,że wpis najlepszych 7 graczy będzie zapełniony,a mój wynik będzie zbyt mały żeby dokonać wpisu to się nie wyświetli i nie dokona się wpis. kod na tą tabelkę w menu,gdzie wchodzę i wyświetlać ma się lista najlepszych graczy obj_tabelka_highscore Create GML // tworzenie tabelki z wynikami // ilosc wynikow global._max = 7; _sx = "ile"; _sy = "nick"; if ( !file_exists( 'high.txt' ) ) { ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sx, string( _i ), "0" ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sy, string( _i ), "brak" ); ini_close(); } ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) global.l[_i] = real( ini_read_string( _sx, string( _i ), "0" ) ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) global.n[_i] = ini_read_string( _sy, string( _i ), "brak" ); ini_close(); // punkty global.pScore = score; // podawanie nicka _nick = get_string( "Podaj nick:", "Pioter" ); // dodawanie wyniku if ( global.pScore ) && ( global.pScore > global.l[global._max - 1] ) { for( _i = global._max - 2; _i >= 0; _i -= 1; ) { if ( global.l[_i] >= global.pScore ) || ( !_i && global.pScore >= global.l[0] ) { if ( _i ) || ( !_i && global.pScore <= global.l[0] ) _i += 1; for( _j = global._max - 1; _j > _i; _j -= 1; ) { global.l[_j] = global.l[_j - 1]; global.n[_j] = global.n[_j - 1]; } global.l[_i] = global.pScore; global.n[_i] = _nick; break; } } } // zapis tabelki ini_open( 'high.txt' ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sx, string( _i ), string( global.l[_i] ) ); for( _i = global._max - 1; _i >= 0; _i -= 1; ) ini_write_string( _sy, string( _i ), global.n[_i] ); ini_close(); Draw GML for ( _i = 0; _i < global._max; _i += 1; ) { draw_set_color( c_blue ); draw_set_halign( fa_right ); draw_text( x + 250, y + 20 * _i, global.l[_i] ); draw_set_halign( fa_left ); draw_text( x, y + 20 * _i, global.n[_i] ); } no i teraz tak obiekt w którym mam zmienne punkty,życia itp ,oraz hud. obj_game_controller Create GML //Ustawienia globalne image_speed = 0; global.watch = 0; //ustawiamy globalnie na 0 w celu ich dalszego sumowaniu umozliwjajacego przejscie do nastepnej planszy po zebraniu ich odpowiedniej ilosci global.pScore = 0; global.life = 5; global.coins = 0; global.Saved = true; globalvar spawnX, spawnY; //Widok globalvar gvX, gvY, gvW, gvH, gvObj, gvOffX, gvOffY; gvX = view_xview[0]; gvY = view_yview[0]; gvW = view_wview[0]; gvH = view_hview[0]; gvObj = view_object[0]; gvOffX = 0; gvOffY = 0; //HUD hpHUD = 0; maxHpHUD = 0; tu step mojego bohatera GML if(instance_number(obj_napis_plansz)=0)// zatrzymuje sprita bohatera na czas wyswietlenia napisu Stage { if (vspd > 25) //Jesli predkosc spadania jest szybsza niz 25 (Mozna dowolnie zmieniac ta wartosc.) {global.damage+=4} //Zwiekszenie obrazen o wartosc 1. (Zmienienie liczby na wieksza zwiekszy zadawane obrazenia po upadku.) if not place_free(x,y+1) //Jesli w poblizu nas jest jakis obiekt rowniez zostana zadane obrazenia { other.hp-=global.damage //Odejmujemy punkty zycia od wartosci zadanych obrazen. global.damage=0 //Resetujemy zadawanie obrazen po uderzeniu w ziemie by nie zabieralo go wiecej } else if (vspd >35) { other.hp = -100; //natychniastowa smierc po upadku z ogromnej wysokosci } //Upadek z ogromnej wysokosci zabiora zycie,gdy energia osiagnie wartosc zero if( hp <= 0 ) { hp = 100; global.life -= 1; audio_play_sound(dzwiek_bohater_ginie, 1, false); x = start_x; y = start_y; } if( global.life <= 0 ) { room_goto(rm_game_over); //pokoj,gdzie ma sie akcja gry przeniesc po koncu gry } ///Kontrola if !place_meeting(x,y,obj_water) { //Normalny ruch if climbing == false { if keyboard_check_pressed(kJump) && inAir == false { vspd = -10-sign(pwrupJmp*3); jumpStr = 3; //Zeskakiwanie w dol if keyboard_check(kDown) && place_meeting(x,y+1,par_solid_ghost) { y += 4; vspd = 0; jumpStr = 0; jumpTimes = 0; } } else if keyboard_check(kJump) && jumpStr > 0 { audio_play_sound(dzwiek_skoku_bohatera, 1, false); //odtwarzamy dzwiek przy skakaniu vspd -= 2+sign(pwrupJmp); jumpStr--; } else { if keyboard_check_released(kJump) && jumpStr > 2 { vspd += 2+sign(pwrupJmp); } jumpStr = 0; } if keyboard_check(kAction) && attClock == false { if keyboard_check(kDown) { attClock = 16; curAttack = 1; with instance_create(x,y-16,obj_projectile) { hspd = other.image_xscale*10; vspd = 0; //lekko do gory -4 //mocno do gory g = .0; //0.2 tor lotu paraboliczny owner = par_player; strength = 0; explode = true; explosionRadius = 30; explosionStrength = 2+(sign(other.pwrupStr)*8); //image_blend = c_black; //kolor lotu pocisku audio_play_sound(dzwiek_bohater_strzela, 1, false); //odtwarzamy dzwiek przy strzelaniu } } else { attClock = 18; curAttack = 0; with instance_create(x,y,par_attack) { sprite_index = mask_player_attack; image_xscale = other.image_xscale; owner = par_player; strength = 1+(sign(other.pwrupStr)*4); } } } if keyboard_check(kRight) && !keyboard_check(kLeft) { if hspd < 10+(sign(pwrupSpd)*5) { hspd = min(hspd+(2+(sign(pwrupSpd)*2))*multiF,10+(sign(pwrupSpd)*5)); } image_xscale = 1; } if keyboard_check(kLeft) && !keyboard_check(kRight) { if hspd > -10-(sign(pwrupSpd)*5) { hspd = max(hspd-(2+(sign(pwrupSpd)*2))*multiF,-10-(sign(pwrupSpd)*5)); } image_xscale = -1; } //Wspinanie sie if place_meeting(x,y,par_climbable) && place_meeting(x,y-32,par_climbable) && place_meeting(x,y+32,par_climbable) && attClock <= 0 && (keyboard_check(kUp) || keyboard_check(kDown)) { climbing = true; vspd = 0; hspd = 0; } } //Wspinanie sie if climbing == true { var __hsign = keyboard_check(vk_right)-keyboard_check(vk_left); var __vsign = keyboard_check(vk_down)-keyboard_check(vk_up); hspd = min(max(hspd+__hsign,-2),2); vspd = min(max(vspd+__vsign*2,-4),4); if __vsign == -1 && !place_meeting(x,y-32,par_climbable) { climbing = false; vspd = -10; } if __hsign != 0 { image_xscale = __hsign; } if !place_meeting(x,y,par_climbable) || !place_meeting(x,y+32,par_climbable) { climbing = false; } } } else { //Plywanie swimDir = point_direction(0,0,keyboard_check(kRight)-keyboard_check(kLeft),keyboard_check(kDown)-keyboard_check(kUp)); if abs(keyboard_check(kRight)-keyboard_check(kLeft))+abs(keyboard_check(kDown)-keyboard_check(kUp)) != 0 { hspd += lengthdir_x(.5,swimDir); if !(swimDir > 0 && swimDir < 180) || place_meeting(x,y-sprite_height/3-1,obj_water) { vspd += lengthdir_y(.5,swimDir); } } if keyboard_check(kUp) && !place_meeting(x,y-sprite_height/1.5,obj_water) && vspd <= 0 { //plywanie do gory vspd = -12; } } } a tu kod kolizji gracza z przykładowym wrogiem.. obj_wrog GML ///Obrazenia jakie wrog zadaje bohaterowi if !vspd > 0 && hurtClock == 0 && other.hurtClock == 0 && sign(x-other.x) == other.image_xscale { hp -= 15; hurtClock = room_speed; vspd = -8; hspd = sign(x-other.x)*16; } if( hp <= 0 ) { hp = 100; global.life -= 1; x = start_x; y = start_y; } if( global.life <= 0 ) { room_goto( rm_game_over ); //pokoj,gdzie ma sie akcja gry przeniesc po koncu gry } 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ę