Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   31 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
  • 0
Sutikku

Przemieszczanie struktur w ds_grid

Pytanie

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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

9 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 1

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

  • Lubię (+1) 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Z jakiegoś powodu wydaje mi się że szukasz zwyczajnego:

x = sin(i)*r
y = -cos(i)*r

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
18 godzin temu, Uzjel napisał:

Róg kółka?

chciałby przenieść cały kwadrat w którym jest koło, wiec zakładam, że to róg kwadratu :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Tak, chodzi o róg kwadratu opisanego na kole, mój błąd.gmclanypomoc.png

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

OK no to pozycją jaką szukasz jest średnica koła

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Użyłem złego przykładu, to wcale nie jest koło, tylko tak dla zobrazowania użyłem, równie dobrze to może być np literka A. I szerokość nie jest równa wysokości.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×