Skocz do zawartości

Przemieszczanie struktur w ds_grid


Sutikku

Rekomendowane odpowiedzi

Nie wiem jak się za to ugryźć. Mam grid mapę 255x255 i dajmy, że w środku niej jest kółko. I chciałbym przenieść to kółko z środka do rogu 0x0 i znaleźć drugi róg tego kółka np 128x122. Mam nadzieję, że chociaż napisane ułomnie to zrozumiale.

Odnośnik do komentarza
Udostępnij na innych stronach

ja bym jednak poprosil o narysowanie tego, bo totalnie nie wiem o co chodzi : D

Odnośnik do komentarza
Udostępnij na innych stronach

OK. No to dość proste. Czym są u ciebie puste dane? Możemy znać że to "0"?

W takim razie pozycję x znajdujesz poprzez:

_x=ds_grid_width(index);
for(_x=ds_grid_width(index); _x>0; _x--) {
	if(ds_grid_get_min(index, _x, 0, _x, ds_grid_height(index))>0) {
		exit
	}
}

Y podobnie. Jeżeli operujesz na stringach to musisz zamiast ds_grid_get_min() zrobić znów for i przelecieć przez wszystko w y

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

No ale jak znasz wysokość i szerokość, to nadal jak wyżej.

A jak nie znasz, to ciężka sprawa... chyba, ze to jedyny kształt w tym gridzie ? Wtedy będzie tak:

 

var _w = ds_grid_width(index);
var _h = ds_grid_height(index);


var xstart = _w, xend = 0, ystart = _h, yend = 0;

for(var i = 0; i < _w; i++) {
    for(var j = 0; j < _h; j++) {
      if index[# i, j] == 1 {
        xstart = min(xstart, i);
        xend = max(xend, i);
        ystart = min(ystart, j);
        yend = max(yend, j);
      }
    }
}


// ok, mamy juz prostokat w ktorym jest figura, teraz przesuwamy
 
var offsetx = -1, offsety = -20;

for(var i = xstart; i < xend; i++;) {
    for(var j = ystart; j < _yend; j++) {
      if index[# i, j] == 1 {
        index[# ((i + _w + xoffset) % _w), ((j + _h + yoffset) % _h)] = 1;
        index[# i, j] = 0;

        /* robimy operację modulo, żeby przenosiło na drugi koniec grida w przypadku, gdy np. litera zaczyna się na osi X w pozycji 2, a ustawisz offset na -5.
        ponieważ jednak modulo z liczb ujemnych nie jest tylko dopisaniem znaku - przed wartością, dodajemy pełną wysokość
        np. 3 % 10 = 3, ale -3 % 10 = 7, wystarczy jednak dodawać zawsze 10 do liczby i po sprawie (-3 + 10) % 10 = 3. */
      }
    }
}

tu jest jeszcze taki jeden problem, że jak szerokość litery jest taka, ze po odjęciu offsetu nachodzi na siebie z drugiej strony, no to skasuje się część litery niestety - trzeba by wtedy do nowego grida po prostu przenosić i stary kasować.

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ę...