Skocz do zawartości

gnysek

Administratorzy
  • Postów

    9 806
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    139

Odpowiedzi opublikowane przez gnysek

  1. Auto increment i tak można zostawić, zawsze to łatwiej intem potem pobierać rekord.

    Co do przerwaia requestu - musisz aktualizować jednym requestem w takim razie. Przesyłać całą tablicę. Albo jakiś JS i dla kazdego elementu wywali "błąd" gdy się nie zapisze, żeby user ponowił zapis (pętla nie ma sensu, bo jak net padnie to będzie napierdzielać co sekundę :P).

  2. Jak zmienisz liczbę pytań to diff będzie niemal niemozliwy.

    Jedyna opcja jaka mi przychodzi to dawać losowy numer (GUID?) Każdemu pytaniu to potem odnajdziesz starą wersję tego samego po tym nawet jak się kolejność zmieni. Zapisuj też ich pozycje to będzie widać które były gdzie przesuniete - ale idealnego diffa nie uzyskasz. Nawet w gicie jak przedstawisz tekst 5 linijek dalej to on je widzi jako usunięte i nowe a nie różnice.

  3. A co ja napisałem wyżej ? :D

     

    if (global.life > 0) 
    {
    	global.life -=1;
    } else {
        if (can_finish == false) 
    	{ 
    	if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            alarm[0] = 60; // 150 to 5 sekund
    	}
        } else {
            if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy
            {
                var s=highscores[| ds_list_size(highscores) - 1];
                //Czy punkty kwalifikuja sie na top 10
                if (ds_list_size(highscores) < 10 || s[?"score"] <= global.pScore) {
                        room_goto(rm_save_score);
                        exit; // zakoncz wykonywanie eventu step w tej klatce
                }
            }
            room_goto(rm_game_over);
        }
    }

     

  4. Nic z tego wyżej nie rozumiem. Strzelam jedynie, że gvX i gvY się resetują na 0.

     

    Co do flagi - ona nie ma nic wspólnego z game_end(). Game End robi to samo co Alt+F4, albo zakończenie procesu w menedżerze zadań. Ja zrobiłem flagę, dzięki której albo ma się 1 raz włączyć alarm, jeśli jeszcze nie leciał, albo - jeśli już się zakończył o czym mówi właśnie ta flaga - wykonał kod przejścia do następnego roomu.

  5. game_end() zamyka program. Jeśli miałeś to w pierwszej linijce tego kodu, to automatycznie po śmierci zamykała się gra na koniec obecnego stepu.

     

    Co do przesuwania sie view - nie wiem jaki masz od tego kod. Jeśli masz śledzenie obiektu i po śmierci ekran się przesuwa (nie skacze), to bym winił... drugą instancję tego samego obiektu.

     

    can_finish jest po prostu flagą, czy coś już zostało zrobione czy nie.

  6. To jest porównanie. Ale widzę mój błąd. Połączyłem dwa ify w jeden, a powinienem mieć dwa.

     

    //create
    can_finish = false;
    
    // w alarm 0
    can_finish = true;
    
    // step
    if (global.life = 0) {
        if (can_finish == false) {
    		if (alarm[0] == -1) { // zacznij tylko gdy jeszcze się nie odlicza
            	alarm[0] = 150; // 5 sekund
    		}
        } else {
            if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy
            {
                var s = highscores[ | ds_list_size(highscores) - 1];
                //Czy punkty kwalifikuja sie na top 10
                if (ds_list_size(highscores) < 10 || s[ ? "score"] <= global.pScore) {
                        room_goto(rm_save_score);
                        exit; // zakoncz wykonywanie eventu step w tej klatce
                }
            }
            room_goto(rm_game_over);
        }
    }

    i żeby było widać, dałem teraz 5 sekund, bo 1 to może być za krótko ;)

  7. Nie musisz ustawiać alarmu na -1, on jest tak ustawiony przez GameMakera dla każdego obiektu. I żadnego game_end() gdziekolwiek bo to wyłącza całkiem grę.

    //create
    can_finish = false;
    
    // w alarm 0
    can_finish = true;
    
    // step
    if (global.life = 0) {
        if (can_finish == false and alarm[0] == -1) {
            alarm[0] = 30; // 1 sekunda
        } else {
            if (global.pScore >= 500) //Sprawdz czy wynik nadaje sie do highscore,ale musi zostac spelniony warunek punktowy
            {
                var s = highscores[ | ds_list_size(highscores) - 1];
                //Czy punkty kwalifikuja sie na top 10
                if (ds_list_size(highscores) < 10 || s[ ? "score"] <= global.pScore) {
                        room_goto(rm_save_score);
                        exit; // zakoncz wykonywanie eventu step w tej klatce
                }
            }
            room_goto(rm_game_over);
        }
    }
  8. Zanim pierwszy raz ustawisz alarm[0], to on ma już wartość -1 od początku gry, pewnie dlatego ?

     

    Zrób inaczej:

     

    // create
    
    can_finish = false;
    
    // gdzies tam gdzie konczy sie gra i ma poczekać
    if (<nie zyje>) {
      if (can_finish == false) {
      	alarm[0] = 30;
      } else {
      	room_goto(<higscore>);
      }
    }
    
    
    // w alarm 0
    can_finish = true;

    Poza tym, game_end(); kończy grę, więc cały kod dalej się nie wykona.

  9. Potwierdzam. Trzeba chwilę poświecić na usunięcie tych funkcji które GM buduje jako kompatybilne (np. teraz instance_create wymaga podania layera, więc GM tworzy funkcję _instance_create() i zmienne globalne, z depthem itp.) - oczywiście można je zostawić, ale jak się usuwa jakiś obiekt to trzeba przepisywać tablicę z listą tych "starych". Nie mniej każda gra w 100% powinna działać w GMS2, a po optymalizacji na nowe funkcje śmigać jeszcze bardziej.

  10. Master? Patrz na to. 12 linijek kodu zmniejszone do 4.

    //zakładając, ze global.difficulty ma wartosci 0,1,2
    var _hp_loose = [17, 25, 34];
    
    if (global.zegarObrazen < 0) {
        global.hp -= _hp_loose[global.difficulty];
        global.zegarObrazen = room_speed*2;
    }

    no i jak enum nie znasz, to mozesz:

    #macro d_easy 0
    #macro d_medium 1
    #macro d_hard 2
    
    // potem
    global.difficulty = d_easy;
    
    // mozna tez bez d_, ale wtedy zablokujesz opcje nazywania tak zmiennych :P

     

  11. Teraz sztuczka:

    enum difficulty {
    easy = 1,
    medium = 2,
    hard = 3
    };
    
    /// gdzies tam indziej w kodzie
    
    global.hp -= 10 * global.difficulty; //10,20,30

    alternatywnie

    enum difficulty {
    easy,
    medium,
    hard 
    };
    
    /// gdzies tam indziej w kodzie
    
    global.hp -= 10 + (15 * global.difficulty); // 10, 25, 40

    dlatego poziom trudności jako string jest bez sensu

×
×
  • Dodaj nową pozycję...