Ogłoszenie |
Administracja Forum
|
Zamknięty przez: Ayene Sob 15 Sty, 2011 20:16 |
Class Sprite |
Autor |
Wiadomość |
Teyan
Preferowany:
Pomógł: 1 raz Dołączył: 05 Lis 2009 Posty: 48
|
Wysłany: Czw 30 Gru, 2010 00:13
|
|
Class Sprite
|
Cześć wróciłem.
Mam prośbę. Czy ktoś mi wytłumaczy class Sprite?
Jak to działa i w ogóle.
Nie jestem zielony w Ruby, nawet napisałem kilka skryptów (jedne lepiej inne gorzej - przyznaje sie bez bicia). Ale nie potrafie dodawać sprite'ów. Nawet nie wiem jakie pytanie mam tutaj zadać.
Chcę także zrobić animację (potrafie "zatrzymywać czas w grze", tj: posługiwać się zmienną lokalną @wait (choć u mnie nazywa się @czekaj)). Czy ktoś mi pomoże? |
|
|
|
Ayene
Ranga RM:
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
|
Wysłany: Czw 30 Gru, 2010 01:17
|
|
|
A przeglądałeś w tym celu Pomoc VX? Wpisz w wyszukiwarce Sprite, a tam może znajdziesz odpowiedź na swoje tajemnicze pytanie Jeśli chcesz zrobić animacje, zajrzyj do Sprite_Base. VX chociażby tym różni się od XP, że ma ładnie zdefiniowane klasy "bazowe". Jest tam definicja, dzięki której można odtworzyć animacje z bazy danych... 'start_animation' |
________________________
|
|
|
|
Teyan
Preferowany:
Pomógł: 1 raz Dołączył: 05 Lis 2009 Posty: 48
|
Wysłany: Czw 30 Gru, 2010 20:10
|
|
|
Yyy... i tak nic z tego nie kumam. Ostatnio robiłem łowienie ryb i skrypt na podawanie (wpisywanie) hasła. Animacjami zajmę się potem, teraz mam inne pytanie.
Czy można uzależnić windowskin okna (jak zmienić windowskin tylko jednego okna to wiem) od terenu na jakim znajduje się gracz (drużyna). Próbowałem juz poszukać jakieś pokemony (bo te potworki siedziały w trawie, musieli to zrobić na podobnej zasadzie), ale nie znalazłem poków na VX. Czy ktoś pomoże? |
|
|
|
Sabikku
Nagrody:
Ranga RM:
Pomógł: 73 razy Dołączył: 04 Kwi 2010 Posty: 428
|
Wysłany: Czw 30 Gru, 2010 22:20
|
|
|
Polecam: http://tryruby.org/
+ znajomość angielskiego i przejrzenie dokumentacji rmvx.
Musisz stworzyć obiekt klasy Sprite_Base i przypisać mu bitmapę o odpowiedniej wielkości. Potem z każdym odświeżeniem ekranu wywoływać jego funkcję składową update. W momencie odtworzenia animacji wywołaj funkcję start_animation, jako argument podając docelową animację ($data_animation[id]). Uruchom ją tylko raz, inaczej nie będzie widać animacji. Pamiętaj też o funkcji dispose, którą uruchamia się, kiedy Sprite'a już nie potrzebujesz.
Ot, cała filozofia :P.
W jakim sensie 'terenu'? Jeśli pasowałoby ci zrobić listę id map każdego z 'terenów', możesz zrobić tak:
Kod: |
case $game_map.map_id
when 1..5
s = "teren1"
when 6,7,8
s = "teren2"
when 9..15
s = "teren3"
end
self.windowskin = Cache.system("windowskin "+s.to_s)
|
W tym przypadku na mapie 3 wymagać będzie windowskina o nazwie "windowskin teren1", na mapie 7 "windowskin teren2", a na mapie 14 - "windowskin teren3". Mam nadzieję, że rozumiesz.
Można też uzależnić od id konkretnego tile'a (np. trawa -> zielony windowskin, pustynia -> żółty itp), ale nie jestem pewien, o co dokładnie ci chodziło . |
|
|
|
Teyan
Preferowany:
Pomógł: 1 raz Dołączył: 05 Lis 2009 Posty: 48
|
|
|
|
Sabikku
Nagrody:
Ranga RM:
Pomógł: 73 razy Dołączył: 04 Kwi 2010 Posty: 428
|
Wysłany: Pią 31 Gru, 2010 16:29
|
|
|
$game_map.data <-- tu przechowywany jest obiekt klasy Table, tj. trójwymiarowa tablica przechowująca ID tileów w każdym miejscu na mapie. Możesz z niego pobrać id w ten sposób:
Kod: | $game_map.data[x, y, z] |
Czyli przykładowo z pomocą:
Kod: | $game_map.data[$game_player.x, $game_player.y, 0] |
dostaniesz id tile'a na najniższej warstwie, na którym aktualnie stoi gracz. Zauważ, że id nie są poustawiane równo (1,2,3) tylko mają nieco większe numery (nie wiem jak to jest przeliczane, ale wychodzi w tysiącach).
Warunek wyglądałby np. tak:
Kod: | case $game_map.data[$game_player.x, $game_player.y, 0]
when 5012
s = "teren1"
when 1201
s = "teren2"
when 4504
s = "teren3"
else
s = "teren0"
end
self.windowskin = Cache.system("windowskin "+s.to_s) |
|
|
|
|
Teyan
Preferowany:
Pomógł: 1 raz Dołączył: 05 Lis 2009 Posty: 48
|
Wysłany: Pią 31 Gru, 2010 20:39
|
|
|
Tak! To jest to! Dzięki.
Za pomoc masz oczywiście pomógł!.
Mam teraz pytania odnośnie sprite'ów:
Załóżmy, że stworzyłem taki sprite:
Kod: | @sprite = Sprite.new
@sprite.bitmap = Cache.system("Iconset") |
1. Czy można zrobić tak aby program wyciął jedną ikonkę i wstawił ją zamiast całego iconsetu?
2. Czy można wyłączyć widzialność tego sprite'u tak jak okienek (visible = true/false).
3. Czy można ustawić by program pokolorował cały sprite na np: czerwono, ale oprócz miejsc przezroczystych? |
|
|
|
Sabikku
Nagrody:
Ranga RM:
Pomógł: 73 razy Dołączył: 04 Kwi 2010 Posty: 428
|
Wysłany: Pon 03 Sty, 2011 00:37
|
|
|
Nie mam dostępu do RMa, a do jutra zapomnę o temacie - napiszę co wiem z pamięci, w rmxp działa na pewno, w rmvx nie jestem pewien:
Kolorowanie - wystarczy nałożyć odpowiednią maskę kollorów (sprawdź w dokumentacji, konkretniej o klasie Sprite):
@sprite.color = Color.new(255,0,0, 150)
Tak, można wyłączyć widoczność: @sprite.visible = false. Tak samo jak w przypadku okienek.
Wycinanie... Na pewno trzeba zmodyfikować prostokąt 'źródłowy' który standardowo ogarnia cały obrazek, a mamy go ustawić na np. 24x24. Spróbuj tak: @sprite.rect = Rect.new(0,0,24,24)
Pamiętaj jednak, że żadne zmiany nie będą widoczne na ekranie, dopóki nie będziesz co ramkę odświeżał Sprite'a - @sprite.update. |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|