XNA Game Studio - sensowne poradniki

1

Witam :). Zajmuję się aktualnie tworzeniem gier w XNA Game Studio i mam pewien problem. Szukałem poradników, które by to rozwiązały, ale nic nie mogłem znaleźć. Moje pytanie brzmi: renderowanie obiektów wykonywane jest w metodzie Draw(), ale jak mam stworzyć obiekt w trakcie gry albo go usunąć?. Czy w tym celu wykorzystywane jest zwykłe wyrenderowanie ich poza planem, a gdy są potrzebne po prostu trzeba zmienić ich współrzędne? Pozdrawiam.

1

Hah, zmiana pozycji w celu usunięcia obiektu?? Niee. Powinieneś mieć listę obiektów, które są na scenie i dodawać oraz usuwać te obiekty. Obiekty, które usuniesz z listy, przestają faktycznie istnieć, a rysowane i odświeżane są tylko obiekty z tej właśnie listy. Jeżeli będziesz dziedziczył swoją klasę, która opisuje obiekt gry po obiekcie GameComponent to możesz dodać teraz obiekt do właściwości Components obiektu głównej gry. Dzięki temu wszystkie komponenty, które są na liście są odświeżane, a potem malowane. Usunięcie takiego obiektu po prostu go niszczy.

0

Sorki, że pytam (zielony jestem) ale te obiekty mają być klasy Rectangle? Jeśli nie to mnie oświeć :).

0

Dlaczego Rectangle? Wtf? Po twoich wypowiedziach mam wrażenie, że nic a nic nie kumasz w XNA, w ogóle w programowaniu gier... Poczytaj jakiś poradnik o XNA może co?

Masz obiekty w grze. Są one na liście. I one wszystkie są odświeżane i rysowane. Jak nie chcesz jakiegoś to go po prostu usuwasz i tyle. Chcąc utworzyć własny obiekt w grze tworzysz nową klasę i dziedziczysz ją po klasie GameComponent.

0

Rzeczywiście, wspominałem na początku, że jestem w tym zielony. Jakbyś mógł mi podać link do dobrego poradnika, albo wyjaśnić jak dostać się do tej listy, bo czegoś takiego znaleźć nie mogę. Sorki (:)) i pozdrawiam.

1

W domyślnej klasie Game1, która dziedziczy po Game masz dostęp do listy komponentów tak:

this.Components

Jeżeli masz swój obiekt w grze, klasa powinna wyglądać coś na ten wzór:

class GameObject : GameComponent
{
    // ...
}

Teraz w głównej klasie możesz dodać ten obiekt:

this.Components.Add(new GameObject(...));

Od tego momentu dodany obiekt będzie się odświeżał i rysował sam.

Jeżeli chcesz zaś usunąć konkretny obiekt, powinieneś jeszcze zrobić słownik Dictionary<T>, który trzyma referencje wszystkich obiektów, a dostęp do nich masz po nazwach obiektów, wtedy możesz usunąc z this.Components konkretny obiekt:

this.Components.Remove(objects["player"]);
0

Dzięki za tę odpowiedź :). Mam jeszcze jedno pytanie: jak przy tworzeniu nowego obiektu na "planie" uniknąć rysowania go (bo jest to "zajmujące")?

1

No na cholerę go tworzyć, skoro ma nie być rysowany? Chyba, że chodzi o obiekt fizyczny. Musisz zaimplementować interfejs IDrawable w swojej klasie GameObject. Dzięki temu, silnik będzie wiedział, że obiekt jest rysowalny i wywoła metodę Draw(). Jeżeli klasa nie będzie implementować tego interfejsu automatycznie nie wywoła się ta metoda i obiekt nie będzie widzialny, ponieważ nie będzie co narysować.

1

Dzięki za tę odpowiedź :). Dotychczas implementowałem tylko Texture2D, Rectangle, Vector2 i w metodzie Draw() wydawałem polecenia do rysowania. Czas zaopatrzyć się w książkę do XNA :). Można zamknąć. Pozdrawiam.

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