Per farvi capire velocemente cosa sto per andare a spiegare ci basterà aprire paint, selezionare lo strumento matita (dovrebbe comunque essere già selezionato) e disegnare una linea.
Sembra semplicissimo, ma l'azione nasconde un bel procedimento dietro.
Ho notato un problema molto comune nell'imitazione di questa funzione con Game Maker: rimangono dei buchi nella linea disegnata, perché il mouse muovendosi a velocità superiori di 1 ("pixel per step", o non saprei come chiamarla) salta dei pixel.
La soluzione è molto semplice: al posto de punti bisogna disegnare linee.
Devo dire che io stesso prima di raggiungere questa soluzione ho dovuto spremermi un po le meningi: avevo trovato una soluzione, purtroppo non abbastanza professionale da poterci scrivere sopra un tutorial, così sono arrivato all'idea delle linee sfruttate dai primitive.
PROCEDIMENTO:
Dovremmo utilizzare i primitive ed aggiungere un vertice nella posizione del mouse_x e mouse_y, ma dobbiamo fare in modo che ciò avvenga solo quando il mouse è spostato altrimenti, quando teniamo fermo il mouse, si creeranno un sacco di vertici nello stesso punto.
Dunque andiamo nel "create" e impostiamo:
-------------------------------------------------
oldx = mouse_x;
oldy = mouse_y;
point_x = ds_map_create ();
point_y = ds_map_create ();
vertex_count = 0;
-------------------------------------------------
Ora passiamo allo step e mettiamo:
-------------------------------------------------
if mouse_x! = oldx or mouse_y! = oldy
&& mouse_check_button (mb_left)
{
ds_map_add (point_x, ds_map_size (point_x) +1, mouse_x);
ds_map_add (point_y, ds_map_size (point_y) +1, mouse_y);
oldx = mouse_x;
oldy = mouse_y;
}
-------------------------------------------------
Infine nel draw digitiamo:
-------------------------------------------------
draw_primitive_begin (pr_linestrip);
if ds_map_size (point_x) > 0
for (i = 1; i< = ds_map_size (point_x); i+ = 1)
{
xpoint = ds_map_find_value (point_x, i);
ypoint = ds_map_find_value (point_y, i);
if draw_vertex (xpoint, ypoint)
vertex_count + = 1;
}
draw_primitive_end ();
--------------------------------------------------
Ora le spiegazioni:
per creare vertici solo al movimento del mouse dobbiamo servirci di due variabili che rappresentano le mouse_x e mouse_y ma
si aggiornano solo quando il cursore è in una posizione diversa da quella memorizzata e riassumono i valori mouse_x e mouse_y.
Quando ciò avviene, possiamo aggiungere il vertice ma lo faremo in modo indiretto, ovvero creando due map (point_x e point_y) dove memorizzeremo le coordinate dei punti che dovremo aggiungere come vertici. Nel "draw" con un "for" troveremo i valori salvati sulla mappa e li utilizzeremo per disegnare i vertici.
Super_Slascio della Freank-Expo
Autore: Freank