Autor Wątek: Winforms i renderowanie bitmap  (Przeczytany 1793 razy)

Offline waxx

  • Użytkownik

# Maj 03, 2010, 19:34:09
Witam, to mój pierwszy post na forum i mam nadzieję, że będzie dość poprawny :)

A więc wymyśliłem sobie skodzenie map editora do gierki w C# z wykorzystaniem Windows Forms. Problem pojawił się w renderowaniu bitmap... Pomyślałem, że wykorzystam XNA które nawet troche znam i przeszukałem necik w znalezieniu połączenia jakoś winforms + okienka xna. Niby poszło gładko, ale pojawiły się problemy z eventami. Okienka nie da się sfocusować, więc odbierając eventy w klasie XNA jednocześnie reaguje mi program na ten event w innych kontrolkach. Poza tym pozycja myszy się wali, a przekazywanie współrzędnych z formy do xna też jest jakieś dziwne (problem typu piksele pikselom nie równe, na osi Y im niżej tym większa dysproporcja). Więc pisze ten temat pytając się o alternatywne metody. Jestem w winforms zielony, myślałem o zwykłym natywnym wyświetlaniu obrazków, ale zobaczyłem tylko kontrolkę typu 1obrazek = 1kontrolka. Przecież nie będę tworzył ich 1k na każdy tile.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Dab

  • Redaktor
    • blog

# Maj 03, 2010, 19:39:22
Poszukaj w MSDN opisu klasy Graphics (w szczególności f-cji DrawImage).

Offline waxx

  • Użytkownik

# Maj 03, 2010, 19:43:23
A gdzie teraz mam tego użyć? Nie ma żadnych funkcji do przeładowania typu Draw / Update wszystko na tych idiotycznych eventach. Sorry za lamerskie pytanie, ciężko się przyzwyczaić do takiego czegoś jak dla mnie.

Offline Dab

  • Redaktor
    • blog

# Maj 03, 2010, 19:48:23
Albo używasz timera, albo robisz klasyczną główną pętlę gry.

Offline Khazad

  • Użytkownik

# Maj 03, 2010, 20:04:23
Sam szukałem dziś czegoś podobnego.. I znalazłem :P Google
http://msdn.microsoft.com/en-us/library/system.drawing.graphics.aspx
Zacznij z tąd, dalej pójdzie prosto.
Winormsy dostarczają ci wszystkie niezbędne eventy do takich zabaw :P (patrz onPaint)
Pamiętaj że możesz rysować na dowolnym "formsie", np. na buttonie czy panelu. Ja rysuję na pictureBox'ie.

Offline nilphilus

  • Użytkownik
    • wordpress

# Maj 03, 2010, 20:20:29
@Khazad: fakt. idealnie to pasuje do edytorów, tych prostych ;-)

Jeśli chodzi o współrzędne to jest na to całkiem prosty sposób ;-)
                var tmpRenderWindowPosOnScreen = mViewControl.PointToClient(System.Windows.Forms.Cursor.Position);
                var renderWindowPosOnScreen = new Point(tmpRenderWindowPosOnScreen.X, tmpRenderWindowPosOnScreen.Y);
                terrain.groundCursor.UpdateGroundPosition(renderWindowPosOnScreen);

mViewControl to oczywiście kontrolka [poszukaj na xna community jeżeli nie korzystałeś z tego]


//Ino, jeżeli chodzi o same kafelki, to pomiń tutaj XNA i korzystam z WinForms


Pozostaje jeszcze motyw z odświeżaniem - ale to da się załatwić Timerem. [reset co apdejt]

Offline Khazad

  • Użytkownik

# Maj 03, 2010, 20:34:07
Jeżeli ma to być tylko edytor to po co odświeżać cały czas? Można to robić tylko wtedy kiedy coś robimy... Np. dzialamy w renderowanym polu (event MouseMove ) :P

Offline nilphilus

  • Użytkownik
    • wordpress

# Maj 03, 2010, 21:02:32
z jakiś powodów edytory nie są robione tylko w WinForms ;->
WinForms się nada do edycji kafelków, ale średnio to widzę np. w edytorze terenu (heightmapy)

Offline Khazad

  • Użytkownik

# Maj 03, 2010, 21:22:43
Póki co tych powodów nie znam  :D Ale zgadzam się z tobą.
Jednak jak mówi twoja sygnatura: "Powinieneś doskonale znać ograniczenia WinForms i się nimi nie przejmować."  ;) ;D