[VXAce] Skryptowanie dla Opornych - Wersja do druku
Ultima Forum
[VXAce] Skryptowanie dla Opornych - Wersja do druku

+- Ultima Forum (https://forum.ultimateam.pl)
+-- Dział: RPG Maker (/Forum-RPG-Maker)
+--- Dział: Wsparcie (/Forum-Wsparcie)
+--- Wątek: [VXAce] Skryptowanie dla Opornych (/Thread-VXAce-Skryptowanie-dla-Opornych)

Strony: 1 2


Skryptowanie dla Opornych - Yoroiookami - 26-07-14 17:11

No więc zacząłem nieco skryptować w VX Ace. Samą logikę skryptowania rozumiem, nie znam za to różnych odniesień i nazw. Nie wiem zbytnio jak mam zapisać to, co chcę zrobić.

Zacząłem sobie powolutku składać skrypt na wybór skilli.(Zdaję sobie sprawę, że przy mojej wiedzy = 0, może to trochę potrwać :kiti:)
No więc, zacząłem od utworzenia okienka:
[Obrazek: jkhcgk.jpg]
I chciałbym, żeby wyglądało to mniej więcej tak:
[Obrazek: 2un0l.jpg]

Zwyczajnie chcę się dowiedzieć, jak mogę umieszczać obrazki wewnątrz okienek, tak by je wypełnić. Podświetlenie nie konieczne.(Po prostu zrobię szarą wersję obrazków)
Nie jestem pewien, jak umieszczać okienka wewnątrz okienek, ale to już mniejszy problem. :ehe:


RE: Skryptowanie dla Opornych - Ayene - 26-07-14 18:00

A te ikonki umiejętności... to chcesz mieć osobne małe pliczki, czy jakiś zestaw tych ikon? I poruszałbyś się po nich wybierając ich indeksy. Chociaż... na początek może ogranicz się do wyświetlania obrazków razz:
Kod:
bitmap = Cache.picture("nazwa")
rect = Rect.new(0, 0, 32, 32)
contents.blt(0, 0, bitmap, rect, 255)
bitmap.dispose
poszczególne fragmenty to:
bitmap - zmienna pobiera dane o bitmapie, w tym przypadku wczytuje obrazek z folderu Pictures o nazwie "nazwa"

rect - zmienna pobiera dane o wymiarach bitmapy, ewentualnie o jej fragmencie, zgodnie ze wzorem:
Kod:
Rect.new(x, y, width, height)
Nam zależy, aby obrazek wyświetlał się w całości, więc rect zaczyna się od współrzędnych x = 0, y = 0, width i height - wpisałam 32 px, ale oczywiście szerokość może być inna, sam wpisz.

contents.blt - czyli polecenie rysowania wybranej bitmapy zgodnie ze wzorem:
Kod:
contents.blt(x, y, bitmap, rect, opacity)
X i Y to współrzędne na ekranie, gdzie ma się wyświetlić bitmapa, bitmap i rect to wcześniejsze zmienne, opacity to przezroczystość.

Oczywiście powyższą funkcję 'blt' można wywołać bez użycia zmiennych bitmap i rect, ale wówczas kod staje się mniej przejrzysty, bo całość musiałaby wyglądać:
Kod:
contents.blt(0, 0, Cache.picture("nazwa"), Rect.new(0, 0, 32, 32), 255)



RE: Skryptowanie dla Opornych - Yoroiookami - 26-07-14 18:03

Bardzo ci dziękuję, Ayene :klaszcze: :przytul: wszystko przejrzyście. Pobawię się tym za jakiś czas. W razie czego zaspamuję wątek. :kiti:

btw. Wolę osobne, małe pliczki, bo nawet w teorii brzmi to prościej, a problemu z grafiką u mnie nie ma. :ehe:
~~~~~~~~~~~~~~~~~~~~~~~~
Dobrze, pierwsze śfinie za płoty.
Na podstawie tutoriala zrobiłem to okienko, ale zamiast tekstu, próbowałem użyć kodu na obrazek :kiti: :
Kod:
class MyWindow < Window_Base
  
  def initialize
    super(0, 0, 544, 416)
    refresh
  end
  def refresh
    draw_text(x, y, 380, line_height * 1, "LOL!")
    draw_text(x, y, 380, line_height * 3, "LMAO!")
    draw_text(x, y, 380, line_height * 5, "ROFL!")
  end
end
Zamieniłem na:
Kod:
class MyWindow < Window_Base
  
  def initialize
    super(0, 0, 544, 416)
    refresh
  end
  def refresh
    bitmap = Cache.picture("picture")
    rect = Rect.new(0, 0, 32, 32)
    contents.blt(0, 0, bitmap, rect, 255)
    bitmap.dispose
  end
end
I jak na razie wszystko działa :klaszcze:
Teraz pobawię się umieszczaniem okienek w okienkach. :kiti:


RE: Skryptowanie dla Opornych - Yoroiookami - 26-07-14 20:02

Kod:
class MyWindow < Window_Base
  
  def initialize
    super(0, 0, 544, 416)
    okno
  end
  def okno
    super(20, 20, 32, 32)
  end
end
Miałem nadzieję, że można z tego zrobić taką 'ciuchcię', że każde narysowane okienko po narysowaniu tworzy następne. Niestety błąd mi wywala już po "def okno". :kiti:
Podejrzewam, że zrobiłem coś niesamowicie głupiego. Myślałem, że def to zmienna i mogę nazwać ją jak chcę? :co:
Co robiem źle? :confuse:


RE: Skryptowanie dla Opornych - Ayene - 26-07-14 21:29

Nie możesz wywołać okienek w okienkach :ehe: Te Twoje wewnętrzne rameczki na skille to nie osobne klasy tylko już zabawa w rysowanie właśnie bitmap, ale wewnątrz zawartość jednego okna. Te "okienka" możesz osiągnąć na kilka sposobów. Przyjmijmy, że pierwszym z nich jest po prostu zrobienie obrazka pustego skilla i wywołanie go w ten sam sposób, co powyżej. Nic nie stoi bowiem na przeszkodzie, żeby później w jego miejsce (ściślej na nim) pojawiała się bitmapa skilla.
Albo możesz zrobić sobie nową definicję, np.
Kod:
def draw_empty_skill(x, y, w, h)    
    contents.fill_rect(x, y, w, h, Color.new(0, 0, 0))
    contents.fill_rect(x+1, y+1, w-2, h-2, Color.new(255, 255, 255))
    color1 = Color.new(50, 76, 127)
    color2 = Color.new(0, 11, 62)
    contents.fill_rect(x+2, y+2, w-4, h-4, Color.new(0, 0, 0))
    contents.gradient_fill_rect(x+3, y+3, w-6, h-6, color1, color2, true)    
  end
i wywołać ją sobie w definicji "okno", za pomocą kodu:
Kod:
draw_empty_skill(0, 0, 50, 50)
gdzie 0, 0 to współrzędna, a 50, 50 to szerokość i długość takiego kwadracika.

I tę definicję możesz sobie wywołać w "okno", np. 4 razy, bo tyle masz okienek w rzędzie, np.
Kod:
draw_empty_skill(0, 0, 50, 50)
draw_empty_skill(100, 0, 50, 50)
draw_empty_skill(200, 0, 50, 50)
draw_empty_skill(300, 0, 50, 50)



RE: Skryptowanie dla Opornych - Yoroiookami - 26-07-14 21:48

Czyli, że niepotrzebnie sobie komplikuję. :lol2: Nie wpadłem nawet na to, żeby po prostu zrobić taki obrazek z ramką. :kable:
Tak czy inaczej, spróbuję tym sposobem, który podałaś. :klaszcze:

Spodziewaj się denerwujących, noobowatych update'ów. :kiti: <3


RE: Skryptowanie dla Opornych - Yoroiookami - 27-07-14 17:23

Kod:
class MyWindow < Window_Base
  
  def initialize
    super(0, 0, 544, 416)
    okno
  end
  
  def okno
    draw_empty_skill(100, 0, 50, 50)
    draw_empty_skill(200, 0, 50, 50)
    draw_empty_skill(300, 0, 50, 50)
  end
  
  def draw_empty_skill(x, y, w, h)    
    contents.fill_rect(x, y, w, h, Color.new(0, 0, 0))
    contents.fill_rect(x+1, y+1, w-2, h-2, Color.new(255, 255, 255))
    color1 = Color.new(50, 76, 127)
    color2 = Color.new(0, 11, 62)
    contents.fill_rect(x+2, y+2, w-4, h-4, Color.new(0, 0, 0))
    contents.gradient_fill_rect(x+3, y+3, w-6, h-6, color1, color2, true)    
  end
  
end
Jak na razie działa :klaszcze: i prezentuje się całkiem ładnie.
Hmm...mógłbym chyba po prostu zapisać to tak:
Kod:
class MyWindow < Window_Base
  
  def initialize
    super(0, 0, 544, 416)
     draw_empty_skill(100, 0, 50, 50)
     draw_empty_skill(200, 0, 50, 50)
     draw_empty_skill(300, 0, 50, 50)
  end
  
  def draw_empty_skill(x, y, w, h)    
    contents.fill_rect(x, y, w, h, Color.new(0, 0, 0))
    contents.fill_rect(x+1, y+1, w-2, h-2, Color.new(255, 255, 255))
    color1 = Color.new(50, 76, 127)
    color2 = Color.new(0, 11, 62)
    contents.fill_rect(x+2, y+2, w-4, h-4, Color.new(0, 0, 0))
    contents.gradient_fill_rect(x+3, y+3, w-6, h-6, color1, color2, true)    
  end
  
end
Co nie? :co:
Spróbuję teraz ładnie ułożyć te kwadraciki. mrgreen

Umm...masz może jakiś pomysł jak się...między nimi...poruszać? :ehe:


RE: Skryptowanie dla Opornych - Ayene - 27-07-14 17:52

Zależy, co chcesz osiągnąć poprzez poruszanie się między nimi...


RE: Skryptowanie dla Opornych - Yoroiookami - 27-07-14 17:57

Że jeżeli najadę na okienko, jego obrazek się zmieni na inny. :kiti: Tak, żebym mógł zmienić szary obrazek na kolorowy.


RE: Skryptowanie dla Opornych - Ayene - 27-07-14 18:28

Heh, to nie takie proste :ehe: Zwłaszcza, że pewnie później oprócz zmiany obrazka jeszcze trzeba będzie wyświetlić opis, itd.

Można to zrobić na co najmniej dwa sposoby. Przerabiając Twoje okienko na klasę Window_Selectable (w lepszym wypadku na Window_HorzCommand), odpowiednio modyfikując polecenia. Albo pokombinować bezpośrednio w Scenie, gdzie za pomocą update i input zmieniać sposób wyświetlania Twoich obrazków - zmieniać ich opacity, itd. No nic... Spróbuję nad tym posiedzieć, ale nie wiem, czy dzisiaj, bo zaraz muszę zmykać.