C# silnik 2D
Witam,
ostatnio naszła mnie ochota na napisanie silnika do gier 2D.
no i mam taki oto problem na samym początku, mam plik *.bmp w którym znajduje się grafika terenu w klockach 32x32 i nie wiem jak sobie poradzić z tym, żeby jakkolwiek pociąć tą grafikę na oddzielne klocki.
Na razie grafika jest ładowana do obiektu Bitmap i teraz nie wiem jak utworzyć z tego obiektu kilka mniejszych obiektów z których później będę układał teren.
Myślę, że opisałem to w miarę zrozumiale?
Odpowiedzi: 7
Mam kolejny problem a mianowicie chodzi mi o przeźroczystość.
Jak już mam [b]PictureBox'a[/b] z moim bohaterem który będzie się poruszał po [b]PictureBox'ie[/b] z terenem.
Z góry ustalam że w grafice z bohaterem pola w kolorze 100% bieli będą przeźroczyste (nie widoczne) więc ich nie rysuje na [b]Graphics'ie[/b], i teraz w miejscach gdzie nie narysowałem żadnego punktu widać szare tło zamiast znajdującego się poniżej [b]PictureBox'a[/b] z [b]Graphics'em[/b] terenu. Uprzednio dla Graphics'a bohatera ustawiłem kanał ALPHA na 100.
Co mam zrobić żeby temu zaradzić?
Poczytałem i widzę że nie da się ustawić przeźroczystości dla [b]PictureBox'a[/b] więc rysuje na [b]Form'ie[/b] ale teraz mam taką śmieszną sprawę że widzę jak mi po kolei rysuje każdy piksel i to troszkę trwa :-s jest coś żeby od razu mi wyrzuciło całą grafikę, a nie po każdym pikselu odświeżało?
Udało mi się napisać kod który składa mi teren z załadowanej [b]Bitmap'y[/b] na podstawie pliku [i]*.txt[/i] w którym są w postaci tablicy wymienione numery klatek z [b]BItmap'y[/b].
Mam kolejną zagwozdkę bo jak wrzuciłem ten kod do funkcji to nie działa, a w dodatku zwolniło się samo wykonywanie tego kawałka kodu i [b]LIPTON[/b], kiedy nie było tego kodu w oddzielnej funkcji śmigało jak marzenie i co najważniejsze działało. Posiedzę podłubie i będzie działać nie ma innego wyjścia. :mryellow:
[color=red][b]Problem został rozwiązany!!![/b][/color]
Aha... aha... problem był w tym, że podałem złą ścieżkę do pliku :mryellow:
Jak ja nienawidzę takiego rodzaju pomyłek :mryellow: potem masz cały dzień do tyły przez literówka w ścieżce do pliku.
A nie zabrakło Ci małpki przed stringiem ew. podwójnego slasha? Teraz wygląda, jakbyś zdefiniował tabulator w stringu. BTW, ciężko mi zrozumieć, po co w ogóle potrzebna jest Ci osobna funkcja na nową bitmapę.
O a jednak chyba rozwiązałem problem ze składaniem terenu.
Teren będzie rysowany w jednym [b]Graphics'ie[/b], na podstawie tablicy z pliku w którym jest numerycznie opisane jaki wycinek [b]Bitmap'y[/b] będzie rysowany.
Pojawił się kolejny problem a mianowicie wrzuciłem zrobiłem funkcję która zwraca [b]Bitmap'ę[/b], a problem jest taki że się wysypuje.
Oto ona:
[code] public Bitmap LadujPlikTekstury(String Ssciezka)
{
Bitmap BitmapTekstura = new Bitmap(Ssciezka);
return BitmapTekstura;
}
[/code]
A oto wywołanie tej oto funkcji w innej funkcji:
[code]Bitmap BitmapTekstura = LadujPlikTekstury("Media/test.bmp");[/code]
Sekundkę wcześniej działało ale jak dodałem nową funkcję to się coś zaczęło sypać.
Wywala mi taki oto błąd:
[center][b][i]An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll
Additional information: Parametr jest nieprawidłowy.[/i][/b][/center]
Podświetla mi tą linijkę:
[code]Bitmap BitmapTekstura = new Bitmap(Ssciezka);[/code]
Pomęczę się jeszcze trochę może w uda mi się to rozgryźć ale jak ktoś może pomóc to byłbym wdzięczny.
Zrobiłem tak jak piszesz tylko na razie bez ?!?![b]using[/b]?!?!(a nie chodziło ci tutaj o [b]unsafe[/b]). Wycina piksele z [b]Bitmap'y[/b] wrzucam je do tablicy a potem do [b]Graphics'a[/b].
Jak na razie działa ale miałem mały problem z kolorami, ale rozwiązany okazało się że kolory były wpisywane do tablicy na opak :mryellow: Zamiast [color=red]R[/color][color=green]G[/color][color=blue]B[/color] to było [color=blue]B[/color][color=green]G[/color][color=red]R[/color].
[b]Ad@$[/b] dzięki!
A więc kolejne pytanie :mryellow: czy jest możliwość wrzucenia do jednego [b]PictureBox'a [/b] kilku [b]Graphics'ów[/b], czy muszę zrobić dla każdej osobny, albo jakoś do jednego [b]Graphics'a[/b] kilka [b]Graphics'ów[/b] załadować, no chyba że musiałbym znowu to rozbijać na pojedyncze składowe i składać w całość to już sobie zrobię to na tych [b]PictureBox'ach[/b].
W Javie jest cropImage bodajże, a w C# nie ma chyba nic podobnego. Ja to zawsze ręcznie robiłem. Tworzyłem obiekt klasy Graphics i w parametrze podawałem bitmapę, tylko problem pojawiał się przy większej ilości danych. Wtedy pamięć się nie zwalniała, więc pamiętaj o "using ...", jak zdecydujesz się na ten sposób.
Strona 1 / 1