Skocz do zawartości

gnysek

Administratorzy
  • Postów

    9 806
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    139

Odpowiedzi opublikowane przez gnysek

  1. Global oznacza , że taka zmienną jest jedna współdzielona na całą grę. Jak ja dasz w przeciwnikach, to wszystkim na raz zmienisz, to bez sensu.

     A hspeed czy vspeed są zależne od speed i direction, więc jak zmieniasz tamte zmieniają się te (albo jak jakoś kod powoduje ich zmianę). To są współbieżne zmienne - zmiana jednych zmienia drugie i vice versa.

  2. Generalnie to będzie złamanie praw autorskich, jesli będzie bardzo podobny. Pytanie, czy Nintendo na to trafi, bo ja widziałem firmy hydrauliczne które mają mario na samochodzie i nikt im nic nie zrobił - ale w sieci by już tak fajnie nie mieli.

     

    Natomiast nie powinna być problemem "parodia" postaci - czyli np. postać podobna do mario, w stylu innych postaci w grze, i nie mająca na imię mario. W żadym też wypadku z charakterystycznym "M" na głowie - Ubisoft dla Raymana czy Raving Rabbidsów z czapką Mario też pozyskiwał licencję.

     

    Dobry przykład bez licencji - Asterix i Obelix XXL:

    image.png

  3. Kod powinien znajdować sie tam, gdzie go potrzebujesz. Nie wiem jak tworzysz przeciwników, czy stawiasz ich w roomie, czy tworzy ich jakiś obiekt-nadzorca. Musisz sobie sam odpowiedzieć na swoje pytanie bo to Ty wiesz jak robisz grę i co w niej jest, my nie będziemy zgadywać, a ściany kodu nie pomagają. Trzeba zawsze minimalizować problem, a nie po prostu wklejać kod który nic nie mówi, albo nie jest potrzebny.

  4. a++ - postikrementacja - dodaj do zmiennej 1 po obecnym wyrażeniu.

    ++a - preinkrementacja - dodaj do zmiennej przed obecnym wyrażeniem.

     

    tak samo z -- oczywiście (--a, a--). Wyrażenie to jest każdy kawałek kodu, który powinien kończyć się średnikiem czy nawiasem (nawet jeśli go nie

     

    Inaczej mówiąc:

    show_message(a++);
    // po kompilacji:
    show_message(a);
    a+=1;
    
    
    show_message(++a);
    // po kompilacji:
    a+=1;
    show_message(a);

    Oczywiście w większości przypadków wydaje się, że a++ oznacza to samo co a+=1, bowiem dodanie wykona się zawsze w następnym kroku kodu, więc takie jest wrażenie, czy też w pętlach dodanie wykona się zaraz za średnikiem - ale właśnie przykład z show message pokazuje, ze można napisać ++ a i tak dostać poprzednią wartość. Czasem wstawienie przed czy za się przydaje, żeby osiągnąć dodatkowy efekt.

  5. Trochę tak jak ja to napisałem, dodatkowe zmienne, oznaczające własnie avatar, może imię osoby, może rodzaj tła i na tej podstawie resetować zmienne po kazdym tekście i czytać nowe.

     

    Generalnie ja napisałem coś takiego jak w solstice/cinders na swoje potrzeby w jakieś 6-8h, ale nie nadaje się do udostępnienia tak ot, bo 50% kodu jest zależna od wielu innych rzeczy w grze, a nie będę dawał połowy gry :)

     

    to nie jest łatwe zagadnienie i wymaga napisania niemalże parsera prostego języka programowania (taki bardziej znacznikowy w sumie, no ale jednak). Jak ma się już pierwszą komendę to potem z górki, ja mam tak zrobione nawet animacje postaci (przemieszczają sie, obracają itd.) i nawet można podawać prędkość i czas trwania.

  6. @nowy_user Chyba nie wszystko jak w manualu, bo ja tam widzę jak do zapisywania w pliku używają zmiennej którą zwraca file_text_open_write, a Ty używasz tej od get_save_filename...

     

    var _path, _file;
    
    _path = get_save_filename("project|*.txt", "");
    if (_path != "") {
        _file = file_text_open_write(_path);
        file_text_write_string(_file, _savedane);
        file_text_close(_file);
       }
    }

    Jedna funkcja zwraca ścieżkę, druga id pliku.

  7. @pankracy To jednak Solstice było, ale obie gry są niemal identyczne. TeeGee na pewno się nie pogniewa jak się podzielę w celach edukacyjnych, skoro i tak dawał do kodu dostęp w ramach Humble.

     

    https://drive.google.com/open?id=1y9cA4R9m-KBrLuM8tHhJsTQjY5temFz1

     

    Ostrzegam jednak, że to spory kod będzie (poznasz zmianę tła czy efekty po kodzie podobnym jak bbcode, np. [do_something=1]).

  8. @pankracy ponieważ piszesz, że robisz na GMS 1.4 to średnio mogę pomóc, nie chce mi się go instalować specjalnie. Ale z głowy zrobiłbym tak:

     

    (wielokropek oznacza, że zostaje poprzedni kod).

     

    scr_ini:

    global.textq=ds_queue_create();
    global.imageq=ds_queue_create();
    global.text_get=true;

    add_text (od teraz ma dwa argumenty, ("tekst", -1) gdy nie ma obrazka i ("tekst", spr_jakis) gdy jest obrazek:

    ds_queue_enqueue(global.textq,argument0);
    ds_queue_enqueue(global.textq,argument1);
    
    if !instance_exists(obj_text) then instance_create(0,0,obj_text);

    ---

    obj_text

    create:

    alpha=0; //przeswitywalnosc
    step=0; //kolejne zadanie przez nas wykonywane - KROK
    text=''; //tekst jaki mamy wyswietlic
    image = -1 // obrazek jaki mamy wyswietlic
    leght = 0;

    step:

    if not ds_queue_empty(global.textq) and global.text_get=true
    //jezeli [kolejka] nie jest pusta i mozna [pobrac tekst]
        {
    	global.text_get=false;//wylacz pobieranie tekstu, aby funkcja sie juz nie wywolala, dopuki znowu nie bedzie true
    	text=ds_queue_dequeue(global.textq);//pobierz tekst z kolejki
    	image=ds_queque_dequeue(global.imageq);
    	....
    /// KROK 3
    	...
            text='';
            image = -1;
            global.text_get=true;//ustaw, ze mozna juz pobierac tekst
            step=0;
            }
        }

    draw:

    ... // cały poprzedni kod
    
    if (image > -1) {
    	draw_sprite(image, 0, 10, 10); // alphę itd. sobie już dopisz sam w draw_sprite_ext ;)
    }

     

     

    Jeśli dobrze liczę, dodałem raptem 7 linijek kodu. Niewiele trzeba było zmienić, żadnej zabawy, tylko druga kolejka i druga zmienna. Nie wiem dlaczego aż tyle problemu to zajęło, skoro to jest niemal skopiowanie tego samego kodu, tylko zamiast "global.textq" i "text", używasz "global.imageq" i "image". No i nie przypisujesz stringa.

     

  9. no to w GM tak fajnie się raczej nie da. trzeba ręcznie data[0,0] = *.


    Chociaż można by się pobawić w substringi... będzie mniej wiecej tak, ale piszę to "na sucho" z głowy, bez testowania:

    var arr = [], a = 0, b = 0,c = "";
    
    for (i=1; i<=string_length(str); i++) {
        c = string_char_at(str, i);
        if (ord(c) == 10 or ord(c) == 12) { // znak \n lub \r
    		if (a > 0) {
      			a = 0;
      			b++;
      			/* przenosi tablicę to nowej linii,
      			a > 0 zapobiega sytuacji gdy jest \n\r z rzędu, zamiast tylko \n albo tylko \r
      			(obsługuje zatem windows/linux/mac) */
     		}
      		// inaczej nie rób nic, trochę jak continue, ale warunki sprawiają, ze nie trzeba go pisać
    	} else {
        	arr[a, b] = c;
    	}
    }
    
    return arr; // powinno zwrócić tablicę.


     

×
×
  • Dodaj nową pozycję...