Skocz do zawartości

Nieoficjalny offset.


Exigo

Rekomendowane odpowiedzi

Gdyby tylko istniała funkcja surface_set_offset, nie zakładał bym tego tematu.

Tak więc, draw_surface z "sztucznym" offsetem nie sprawia problemu. Wystarczy odjąć pozycję x i y od offsetu x i y (każdy wymiar oddzielnie). Co natomiast, jeśli chcemy obracać i skalować, jak w przypadku draw_surface_ext? Ma ktoś pomysł na taką funkcję? ; )

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem czy o to chodziło. Nie testowałem tego. Kod pochodzi ze strony http://www.gmlscripts.com

GML
/*

** Usage:

** draw_surface_center_ext(id,x,y,xscale,yscale,rot,color,alpha)

**

** Arguments:

** id surface id

** x,y draw position of center of surface

** xscale horizontal scaling of surface

** yscale verticle scaling of surface

** rot degrees of rotation

** color color blending of surface

** alpha alpha of surface

**

** Returns:

** nothing

**

** Notes:

** Draws a surface centered at the given point with rotation,

** scaling, color blending, and alpha.

**

** GMLscripts.com

*/

{

var surface,sx,sy,xscale,yscale,rot,color,alpha,mx,my;

surface = argument0;

sx = argument1;

sy = argument2;

xscale = argument3;

yscale = argument4;

rot = argument5;

color = argument6;

alpha = argument7;

mx = surface_get_width(surface)/2;

my = surface_get_height(surface)/2;

d3d_transform_stack_push();

d3d_transform_set_identity();

d3d_transform_add_translation(-mx,-my,0);

d3d_transform_add_scaling(xscale,yscale,0);

d3d_transform_add_rotation_z(rot);

d3d_transform_add_translation(sx,sy,0);

draw_surface_ext(surface,0,0,1,1,0,color,alpha);

d3d_transform_stack_pop();

}

Odnośnik do komentarza
Udostępnij na innych stronach

nie, zdecydowanie wydajniejsze jest używanie funkcji d3d, brawa dla hudego, że nie boi się testować rozwiązań w celu szukania najlepszego :)

Odnośnik do komentarza
Udostępnij na innych stronach

GML
timeStart = current_time;

repeat(1000)

{

<tutaj rysuj danym sposobem>

}

time = current_time;

show_message("time: "+string(time));

a czyzby w ten sposob?

bo widzisz, ja kiedyś testowałem oba, gdy robiłem animacje szkleletowe w gm i wyszło, że funkcje d3d od transformacji są szybsze niż używanie lengthdirów

Odnośnik do komentarza
Udostępnij na innych stronach

Właśnie w ten sposób, tylko że powtarzałem 10000 razy.

Może d3d byłoby szybsze, gdyby rysowano wszystkie surface naraz, ale nie dam sobie za to uciąć głowy. Może to zależy od komputera, choć również nie jestem pewien.

 

Swoją drogą, patrzyłem, jak szybko wywołuje się pusty skrypt. Wyszło mi, że żeby gra działała płynnie (na moim komputerze, procesor 2.4 GHz, proces technologiczny 130 nm), można wywołać max. 6000 pustych skryptów na sekundę.

Tyle samo pustych obiektów maksymalnie mogło być w roomie, żeby program zachował płynność (w trybie Debug!), więc wynik nie jest zbyt dobry.

Dane z GM 7.0

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...