HUOM! Tämä on ensimmäinen koodivinkkini, älkää odottako liikoja :)
Tässä siis hyvin yksinkertainen "grid snapping" kaava käyttämällä modulusta. Alunperin suunnittelin tätä käytettävän aivan eri asioissa kuin c:llä, mutta jokatapauksessa... Kaava on seuraava:
x_pos = x - (x mod tilewidth)
y_pos = y - (y mod tileheight)
Ja selitystä:
x_pos, y_pos = palikan (tai minkä vaan) sijainti mihin piirretään
x, y = koordinaatit josta paikka määrittellään (esim. hiiren x ja y sijainnit)
mod = modulus, joka palauttaa laskun jakojäännöksen.
Ja sitten kaavan selitys:
Oletetaan että haluamme asettaa palikan ruutuun joka sisältää koordinaatit 325 (x) ja 131 (y). Yhden ruudun koko olisi 32 x 32 (tilewidth ja tileheight). Tällöin kaava toimisi seuraavasti:
palikan_x = 325 - (325 mod 32) = 325 - 5 = 320
palikan_y = 131 - (131 mod 32) = 131 - 3 = 128
Ja vóila! Se on siinä! Palikka päätyy onnellisesti oikeaan ruutuun minne sen halutaankiin päätyvän!
Pöf, Cheery tuli ja pilas C-kaavan lausekkeella
int a = int( float i );
mutta ajattelin kuitenkin laittaa tämän tänne.
Ja sitten esimerkkiä (C):
grid.c
#include <stdio.h> #include <time.h> // satunnaislukuja varten, muuten ei tarpeellinen tässä esimerkissä #include <stdlib.h> // ks. edellinen kommentti int main(void) { int x,y,x_pos,y_pos,tilewidth,tileheight; tilewidth = 32; // määrittellään ruudun leveys tileheight = 32; // määritellään ruudun korkeus // satunnaislukugeneraattorin alustus time_t ran; time(&ran); srand(ran); x=rand() % 640; y=rand() % 480; // 640 ja 480 ovat alueen leveys ja pituus // määritellään ruudun vasen yläkulma, johon palikka (tai mikä nyt onkaan) sijoitaan x_pos = x - ( x % tilewidth ); y_pos = y - ( y % tileheight ); // ja nyt on sitten sijainti määritetty // tähän tulis sit omaa koodia }
Aihe on jo aika vanha, joten et voi enää vastata siihen.