Skocz do zawartości

gnysek

Administratorzy
  • Postów

    9 806
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    139

Odpowiedzi opublikowane przez gnysek

  1. I prawidłowo. Ze względu na różne podatki, przez długi czas było tak, że na Steam różne wersje już miały VAT, a na stronie YYG dopiero ten Vat doliczano do tej samej ceny, więc wszystkie wersje były 23% droższe (mimo, ze Steam sobie wali jeszcze 30% prowizji). Czyli prawie 50% więcej zarabiali przez stronę niż Steam, ale dla nas - konsumentów - steam opłacał się bardziej (chyba, że potrzebujesz fakturę).

  2. 1) nie rysujemy poza draw w Studio

    2) trzeba sprawdzać czy surface istnieje w każdym kroku

    // create
    surf = -1;
    
    // draw
    if (!surface_exists(surf)) {
        surf = surface_create(...);
    }
    
    surface_set_target(surf);
    ... rysujemy
    surface_reset_target();
    ...
    draw_surface(....);

    Nie mniej to niewiele pomoże, bo GM i tak sam odrzuca z rysowania to co jest poza ekranem :) A efekt pojawia się bo robisz jakieś draw_set_blend_mode_ext nie wiadomo po co.

  3. Ja z kolei nie rozumiem twojego rysunku.

     

    Dobra, inaczej, mamy dwa sprite. Każdy ma origina na środku, więc jak robisz draw_sprite(spr_A, 0, x, y), no to origin tego sprita jest właśnie na pozycji x i y. To wiemy.
    Teraz mamy drugi sprite, on też ma origina i działa to na tej samej zasadzie.

    Jak napiszesz, zeby środek pierwszego sprite był 20px od środka drugiego, to robisz tak:

    draw_sprite(spr_B, x+lengthdir_x(20, dir), y+lengthdir_y(20, dir));
    oczywiście za dir podkładasz kierunek, np. dla kierunku 0 i kierunku 45 będzie to tak (sorry za jakośc, to jakiś onlinowy edytor grafiki):

    image.png

     

    Oczywiście spr_B nie jest tutaj obracany, jakbyś chciał, żeby zawsze się obracał względem siebie, to musisz o to zadbać sam. Fioletowa linia to jest te 20px.

    Oczywiście jak origin bedzie gdzie indziej, to sie wszystko zmienia:

    image.png

     

    Mniej wiecej tak (tutaj jeden spite ma origin w 0,0, a drugi ma w np. 20,0). Będzie wrażenie, że ten sprite ucieka i się zbliża. Dlatego najlepiej, jak masz origin na środku (albo środku przynajmniej jednego boku i obracać dobrze).

     

    Po prostu zawsze na początku i końcu linii jest origin, a sprite się rysuje o tyle przesunięty (jak masz origin 30,40, to sprite będzie się zaczynał -30px w lewo i -40 w górę od punktu wynikowego).

  4. No właśnie cała specyfika lenghtdira polega na tym, ze nie musisz pitagorasów/tangensów liczyć, tylko podajesz od razu długość przeciwprostokątnej.

     

    Patrzysz zatem na swój sprite który ma się obracać względem pierwszego i na to, jaki ma origin x. To będzie ten width.

     

    x + lengthdir_x(w, 0) i y + lengthdir_y(w,0), powinny ustawić origin sprita drugiego, względem origina sprita pierwszego (gdzie x i y to pozycja pierwszego, a w to jest origin x drugiego).

     

    Przypominam - 0 to w prawo, 90 w górę, 180 w lewo, 270 w dół, 360 == 0.

     

    Zatem jak chcesz następny obrazek ustawić nie względem origina, a prawego końca, to musisz policzyć lengthdira z całej szerokości. Jak kolejny sprite ma origin na środku, ale ma nie zaczynać się na prawej stronie, ale na środku wzgledem tej strony, to kolejny raz liczysz od ostatniego punktu lenghtira o długosci origina.

     

    Nie mam żadnego fajnego painta na linuxie żeby to narysować :P

×
×
  • Dodaj nową pozycję...