Skocz do zawartości

gnysek

Administratorzy
  • Postów

    9 806
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    139

Odpowiedzi opublikowane przez gnysek

  1. 2 godziny temu, Wojzax napisał:

    Mi się od zawsze marzy harvest moon ale taki że można kupować różne parcele, uczestniczyć w życiu ekonomicznym miasta, z lekko simsowym systemem poznawania ludzi i dużymi możliwościami zakładania roznych biznesów, budowania, malowania elementów itd.

    No to nawet wiesz o jakiej grze myślę :) Co do kupowania różnych parcel to może aż tak to nie, ale w ostatniej części Story of Seasons na 3DS (to jest oryginalna seria która kiedyś miała nazwę Harvest Moon, ale potem ludzie z USA stwierdzili, ze sami będą robić gry o tej nazwie, zamiast tłumaczyć z JP), można np. budować i swobodnie przestawiać budynki na farmie, a także budować stoły, krzesła, szafy, płoty, ozdoby i ustawiać je na farmie i w mieście, czy nawet szyć ubrania i handlujesz tym wszystkim z zagranicznymi krajami (popyt/podaż), odblokowując sobie nowe możliwości (np. nowe zwierzęta, sadzonki czy materiały budowlane).

  2. Mapa nie musi być tak wielka. Wystarczy 1920x1080 i przesuwanie obiektów/tła zamiast widoku :)

     

    Co do robienia czegoś turowo, czy jedno po drugim:

    // create
    
    round = -1;
    round_time = 100;
    
    
    // step
    
    if (round == 1) {
    	if (round_time > 100) {
    		/// jakieś dowolne akcje
    		round_time--;
    	} else {
    		round++;
    		round_time = 100;
    	}
    } elseif (round == 2) {
    	...
    	/// kod jak wyżej
    } elseif (round == 99) { // oczywiscie moze byc mniej
    	round = -1; // konczymy wykonywanie akcji
    }
    
    // wyzwolenie rund z dowolnego obiektu, np. event klawisza albo myszki:
    obj_rounds.round = 1;

    Oczywiście w GM8, zamiast -- i ++ piszemy -= 1 i +=1, ale używanie GM 8 to jak używanie Windowsa 95. Nie tylko nie zalecamy, ale jego nie da się już aktywować, więc mam prawo przypuszczać, że używasz pirata i nie jest to do końca legalne... nie chcemy być złośliwi i tego zgłaszać służbom, ale bądź ostrożny.

  3. 14 godzin temu, Morgo napisał:

    Początkowo właśnie takie miałem założenia - generować wszystko z dwóch grafik, ale zabrakło mi wiedzy i doświadczenia więc rozwiązałem to w taki sposób. Mam przynajmniej motywację, żeby wreszcie ogarnąć surfacey :P

     

    OK:

     

    // create
    
    global.s = -1;
    
    // draw
    
    if (!surface_exists(global.s)) { // redraw tylko jak komputer usunie z pamieci surface, albo jeszcze go nie ma
      global.s = surface_create(1024, 768);
    
      // jesli potrzebujemy aktualizowac surface co klatkę, bo się zmienia, poniższy kod wyciągamy poza nawiasy klamrowe
      surface_set_target(global.s);
        draw_clear_alpha(c_white, 0); //maluje na przezroczysto
    	draw_text(10, 10, "test"); // pamietaj, ze teraz wsystkie pozycje są relatywnie do 0,0 na surface, a nie od pozycji obiektu
      surface_reset_target();
    }
    
    draw_surface(global.s, 10, 20);

    Jak nic nie pomyliłem z kolejnością argumentów, masz fajny gotowy tutorial :)

  4. Korzystając z vertexów, tai program powinen w sumie ograniczyć się do dwóch spritów i robić trójkącik w rogu. Jak to wyrenderujesz na surface, to nawet choćby była masakrycza wydajność, nie robisz tego co krok, tylko w momencie jak !surface_exists() ( ogólnie tak powinno się robić, nie redrewować surface jak istnieje i się nie zmienia ).

  5. Czy ten kwadrat jest rysowany jako sprite, czy za pomocą draw_rectangle() ?

     

    Jeśli sprite - sprawdź origin, może jest zły.

    Jeśli draw rectangle - ta funkcja ma tendencję do rysowania z offsetem 1px na niektórych kartach graficznych. Do tego malowanie wypełnionego oznacza przesunięcie o kolejny piksel (bo rysuje bez ramki, którą jest argument przeciwny). Stąd mogą być aż dwa piksele.

    Osobiście zalecam używanie sprite zamiast draw_rectangle().

  6. Kierunek nie zależy tutaj od origina sprita? Bo inaczej wygląda kierunek jak masz origin kwadrata na 0/0, a inaczej jak na 50%/50%.

     

    Poniższy kod zadziała tylko dla prostokątnych masek i tylko z ustawieniem manual/automatic. Pixel perfekt i okrągłe maski na to nie zadziałają.

    var xcol = x - sprite_xoffset(sprite_index), ycol = y - sprite_yoffset(sprite_index);
    
    if (other.x < x) {
    	xcol += bbox_left;
    } else {
    	xcol += bbox_right;
    }
    
    if (other.y < y) {
    	ycol += bbox_top;
    } else {
    	ycol += bbox_bottom;
    }
    
    /// GMS 2.0, alternatywna wersja:
    /// var xcol = x - sprite_xoffset(sprite_index), ycol = y - sprite_yoffset(sprite_index);
    /// xcol += (other.x < x) bbox_left : bbox_right;
    /// ycol += (other.y < y) bbox_top : bbox_bottom;
    
    // kolizja wystepuje w punkcie xcol, ycol, kod wstawiasz do kwadrata ze swojego rysunku

     

  7. Tak jak mówię, dopiero jak drukujesz DPI ma znaczenie. Ogólnie 300dpi to chyba wartość powyżej której ludzie oko już nie jest w stanie zauważyć rozmycia obrazu i rantów pikseli. Dlatego telefony Apple z wyświetlaczem "Retina" mają 300 pikseli na cal (300 ppi), ale tak naprawdę ppi i dpi to to samo (points/pixels per inch - dots per inch). Inny skrót wynika z tego, że drukarka robi "krople" na papierze.

    Tak więc, jak chcesz grafikę 20x20cm wydrukować i żeby była dobrej jakości, to przeliczasz to na cale - 7,847'' a potem mnożysz przez oczekiwaną rozdzielczość - dla zdjęć będzie to 300. Zatem obraz powinien mieć przynajmniej 2362 pixele, powyżej będzie się już skalował w dół, poniżej możesz zobaczyć pikselozę, aczkolwiek chyba do 150dpi na zwykłym papierze będzie nadal spoko (bo krople tuszu się inaczej wchłaniają).

     

    Stąd też np. wynika, że zdjęcie 9x13 powinno być robione aparatem o min. rozdzielczości 1.6 Megapixela. (9x13cm = 3.54''x5,12'' = 1062x1535px). I stąd też jasno wynika, że dla normalnej fotografii kupowanie aparatu co ma 40Mpix nie ma sensu, bo 4-5 spokojnie starczy nawet nawet na większe odbitki, a 40mpix to na ogromne plakaty. Liczy się jakość/ostrość matrycy.

  8. Dnia 21.04.2018 o 17:43, I am Lord napisał:

    Każda gra multiplayer używa jakiegoś typu interpolacji, co więcej nawet stosuje się takie rzeczy jak wyprzedzanie zachowań gracza by upłynnić ruch. Tzn gra domyśla się sama co zamierza gracz zrobić i rusza już postacią zanim dotarła o tym informacja. W krótkich odstępach czasu zwykle się to sprawdza a jak gracz zrobi coś niespodziewanego to następuje korekta ruchu.

    Kto gra dużo online, na pewno widział cofające lub skaczące postaci, które tak się zachowują.

     

    Ogólnie zasada powinna być taka, że przesyłasz np. kierunek i prędkość i co jakiś czas dodatkowo faktyczną pozycję. Jak różnica jest większa niż np. 5 pikseli rób korektę. Może to wyjść lepiej, ale oczywiście poeksperymentuj z ustawieniami. Albo np. wysyłaj pozycję krok naprzód, tj. x+lenghtdir_y(speed,direction), y+lengthdir_y(speed,direction). Jak nie korzystasz z wbudowanej zmiennej speed, to obliczysz prędkość na podstawie point_distance(xprevious,yprevious,x,y), a kierunek analogicznie przez point_direction(xprevious,yprevious,x,y). Jak korzystasz z vspeed i hspeed, to speed i direction powinny ustawiać się same, ale jeśli jest problem, to wciąż obliczysz je za pomocą poprzednich funkcji, podstawiając (0,0,hspeed,vspeed).

  9. Tak naprawdę to tylko w wydruku zależy ile pikseli to ile cm, na ekranie nie ma to żadnego znaczenia (jakiekolwiek DPI ustawisz, obraz będzie miał tyle samo pikseli, to będzie jedynie informacja startowa dla drukarki - która może nawet tego nie obsłużyć).

    Przeliczasz to tak, że dzieisz liczbę DPI przez 2,54 cm. Zatem 72 dpi oznacza, że 72 piksele to 2,54cm, więc 28,34 piksela to centymetr (a jak wiadomo, piksela nie da się przepołowić, więc możesz mieć problem chcąc narysować idealną linijkę :D)

×
×
  • Dodaj nową pozycję...