Problem z AffineTransform

0

Mam pewno głupi problem, ale brakuje mi genialnego pomysłu aby go rozwiązać, a nigdzie rozwiązania znaleźć też nie umiem.

Mam prostokat poruszający się po kafelkowanej planszy. Każda kafelka to klasa, która w zależnosci od tego co reprezentuje na planszy ma inną nazwe (mało eleganckie ale na razie się z tym bawie). Prostokąt mogę obracac za pomoca klasy AffineTransform o dany kat.
Problem polega na tym ze gdy prostokat ma kąt 0 czyli jest skierowany ku górze wykrywa kafelki w dobrym monencie, lecz gdy go obróce o 180 stopni to też wykrywa kafelki, ale chodź wizualnie jest obrócony to wykrywa je jak by wcale sie nie obrócil.
Żeby bylo jasne zmieszzce screeny.

Samochód jest tym prostokątem, porusza sie z góry do dolu, a wykryta kafelka jest zaznaczona na czerwono.

http://img152.imageshack.us/my.php?image=11kopia.jpg
Tutaj jest kat 0 i zauwazyl kafel na poczatku ukladu współrzednych prostokata.

http://yfrog.com/eg22kopiaj
Tukej jest kat 180 stopni i dopiero w przedstawionym momencie zauwazyl kafel.

Jak mozna sobie z tym problem memporadzic, zeby w zależnosci od kata prostokatu, kafel byl zauwazany tak jak na pierwszym screenie?:> </image>

0

To jeszcze musisz po obrocie przesunąć ten prostokąt, żeby był w tym samym miejscu, co przed transformacją. Zapewne problem zaznaczania błędnego pola wynika z tego, że widzisz pole auta w innym miejscu niż widzi to program.

0

Dziś coś ciężko myślę, cała ta transformacje robię w ten sposób

AffineTransform tmp = g2d.getTransform();
			AffineTransform zmien = new AffineTransform();						
			zmien.rotate(Math.toRadians(bohater.kat),(int)(bohater.getX()+ustawiacz_x+(bohater.getWidth()/2) ),(int)(bohater.getY()+ustawiacz_y+(bohater.getHeight())));
  
   			g2d.transform(zmien);
	   		g2d.drawImage(tworz_mape.wczytaj_obraz("gracz.png"),(int)(bohater.getX()+ustawiacz_x),(int)(bohater.getY()+ustawiacz_y),null);
			
			g2d.setTransform(tmp);

I teraz co zmienić lub co dodać (nazwa metody, nie wiem), a żeby przesunąć ten prostokąt?:>

Edit:

dobra chyab wiem czego tzreba uzyc.. metoda translate() pzresunie mi ten prostokat. Ale jak by ktos mial inny pomysl to pisac:P

0

Możesz jeszcze wyliczyć macierz do transformacji, zamiast składać dwa przekształcenia.
W JME jest klasa GameCanvas i Sprite do robienia gier. Proponuję popatrzeć, czy to nie jest to co powinieneś spróbować uruchomić. Poza tym, jeżeli by się nie udało, to może prościej namalować 4 auta i zamieniać obrazek, a nie obracać.

0

Tak się tym bawiłem i chyba ten obrót trzeba inaczje rozwiązać.
Metoda translate dziala ale ten samochodzik ma skrecac no cos w stylu samochodziku z gta :P wiec gdy dodam translate by pzresunac uklad współzednych tak by dobrze wykrywał po obrocie te kafle, wtedy w raz z nim pzresówa sie i grafika co daje conajmniej negatywny efekt wizualny.
Obawiam się ze gdybym wyliczal ta macierz efekt byłby podobny.

JME jest raczej typowo na urzadzenia przenośne typu komórka , pda wiec nie bardzo mi używac ich w mojej grze, ktora raczej ma byc apletem dostepnym z poziomu pzreglaradki internetowej.

A namalowanie 4 autek i tylko podmieniac obrazki.. niby najprostrzy pomysl ale z racji tego ze bym musial narysowac ich tyle ile by mógl katów przyjac, to troche w tym przypadku nie realne.. a przynajmniej niezbyt fajne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1