Master of Sprites - sprite edytor w javie

Szukasz drobnej pomocy przy kodowaniu, albo chcesz przedstawić światu swoją gotową lub w trakcie realizacji produkcję? To właściwy dział.
Wiadomość
Autor
Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Master of Sprites - sprite edytor w javie

#1 Post autor: Operator Teleksu »

Siema.

Chciałem zaprezentować w celach poglądowych następne swoje dzieło. Tylko bardzo proszę bez żadnych news'ów na portalu jakby co. :)

Chodzi o pisany w javie edytor, z którym że tak powiem, wiążę nadzieje na swój niewielki sukces - przynajmniej jeśli kiedyś go dokończę. Na razie program jest w "wczesnej fazie rozwoju", brakuje wielu potrzebnych funkcji (podglądu animacji przedewszystkim) ale można już co nieco zobaczyć i ocenić jak to się prezentuje i czy na coś komuś potrzebne.

Jakby co, java 8 jest jak najbardziej ok do uruchomienia.

https://github.com/tstamborski/master-o ... prites.jar

Chciałbym zapytać (już tak poważnie) czy to ma sens, kiedy jest darmowy SpritePad, płatny też nie kosztuje zbyt wiele i SpritePad świetnie działa na linuksie via Wine. Piszę o przyszłości, bo narazie tak jak napisałem, wszystko jest dopiero w trakcie pracy.
Have a nice day!

Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Re: Master of Sprites - sprite edytor w javie

#2 Post autor: Operator Teleksu »

Wiem że nie każdemu chce się produkować na temat czyjegoś tam programu i wgl, ale wiem też że kilka pobrań weszło i byście napisali chociaż jednym słowem czy ogólnie fajne czy nie. Sorry za głupią ciekawość.

Przy okazji wrzucam linki do screenshot'ów (nie chcą mi się jakoś wyświetlać kiedy wklejam je jako obraz):
https://github.com/tstamborski/master-o ... nshot0.png
https://github.com/tstamborski/master-o ... nshot1.png
Have a nice day!

Gordian
Posty: 317
Rejestracja: 14 cze 2021, 13:32

Re: Master of Sprites - sprite edytor w javie

#3 Post autor: Gordian »

Niezależnie od opinii, jeśli masz ochotę to twórz, rozwijaj.

Mi osobiście brakowałoby opcji eksportu do kodu assemblera (jakaś tabelka bajtów).

Superopcją byłaby rotacja duszka wokół własnej osi o dowolny kąt i skalowanie (to byłoby pewnie wyzwaniem dla trybu multicolor).

Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Re: Master of Sprites - sprite edytor w javie

#4 Post autor: Operator Teleksu »

Eksport do kodu asemblera owszem planuje dodać, chociaż odkładałem to mocno na później.

Obracanie trochę gorzej, właśnie byłoby to dla mnie duże wyzwanie w trybie multikolor nawet o równe 90 stopni. Ale pomyślę, poszukam jakiegoś gotowego algorytmu i zobaczymy.

Chce mi się i zamierzam dalej nad tym pracować. Tylko myślę że zawsze warto zapytać kogoś innego, bo samemu można nie dostrzec jakiegoś problemu, przez to że np. zdążyłem się psychicznie nastawić na coś innego.
Have a nice day!

Gordian
Posty: 317
Rejestracja: 14 cze 2021, 13:32

Re: Master of Sprites - sprite edytor w javie

#5 Post autor: Gordian »

Nie udało mi się zrozumieć opcji "Overlay". Jak ona działa?

Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Re: Master of Sprites - sprite edytor w javie

#6 Post autor: Operator Teleksu »

no właśnie na razie to nie robi niczego (poza ustawieniem jednego bitu w atrybutach duszka). kiedy dodam podgląd animacji (i nie tylko) ta opcja będzie powodować że duszek będzie nakładany na następnego (oddalonego w pamięci o tyle co "overlay distance"). tylko że to będzie widoczne w zakładce podglądu której na razie nie ma.

taki miałem pomysł przynajmniej, żeby oddzielić podgląd od edytora a za to podgląd miał trochę bardziej zaawansowane opcje np. wyświetlanie kilku zlepionych ze sobą duszków na raz i nakładanie właśnie.
Have a nice day!

Gordian
Posty: 317
Rejestracja: 14 cze 2021, 13:32

Re: Master of Sprites - sprite edytor w javie

#7 Post autor: Gordian »

W przypadku multicolor wydaje mi się, że rotację można zrealizować w ten sposób:
1. Potraktowanie duszka jako bitmapy i przeskalowanie w osi X do 50% szerokości,
2. Rotacja bitmapy
3. Ponowne przeskalowanie bitmapy do 200%, ale względem wektora kąta (to chyba da się obliczyć jako złożenie macierzy skalowania i obrotu - otrzymamy pewnie jakieś współczynniki skalowanie w osi X i Y).

Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Re: Master of Sprites - sprite edytor w javie

#8 Post autor: Operator Teleksu »

W sumie to chyba racja że jest to na tyle proste.
Gordian pisze:
28 maja 2024, 14:23
3. Ponowne przeskalowanie bitmapy do 200%, ale względem wektora kąta (to chyba da się obliczyć jako złożenie macierzy skalowania i obrotu - otrzymamy pewnie jakieś współczynniki skalowanie w osi X i Y).
Z matematyką na poziomie wyższym niż liceum (macierze) jestem trochę do tyłu, ale napewno to ogarnę, pewnie java ma gotowe funkcje do tego.

Inna sprawa to wydajność - model duszka nie jest w moim programie bitmapą i zamienianie go na bitmapę i z powrotem (jakby to można topornie i najprościej rozwiązać) to mało optymalne rozwiązanie. Tyle że w przypadku tak małej bitmapy to pewnie i tak bez znaczenia.

sorry jak coś pie***, nie jestem profesjonalistą.
Have a nice day!

Gordian
Posty: 317
Rejestracja: 14 cze 2021, 13:32

Re: Master of Sprites - sprite edytor w javie

#9 Post autor: Gordian »

Operator Teleksu pisze:
28 maja 2024, 15:11
model duszka nie jest w moim programie bitmapą i zamienianie go na bitmapę i z powrotem (jakby to można topornie i najprościej rozwiązać) to mało optymalne rozwiązanie.
Mam na myśli reprezentację każdego piksela jako osobnego bajtu, czy cokolwiek innego co można wykorzystać w klasie Image czy BufferedImage.

Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Re: Master of Sprites - sprite edytor w javie

#10 Post autor: Operator Teleksu »

No właśnie mój program przechowuje sprite'y dokładnie tak samo jak robi to sam komodorek. Klasa SpriteData nie dziedziczy po Image ani nie implementuje RenderedImage. Zamienić na BufferedImage to może i tak zamieniam żeby móc odrysować ale żeby z powrotem musiałbym robić coś takiego (w sumie to podobnego jak i w pierwszą stronę):

Kod: Zaznacz cały

//tryb multikolor załóżmy
for (int x = 0; x < bufferedImage.getWidth(); x++) {
	for (int y = 0; y < bufferedImage.getHeight(); y++ ) {
		switch (bufferedImage.getRGB(x, y)) {
			case palette.getColor(SpriteColor.SpriteColor).getRGB():
				spriteData.setPixel(x / 2, y, SpriteColor.SpriteColor);
				break;
			case palette.getColor(SpriteColor.Multi0Color).getRGB():
				spriteData.setPixel(x / 2, y, SpriteColor.Multi0Color);
				break;
			case palette.getColor(SpriteColor.Multi1Color).getRGB():
				spriteData.setPixel(x / 2, y, SpriteColor.Multi1Color);
				break;
			default:	//SpriteColor.BackgroundColor
				spriteData.setPixel(x / 2, y, SpriteColor.BackgroundColor);
				break;
		}
	}
}
Zastanawiam się (bez sensu bo jak napisałem dla bitmapy 24x21 to i tak trwa nanosekundę) czy to nie za duży narzut. Wiem, głupi jestem.
Have a nice day!

Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Re: Master of Sprites - sprite edytor w javie

#11 Post autor: Operator Teleksu »

Wiem if - else if - else tam powinno być a nie switch.
Have a nice day!

Awatar użytkownika
carrion
Posty: 2351
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Master of Sprites - sprite edytor w javie

#12 Post autor: carrion »

hej
odpaliłem i... działa. w zasadzie nic więcej nie umiem powiedzieć o funkcjach jakie zaimplementowałeś.
Sprajt Overlay to dobry pomysł.
Nie widzę funkcji grupowania sprajtów aby zrobić jeden większy np składający się z 4, czyli 2x2 sprajty
... i do tego dodać ten overlay - takiego ficzera z overlay'em w sumie chyba nie widziałem dla sprajtów 2x2
obie powyższe funkcje uważam że były by przydatne.

to tak na szybko.
c64portal.pl, retronavigator.com

Awatar użytkownika
Operator Teleksu
Posty: 75
Rejestracja: 27 lis 2020, 21:31

Re: Master of Sprites - sprite edytor w javie

#13 Post autor: Operator Teleksu »

carrion pisze:
29 maja 2024, 10:56
Nie widzę funkcji grupowania sprajtów aby zrobić jeden większy np składający się z 4, czyli 2x2 sprajty
... i do tego dodać ten overlay - takiego ficzera z overlay'em w sumie chyba nie widziałem dla sprajtów 2x2
obie powyższe funkcje uważam że były by przydatne.
To nie jest jeszcze zaimplementowane - to na razie tylko plan na przyszłość.

Pozatym dzięki za testowanie (i tobie i wszystkim innym).
Have a nice day!

ytm
Posty: 26
Rejestracja: 08 sie 2021, 22:06

Re: Master of Sprites - sprite edytor w javie

#14 Post autor: ytm »

Gordian pisze:
28 maja 2024, 14:23
W przypadku multicolor wydaje mi się, że rotację można zrealizować w ten sposób:
1. Potraktowanie duszka jako bitmapy i przeskalowanie w osi X do 50% szerokości,
2. Rotacja bitmapy
3. Ponowne przeskalowanie bitmapy do 200%, ale względem wektora kąta (to chyba da się obliczyć jako złożenie macierzy skalowania i obrotu - otrzymamy pewnie jakieś współczynniki skalowanie w osi X i Y).
Rotację pixel-perfect można zrobić przez trzykrotny shear (nie wiem jak to po polsku się nazywa) - piksele są tylko przesuwane w nowe miejsca - żaden nie zniknie i żaden nowy się nie pojawi. https://cohost.org/tomforsyth/post/8918 ... with-three

OpenSprite próbuje to robić w ten sposób, ale ma jakiś błąd w implementacji i obracana grafika nie wygląda dobrze.
Gdy spróbowałem to odtworzyć w Pythonie wyszło poprawnie: https://github.com/jowin202/OpenSprite/issues/4
Bitmapy nie trzeba skalować, ale trzeba dodać marginesy z każdej strony.

ytm

Gordian
Posty: 317
Rejestracja: 14 cze 2021, 13:32

Re: Master of Sprites - sprite edytor w javie

#15 Post autor: Gordian »

ytm pisze:
29 maja 2024, 12:24
Rotację pixel-perfect można zrobić przez trzykrotny shear
A jesteś pewien, że to zadziała ze spritem w trybie multicolor? W artykule jest przykład gdzie mamy pixele 1x1, na GitHubie jest opisywany przykład gdzie również dotyczy to duszka jednokolorowego.

Niemniej, sposób fajny.

ytm
Posty: 26
Rejestracja: 08 sie 2021, 22:06

Re: Master of Sprites - sprite edytor w javie

#16 Post autor: ytm »

Gdy reprezentacja będzie tak wyżej pisałeś w #9 - gdzie 'pixel' to bajt (indeks koloru 0-3) to technicznie będzie działać na pewno.
Ale w multi piksele są prostokątne i przy obrocie proporcje kształtu będą się zmieniać.

To może wyglądać lepiej jeśli spróbować trochę inaczej - duszka w multicolor (12x21) rozciągamy do (24x21) tak jakby każdy piksel multicolor to dwa niezależne piksele hires. Obracamy tę grafikę i z wyniku bierzemy co drugą kolumnę, żeby dostać z powrotem (12x21).

Gordian
Posty: 317
Rejestracja: 14 cze 2021, 13:32

Re: Master of Sprites - sprite edytor w javie

#17 Post autor: Gordian »

ytm pisze:
29 maja 2024, 14:04
Gdy reprezentacja będzie tak wyżej pisałeś w #9 - gdzie 'pixel' to bajt (indeks koloru 0-3) to technicznie będzie działać na pewno.
Ale w multi piksele są prostokątne i przy obrocie proporcje kształtu będą się zmieniać.
Opisywałem to na potrzeby reprezentacji w Javie.
Technicznie będzie działać, ale nie da się skonwertować obrazu w takiej postaci na piksele duszka w multicolor - piksel 2x1 po obrocie może być reprezentowany przez dwa pixele 1x1 w sąsiedztwie "na ukos".
[/quote]
ytm pisze:
29 maja 2024, 14:04
To może wyglądać lepiej jeśli spróbować trochę inaczej - duszka w multicolor (12x21) rozciągamy do (24x21) tak jakby każdy piksel multicolor to dwa niezależne piksele hires. Obracamy tę grafikę i z wyniku bierzemy co drugą kolumnę, żeby dostać z powrotem (12x21).
Wydaje mi się, że sytuacja byłaby identyczna jak wyżej.

ytm
Posty: 26
Rejestracja: 08 sie 2021, 22:06

Re: Master of Sprites - sprite edytor w javie

#18 Post autor: ytm »

Gordian pisze:
29 maja 2024, 14:38
ytm pisze:
29 maja 2024, 14:04
Gdy reprezentacja będzie tak wyżej pisałeś w #9 - gdzie 'pixel' to bajt (indeks koloru 0-3) to technicznie będzie działać na pewno.
Ale w multi piksele są prostokątne i przy obrocie proporcje kształtu będą się zmieniać.
Opisywałem to na potrzeby reprezentacji w Javie.
Technicznie będzie działać, ale nie da się skonwertować obrazu w takiej postaci na piksele duszka w multicolor - piksel 2x1 po obrocie może być reprezentowany przez dwa pixele 1x1 w sąsiedztwie "na ukos".
Myślę o czymś takim: A, B, C, D to indeksy koloru, dla C64 dopiero na samym końcu mapowane na pary bitów %00, %01, %10, %11

Multicolor, pixele 2x1:

Kod: Zaznacz cały

AB
CD
Po rozciągnięciu, pixele 1x1:

Kod: Zaznacz cały

AABB
CCDD
Po jakimś obrocie, pixele nadal 1x1:

Kod: Zaznacz cały

CCAA
DDBB
Mapowanie z powrotem na pixele 2x1, wyrzucamy np. nieparzyste kolumny:

Kod: Zaznacz cały

CA
DB
Gdy rozciągnięty i obrócony duszek ma taki podwojony pixel na ukos:

Kod: Zaznacz cały

.A
A.
w ostatnim kroku zostanie tylko jeden z nich - z parzystej albo z nieparzystej kolumny.

Nie wiem czy to będzie dobrze wyglądać. Musiałbym napisać coś na próbę bo nie mogę sobie wyobrazić jak bardzo to zniekształca rysunki przy obrotach.

Gordian
Posty: 317
Rejestracja: 14 cze 2021, 13:32

Re: Master of Sprites - sprite edytor w javie

#19 Post autor: Gordian »

Jestem ciekaw sytuacji dla innego kąta niż 90 stopni, np. 45.

Awatar użytkownika
SUDi
Posty: 1393
Rejestracja: 04 lis 2008, 23:03

Re: Master of Sprites - sprite edytor w javie

#20 Post autor: SUDi »

Luknijcie na to videjko, może się przyda (szczególnie od 35 minuty) :
https://www.youtube.com/watch?v=d90LEBUTDqc
Używałem tego toola (The Spreditor) do obracania sprajtem do prodki w zeszłym roku.

ODPOWIEDZ