UltimaForum

Wprowadzenie do RGSS/RGSS2 - Okno w Ruby

pw115 - Sob 20 Lut, 2010 14:58
Temat postu: Okno w Ruby
Witam chciałbym wam dziś pokazać jak stworzyć własne okno w RGSS
a więc będą nam potrzebne:
- Podstawy j. angielskiego
- RMXP lub RMVX
- Umiejętność obsługiwania klawiatury
- Chęci ;-)
Zaczynamy


Wchodzimy w edytor skryptów (F11) i po lewej stronie widzimy okienko ze skryptami.
Odszukujemy tam klasę Window_Base i POD nią klikamy wstaw (ewentualnie wyszukujemy Main i wstawiamy pusty slot nad nią).
Wyświetla nam się Całe Puste okno na pisanie.


Pisać zaczynamy od nazwania naszej klasy:
Kod:
class Window_okno < Window Base


Dlaczego < Window_Base ?
Bo nasze okienko będzie korzystać z metod zdefiniowanych w tej klasie

Teraz pod definicją piszemy:
Kod:
def initialize(x,y,width,height)


x,y,width,height,
x- położenie okna na osi x
y - położenie okna na osi y
width - szerokość okna
height - wysokość okna

Całość powinna wyglądać tak:
Kod:
class Window_okno < Window_Base
  def initialize(160,200,220,240)

  end
end


Zapomniałem napisać. Każdy klasa (class) i każda definicja (def)
MUSI mieć swój end

Następnym krokiem jest stworzenie nadklasy (super)
W wypadku klasy Window_Base niezbędnymi argumentami są:
- pozycja x i y
- szerokość i wysokość okna.
A więc:
Kod:
class Okienko < Window_Base
  def initialize(160,200,220,240)
  super(x,y,width,height)

  end
end


Następnym krokiem jest wywołanie bitmapy (żeby móc zamieszczać teksty i obrazki).
Robimy to dzięki:
Kod:
self.contents = Bitmap.new(width - 32, height - 32)


self oznacza, że następująca metoda odnosi się do obiektu, na którym aktualnie pracujemy (czyli naszego okna).
contents oznacza zawartość okna.
Bitmap.new(width-32, height-32) tworzy obiekt klasy Bitmap o wielkości okna pomniejszonego w każdej z osi o 32 piksele.
Jest to spowodowane tym, że 16 pikseli z każdej strony okna jest przeznaczonych na ramkę i nie może być na nich wyświetlane nic innego.

Mamy już okno mamy ogólną zawartość. Co teraz ?
Zdefiniujmy Czcionkę, rozmiar i przeźroczystość.
Piszemy pod self.contents......
Kod:
self.contents.font.name = ("Tahoma")
self.contents.font.size = 18
self.back_opacity = 160


self.back_opacity = 160 ustawia parametr opacity (przezroczystość) tła okna na 160 (przyjmowane wartości - 0 do 255).
Oprócz takiej metody możemy jeszcze zastosować metodę self.opacity, która wpływa nie tylko na tło, ale również na ramkę okna i jego zawartość.
Jeśli chcielibyśmy, aby nasze okno miało inną grafikę (windowskin) to możemy to zrobić wpisując poniższy kod:
~ dla RMXP:
Kod:
self.windowskin = RPG::Cache.windowskin("nazwa_pliku.png")

~ dla RMVX:
Kod:
self.windowskin = Cache.system("nazwa_pliku.png")

Nasze okno zostawimy ze standardową grafiką ;)
Proszę oto kod naszej obecnej pracy

Kod:
class Window_okno < Window_Base
  def initialize (x = 160, y = 120, width = 320, height = 240)
    super (x, y, width, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = "Tahoma"
    self.contents.font.size = 18
    self.back_opacity = 160
    refresh
  end
end


Rozpoczynamy definicję metody refresh. Co w niej zawrzemy?
Zwyczajowo najpierw czyścimy wszystko, co zostało napisane/narysowane poprzednio. Jest to konieczne w przypadku zmiennej zawartości okna, aby zmieniające się znaki nie nakładały się na siebie.
Dla zawartości stałej można ten fragment pominąć, ale trzeba go znać.

Kod:
def refresh
    self.contents.clear


Nadszedł czas na wstawienie tekstu
Kod:
 self.contents.draw_text(0, 0, 288, 32, "Tu wpiszcie tekst", 1)

Powoduje wyświetlenie tekstu ("tekst") w miejscu (0, 0), który wyrównany będzie do środka (0 - do lewej; 1 - do środka; 2 - do prawej).
Na tekst przeznaczone jest pole o szerokości 288 pikseli i wysokości 32 pikseli.
Jeśli tekst będzie większy niż zadane pole - zostanie zmniejszony, aby się do niego dopasować.

A teraz nowa przydatna opcja:
Jeśli chcemy wyświetlić wartość zmiennej (fajnie nie?) najpierw trzeba ją przekonwertować do ciągów znaków (string)
$game_variables[5].to_s - wyświetli wartość zmiennej numer 5.

Koniec tworzenia okna !
oto cały kod
Kod:
class Window_okno < Window_Base
  def initialize(x = 160, y = 120, width = 320, height = 240)
    super(x, y, width, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = "Tahoma"
    self.contents.font.size = 18
    self.back_opacity = 160
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.draw_text(0, 0, 288, 32, "Losowy tekst służący do zapełnienia okna", 1)
  end
end



Teraz musimy spowodować wyświetlanie okna na mapie.
W tym celu wchodzimy do Scene_Map i odszukujemy linijki.
Kod:
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new

POD tym piszemy:
Kod:
@okienko = Window_okno.new

Okienko wyświetla się na mapie. Jednak nie znika po wyjściu do Menu.
Nie chcemy tak!

Schodzimy trochę niżej do linijki 36?
Widzimy:
Kod:
@spriteset.dispose
@message_window.dispose

Piszemy:
Kod:
@okienko.dispose

Teraz okno schodzi posłusznie z mapy ;]

Jeśli zawartość okna zmienia się co jakiś czas
to musimy zejść niżej do definicję (def) update i tam znaleźć (73 linia)
Kod:
@spriteset.update
@message_window.update

piszemy:
Kod:
@okienko.refresh

KONIEC


EDIT
Jeśli chcemy żeby wybrany tekst zależał od zmiennej to piszemy:
Kod:
if $game_variables[ID zmiennej] == N*
  akcja1
else
  akcja2
end

N - jakiś numer

Teraz przyjrzyjmy się tej linijce:
Kod:
if $game_variables[ID] == N

Przyjmujemy, że komenda if w Ruby znaczy "jeżeli, kiedy"
$game_variables hmm... wygląda na zmienną globalną co ? ;-)
teraz bardzo ważne jest == co to znaczy?
to znaczy że zmienna [Id] jest RÓWNA == N czyli numerkowi
Zamiast == można wpisać:
!= różna od
<= mniejsza lub równa
>= większa lub równa
< mniejsza
> większa

Teraz po całym warunku wstawiamy naszą wybraną akcję.
Jeśli chcemy tak, żeby w przypadku, gdy warunek nie jest spełniony była inna akcja, wówczas piszemy:
Kod:
else

i pod tym drugą akcję.
Całość kończymy komendą end

Teraz to samo, ale z przełącznikami:
Kod:
if $game_switches[0001] == true (czyli ON)
  akcja1
else
  akcja2
end

Enjoy !


Mam nadzieję, że komuś pomogłem.
Proszę o oceny 0/6

PS Jeśli poradnik się spodoba to napiszę następny o CMS'sie

PS2 Poradnik został w niewielkim stopniu zedytowany, tak aby pasował zarówno do RMXP jak i do RMVX - Ayene.

Asantos - Wto 09 Mar, 2010 11:05

No dam ci czwóreczkę za tę pracę. Mógłbyś dodać kilka rzeczy, a mianowicie:
1. Kiedy okno się wyświetla strasznie "muli" się gra - jak otworzyć okno aby bohater stał nieruchomo.
2. Jak umieszczać tekst w następnej linijce lub obok (rozpracowałem to ale nie każdemu tak szybko idzie).
3. Dokładnie wyrównanie do lewej prawej itp. bo u mnie to średnio działa - nie rozpracowałem.
4. Wywoływanie okna przyciskiem.

Melvin - Wto 09 Mar, 2010 11:07

AAAA!!!!!!! Time!!!! Kozak jesteś!!!
Przyda się. :mrgreen:

5/6

Dałbym 6/6 ale nie napisałeś co zrobić, aby zniknęło.
(Wywoływanie przyciskiem)

[ Dodano: Wto 09 Mar, 2010 12:12 ]
Dobra wiem jak podporządkować to danemu klawiszowi.(Np. F5)
W Scene_Map
Cytat:
if Input.trigger?(Input::F5)
$massage_window = Window_Okno.new
end


A jak zrobić, żeby je zamknąć i żeby jak już się to otworzy, to można otwierać ze 100 razy i się te okienka na siebie nakładają...?

cNN - Wto 09 Mar, 2010 15:48

O.o wielkie thx. Szukałem czegoś takiego ;-) Leczy mógłbyś trochę lepiej wytłumaczyć ;p i dodać screeny :->

pzdr.

pw115 - Wto 09 Mar, 2010 15:59

Trudno mi to lepiej wytłumaczyć i po co screeny ? całe kody są podane
w następnych tutorialach pokaże jak zrobić CMS'a

Ayene - Wto 09 Mar, 2010 16:27

Asantos, odpowiedź na pkt 3:
Tekst w oknie wyświetla się za pomocą kodu:
Kod:
self.contents.draw_text (x, y, width, height, "text", align)

gdzie:
x - położenie tekstu na osi X
y - położenie tekstu na osi Y
width - szerokość tekstu (jeżeli wartość będzie za mała, to tekst będzie ucięty)
height - wysokość tekstu
"text" - czyli sama zawartość tekstowa
align - położenie, które domyślnie wynosi 0 (dlatego czasami ten parametr jest pomijany):
- 0 - wyrównanie do lewej
- 1 - wyrównanie do środka
- 2 - wyrównanie do prawej

Melvin - Wto 09 Mar, 2010 16:43

A jak to zrobić?:
Cytat:
1. Kiedy okno się wyświetla strasznie "muli" się gra - jak otworzyć okno aby bohater stał nieruchomo.

Cytat:
4. Wywoływanie okna przyciskiem.


I jeszcze jak się robi, żeby to okno było na 640 x 480?

Ayene - Wto 09 Mar, 2010 17:58

1. Nie rozumiem pytania.

4. Należy umieścić w definicji update (np. w Scene_Map):
Kod:
if Input.trigger?(Input::F5)
 @okienko = Window_okno.new
end

Jednak należy pamiętać, aby umieścić kod:
Kod:
@okienko.dispose

W RMXP to sam koniec definicji 'main' (w Scene_Map)
w RMVX to już definicja 'Terminate' (również w Scene_Map)

Melvin, najwyraźniej w ogóle nie czytałeś tutoriala. Time napisał przecież, który fragment skryptu odpowiada za wymiary okna.

Melvin - Wto 09 Mar, 2010 18:06

Cytat:
Melvin, najwyraźniej w ogóle nie czytałeś tutoriala. Time napisał przecież, który fragment skryptu odpowiada za wymiary okna.


Tak ale mi wychodziło takie okienko po lewej stronie :mrgreen:

A co do pytania 1:
Czy do się zrobić okienko tak jak np. menu? Tzn, że bohater stoi w miejscu i nie można nim poruszać, gdy jest wyświetlone okienko...

[ Dodano: Wto 09 Mar, 2010 18:10 ]
Cytat:
if Input.trigger?(Input::F5)
@okienko = Window_okno.new
end

Ok.
A jak wyłączyć?
Coś nie kapuję...

Ayene - Sro 10 Mar, 2010 07:57

Żeby okienko można było włączać i wyłączać za pomocą tego samego przycisku, można:
umieścić w definicji Main/initialize/start (zależy od tego, co znajduje się w klasie):
Kod:
    @okienko = Window_Help.new
    @okienko.visible = false

Co spowoduje, że okienko wgra się od razu po przejściu np. na mapę, ale nie będzie widoczne.
A następnie w definicji 'Update' wstawić:
Kod:
    if Input.trigger?(Input::F5)
      if @okienko.visible == false
        @okienko.visible = true
      else
        @okienko.visible = false
      end     
    end


Co do zatrzymania bohatera. Należałoby skorzystać już nie z okna, tylko z klasy Scene.

Squall - Pon 15 Mar, 2010 19:21

Dzięki! To jest świetne, a że dla mnie skrypty to prawie czarna magia...Dlaczego prawie? Bo potrafię tylko kilka rzeczy edytować...ale sam bym takiego czegoś nigdy nie zrobił :mrgreen: Time, Dzięki jeszcze raz, mi się naprawdę przydało :-D Więcej! Prosimy :-P

[ Dodano: Pon 15 Mar, 2010 23:31 ]
Cytat:
Jeśli chcielibyśmy, aby nasze okno miało inną grafikę (windowskin) to możemy to zrobić wpisując poniższy kod:
~ dla RMXP:
Kod:
self.windowskin = RPG::Cache.windowskin("nazwa_pliku.png")

~ dla RMVX:
Kod:
self.windowskin = Cache.system("nazwa_pliku.png")

Nasze okno zostawimy ze standardową grafiką ;)
Proszę oto kod naszej obecnej pracy


A da się zrobić by zamiast windowskin można było dać jakiś obrazek na tło okna?

Ayene - Czw 18 Mar, 2010 21:10

W definicji initialize okienka wpisz na końcu:
Kod:
@back_sprite = Sprite.new
@back_sprite.bitmap = Cache.picture("Nazwa")


Ewentualnie jeśli będziesz chciał się pozbyć ramki to przed tym wpisz:
Kod:
self.opacity = 0


Powinno zadziałać :-P

Squall - Sob 20 Mar, 2010 10:23

Ok dzięki Ayene to działa :-P
Ale mam jeszcze jedno pytanie...da się zrobić z tym obrazkiem to samo co z ramką?
Chodzi mi o (Przezroczystość) : self.opacity = 0 Tylko że w obrazku...

Ayene - Sob 20 Mar, 2010 15:07

skoro przyporządkowywałeś "sprite" zmiennej @back_sprite, to możesz zmienić przezroczystość za pomocą kodu:
Kod:
@back_sprite.opacity = 0

Musi on się znaleźć po deklaracji zmiennej, czyli po:
Kod:
@back_sprite = Sprite.new

W przeciwnym wypadku wystąpi błąd.

Squall - Sob 20 Mar, 2010 15:44

Dzięki Ayene, przydało się w 100% :-P
Czeliosss - Pon 05 Kwi, 2010 21:53

Mam pytanie. Jak zrobić, że po lewej stronie jest jakiś spis (wybór), a jak się naciśnie spację to otwiera się kolejne okno.
Z oknem wiem jak, ale nie wiem z tym spisem.
Pzdr.

Ayene - Wto 06 Kwi, 2010 12:16

Przykładowo w Scene_Map za dowolną zmienną np. @command podstaw:
Kod:
@command = Window_Command.new(160, ["wybór1", "wybór2", "wybór3"])

oczywiście pamiętaj o dispose i update. Trzeba by było zdefiniować, co wybór komendy powoduje, należałoby również aktywować i dezaktywować odpowiednie okna...
Ciężko mi to wytłumaczyć, lepiej będzie jak złożysz odpowiednie zamówienie. Postaram się to zrobić, a Ty podejrzysz o co w tym chodzi.

Sabikku - Wto 06 Kwi, 2010 15:45

Zależy gdzie okienko ma się pojawić. Jeśli na mapie gry, będziesz musiał zrobić to w Scene_Map.
Samo wywołanie (utworzenie) okienka wygląda tak:
Kod:
okienko = Window_Command(szerokosc, tablica_stringów)

Szerokość to liczba, np. 100. Tablica wygląda tak: ['Wybór 1.', 'Wybór 2.', 'Wybór 3']
Window_Command ma dwie zmienne, których nie ma normalne okienko, a mianowicie: index (liczba aktualnie wybranej komendy) i active (przyzwolenie poruszania kursorem wyboru).

Najprościej (i najbezpieczniej) zapisać to w ten sposób:
Kod:

class Scene_Map
  alias o_main main
  def main
    komenda_1 = "Zrób coś 1."
    komenda_2 = "Zrób coś 2."
    komenda_3 = "Zrób coś 3."
    @twoje_okienko = Window_Command.new(192, [komenda_1, komenda_2, komenda_3])
    @twoje_okienko.x = 50
    @twoje_okienko.y = 100
    @twoje_okienko.back_opacity = 150
    o_main
    @twoje_okienko.dispose
  end
  alias o_update update
  def update
    @twoje_okienko.update
    if Input.trigger?(Input::C) and @twoje_okienko.active
      case @twoje_okienko.index
      when 0:
        # Pierwsza opcja.
       
      when 1:
        # Druga opcja.
       
      when 2:
        # Trzecia opcja.
       
      end
    end
    o_update
  end
end

Żeby potem zmienić widoczność okienka (schować), wpisujesz:
Kod:
@twoje_okienko.visible = false

A jeśli nie chcesz, żeby można było poruszać kursorem, wpisujesz:
Kod:
@twoje_okienko.active = false

Komend możesz dodawać dowolnie, ale musisz je zapisywać w taki sam sposób.

Jakby coś było nadal niejasne, pisz :).

Czeliosss - Sob 10 Kwi, 2010 19:25

Prześlę Ci na pw Sabikku jak to mam i wkleisz mi ten fragment z wyborem, bo nie wiem, gdzie to dać.
ziomalek - Pon 03 Maj, 2010 08:53

a jak zrobić żeby nie wstawiać nic do scene_map???
Fixed - Pon 03 Maj, 2010 09:50

Użyć "aliasu", albo przekopiować modyfikowany kawałek skryptu do Twojego...
ziomalek - Wto 04 Maj, 2010 13:45

dzięki, a mógłby ktoś dać przykład małego obrazka z napisem "LOL" w prawym górnym rogu i aby nie trzeba było nic wstawiac do scene map???
Sabikku - Wto 04 Maj, 2010 15:32

Niestety, nie zrobisz wyświetlania czegoś podczas gry na mapie nie modyfikując zarazem lub nadpisując Scene_Map.

Da się też zrobić o wiele szybciej, lepiej, łatwiej. W zdarzeniu - odsyłając do tutków na twierdzy ;-) .

ziomalek - Wto 04 Maj, 2010 19:09

a jak zrobić aby automatycznie wstawialo coś do scene_map

P.S.
Każdy skrypt jest tak zrobiony...(chyba)

Sabikku - Wto 04 Maj, 2010 19:28

Można to zaliasowac. I pokaż, o jaki skrypt ci chodzi, bo i tak każdy działa na tej zasadzie co napisałem.

Kod:
alias nowa_nazwa stara_nazwa
def stara_nazwa
  kod przed funkcją
  nowa_nazwa
  kod po funkcji
end


W ten sposób zaliasuj w Scene_Map main, dodając przed wywołaniem utworzenie obrazka, a po wywołaniu jego usuwanie, + alias na update odświeżający obrazek przed wywołaniem normalnego update.
Obrazek można stworzyć na dwa sposoby, jako niewidzialne okienko wypełnione obrazkiem (przed aliasowaniem przydałoby się zdefiniować podklasę klasy Window_Base na wzór Window_Gold, Window_Steps itp), lub zwykły obiekt klasy Sprite (niepotrzebna podklasa właściwie).

Namawiam dalej. Zrób to na najnormalniejszych zdarzeniach :).

ziomalek - Wto 04 Maj, 2010 19:36

dzięki :-)

P.S.
Możesz dokładnie (i pokolei) wszystko opisać???

P.S.2
Jestem w tym zielony

Flanagan - Sob 22 Maj, 2010 12:30

wyskakuje mi błąd a chcem użyć zmiennej błąd jest następującej treści:
?????'Window_okno'? 14 ??? NoMethodError?????
undefined method ' [] ' for nil:NilClass

A skrypt wygląda tak:
class Window_okno < Window_Base
def initialize(x = 160, y = 120, width = 320, height = 240)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, 288, 32, "$game_variables[1]", 1)
end
if $game_variables[0001] == 10*
self.contents.draw_text (x, y, width, height, "Dobry", 1)
else
self.contents.draw_text (x, y, width, height, "Neutralny", 1)
end
end

Prosze o pomoc!!!! bo chcem napisać ten skrypt do mojego projektu ;-(

Sabikku - Sob 22 Maj, 2010 12:58

Wystarczy, że porobisz sobie wcięcia:
Kod:
class Window_okno < Window_Base
  def initialize(x = 160, y = 120, width = 320, height = 240)
    super(x, y, width, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = "Tahoma"
    self.contents.font.size = 18
    self.back_opacity = 160
    refresh
  end
 
  def refresh
    self.contents.clear
    self.contents.draw_text(0, 0, 288, 32, "$game_variables[1]", 1)
  end
  if $game_variables[0001] == 10*
    self.contents.draw_text (x, y, width, height, "Dobry", 1)
  else
    self.contents.draw_text (x, y, width, height, "Neutralny", 1)
  end
end

Jak widać, rysowanie napisu 'dobry' / 'neutralny' wyszło ci poza metodę refresh. Przesuń więc cały warunek wyżej, w ten sposób:
Kod:
class Window_okno < Window_Base
  def initialize(x = 160, y = 120, width = 320, height = 240)
    super(x, y, width, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = "Tahoma"
    self.contents.font.size = 18
    self.back_opacity = 160
    refresh
  end
 
  def refresh
    self.contents.clear
    self.contents.draw_text(0, 0, 288, 32, "$game_variables[1]", 1)
    if $game_variables[0001] == 10*
      self.contents.draw_text (x, y, width, height, "Dobry", 1)
    else
      self.contents.draw_text (x, y, width, height, "Neutralny", 1)
    end
  end
end

Flanagan - Sob 22 Maj, 2010 13:09

A jak zrobić by zależnie od zmiennej wyświetlał się text co trzeba wpisać??
pw115 - Sob 22 Maj, 2010 13:26

Kod:

if $game_variables[0001] == 10
   self.contents.draw_text (x, y, width, height, "Dobry", 1)
end


Ten warunek znaczy że jeśli zmienna 1 wynosi 10 to się pokaże tekst

Flanagan - Sob 22 Maj, 2010 14:39

Czy trzeba coś zmienić w main?? Bo wyskakuje mi następujący błąd:
????? 'Main' ? 20 ??? NoMethodError ??????
undefined method 'main' for #<Window_okno:0x46fd170>

Prosze o pomoc i jeszcze jedno jak ma wyglądać linijka:
self.contents.draw_text(0, 0, 288, 32, "$game_variables[0001]", 1)
bo mi tekst nachodzi na tekst prosze także tu o pomoc i gdy skończe skrypt umieszcze na tym forum :-P

pw115 - Sob 22 Maj, 2010 14:56

1. Musiałeś coś źle napisałeś w klasie def main w swoim oknie.

2.Żeby tekst nie nachodził musisz go odpowiednio ustawić (x i y)

Flanagan - Sob 22 Maj, 2010 15:08

Jeszcze jedno pytanie czemu wyświetla mi się to:
$game_variables[0001]- Kod do wyświetlania zmiennej
linijka wygląda tak:
self.contents.draw_text(50, 50, 278, 32, "$game_variables[0001]", 1)

Sabikku - Sob 22 Maj, 2010 17:39

Nie nie, $game_variables[1] to zmienna typu liczbowego. Ty potrzebujesz łańcucha znaków, napisu, czyli stringa. Żeby to przekonwertować używa się dopisku .to_s :) - czyli 'to string', tj. 'na napis'.
Kod:
self.contents.draw_text(50, 50, 278, 32, $game_variables[0001].to_s, 1)

erienus - Wto 25 Maj, 2010 20:49

time mógłbyś dodać jak zrobić okno wywoływane przyciskiem ;p
pw115 - Wto 25 Maj, 2010 22:01

Poczytaj posty Ayene na pierwszej stronie; wyjaśniła tam wszystko
radek02 - Nie 20 Cze, 2010 10:16

i tak dla mnie to ciemna magia . Mój pierwszy skrypt :
Spoiler:

Kod:
#Skrypt by Radek02
#Zastosowanie : żadne
#Używając go , umieśc mnie w credtisach
:lol2:


erienus - Sob 03 Lip, 2010 17:15

radek ruby moze poza htmlem jest najprostszym jezykiem programowania ;d co nie zmienia faktu, ze trzeba pracy by sie tego nauczyc
cj2 - Sro 07 Lip, 2010 19:27

radek02 taki skrypt to ja też już napisałem
sitax5 - Sro 21 Lip, 2010 10:52

Melvin napisał/a:
AAAA!!!!!!! Time!!!! Kozak jesteś!!!
Przyda się. :mrgreen:

5/6

Dałbym 6/6 ale nie napisałeś co zrobić, aby zniknęło.
(Wywoływanie przyciskiem)

[ Dodano: Wto 09 Mar, 2010 12:12 ]
Dobra wiem jak podporządkować to danemu klawiszowi.(Np. F5)
W Scene_Map
Cytat:
if Input.trigger?(Input::F5)
$massage_window = Window_Okno.new
end

A pod którą linijką wkleić ten kod?
A jak zrobić, żeby je zamknąć i żeby jak już się to otworzy, to można otwierać ze 100 razy i się te okienka na siebie nakładają...?

shiwt - Sro 21 Lip, 2010 21:04

Zauważyłem to już wcześniej i bardzo mnie irytuje to, że zgarniasz nagrody, pochwały i ludzie piszą, że to dzięki tobie stworzyli swoje pierwsze okienko w rgss, bo każdy myśli że to ty napisałeś ten tutorial i jesteś fajny, a prawda jest taka, że ten tutorial napisał arev 3 lata temu >>>KLICK<<<. Ty po prostu skopiowałeś, wkleiłeś, troszeczkę prze-edytowałeś. Mogłeś napisać że Arev napisał ten tutorial i jemu dziękujcie.
Tak samo wszystko co jest w temacie "Przydatne zmienne globalne/komendy "draw"" - przekopiowałeś słowo w słowo z tutoriala, który napisał Dan 1,5 roku temu nawet o nim nie wspominając. >>>KLICK<<< - gdzieś w połowie to wszystko opisał.
To na tyle :)))

radek02 - Wto 03 Sie, 2010 19:08

Time , wtopa .... to gratuluję Gatozowi za wyjawienie prawdy . Na forum ostatnio ogólnie zaczyna byc dziwnie ...
Fushigi - Pon 20 Wrz, 2010 15:46

Mam problem, robię tak jak trzeba i ZONK! Wyskakuje syntaxerror line: 2...
Sabikku - Pon 20 Wrz, 2010 15:50

Pokaż, co masz w pierwszej i drugiej linijce skryptu.
Fushigi - Pon 20 Wrz, 2010 15:54

Kod:
class Window_okno < Window Base
  def initialize(50,50,220,240)

Sabikku - Pon 20 Wrz, 2010 16:01

Identyfikator klasy nie może zawierać spacji ani znaków specjalnych, właśnie tu się pomyliłeś. Zamień:
Kod:
Window Base

na poprawne:
Kod:
Window_Base

Pamiętaj, w programowaniu każda literówka będzie powodować błędy :).

Fushigi - Pon 20 Wrz, 2010 16:55

Dalej jest to samo... ;/
CreeperCrisis - Pon 20 Wrz, 2010 17:02

Hejka nie zawsze gdy jest problem w linijce nie trzeba jej poprawiać może coś się stało z dalszą częścią skryptu. Pokaż nam cały skrypt. ^^
Fushigi - Pon 20 Wrz, 2010 17:03

Zrobiłem (chyba) wszystko jak w tym poradniku jest

Kod:
class Window_okno < Window_Base
  def initialize(0,0,150,150)
  super(x,y,width,height)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.name = ("Tahoma")
  self.contents.font.size = 18
  self.back_opacity = 160
  self.windowskin = RPG::Cache.windowskin("PaperFantasy4.png")
  refresh
  end
end

def refresh
    self.contents.clear
    self.contents.draw_text(1, 0, 288, 32, "Test test test", 1)

Sabikku - Pon 20 Wrz, 2010 17:27

Cytat:
Zrobiłem (chyba) wszystko jak w tym poradniku jest

Kod:
class Window_okno < Window_Base
  def initialize(0,0,150,150)
  super(x,y,width,height)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.name = ("Tahoma")
  self.contents.font.size = 18
  self.back_opacity = 160
  self.windowskin = RPG::Cache.windowskin("PaperFantasy4.png")
  refresh
  end
end

def refresh
    self.contents.clear
    self.contents.draw_text(1, 0, 288, 32, "Test test test", 1)

\/

Kod:
class Window_okno < Window_Base
  def initialize(x = 160, y = 120, width = 320, height = 240)
    super(x, y, width, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = "Tahoma"
    self.contents.font.size = 18
    self.back_opacity = 160
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.draw_text(0, 0, 288, 32, "Losowy tekst służący do zapełnienia okna", 1)
  end
end

Widzisz różnicę? Przecież masz jak krowie na rowie, gdzie brakuje a gdzie nadmiar endów. :)

David - Wto 28 Wrz, 2010 14:45
Temat postu: Błąd
songoxyz napisał/a:
Czy trzeba coś zmienić w main?? Bo wyskakuje mi następujący błąd:
????? 'Main' ? 20 ??? NoMethodError ??????
undefined method 'main' for #<Window_okno:0x46fd170>

Mi to samo. Nie wiem co z tym zrobić:
Spoiler:

Kod:
#==============================================================================
# &#9632; Main
#------------------------------------------------------------------------------
# &#12288;&#21508;&#12463;&#12521;&#12473;&#12398;&#23450;&#32681;&#12364;&#32066;&#12431;&#12387;&#12383;&#24460;&#12289;&#12371;&#12371;&#12363;&#12425;&#23455;&#38555;&#12398;&#20966;&#29702;&#12364;&#22987;&#12414;&#12426;&#12414;&#12377;&#12290;
#==============================================================================

begin

  # This variable determines the default font type
  $defaultfonttype = "Times New Roman"
  # This variable determines the default font size
  $defaultfontsize = 26

  # &#12488;&#12521;&#12531;&#12472;&#12471;&#12519;&#12531;&#28310;&#20633;
  Graphics.freeze
 
  $data_actors        = load_data("Data/Actors.rxdata")
  $data_classes       = load_data("Data/Classes.rxdata")
  $data_skills        = load_data("Data/Skills.rxdata")
  $data_items         = load_data("Data/Items.rxdata")
  $data_weapons       = load_data("Data/Weapons.rxdata")
  $data_armors        = load_data("Data/Armors.rxdata")
  $data_enemies       = load_data("Data/Enemies.rxdata")
  $data_troops        = load_data("Data/Troops.rxdata")
  $data_states        = load_data("Data/States.rxdata")
  $data_animations    = load_data("Data/Animations.rxdata")
  $data_tilesets      = load_data("Data/Tilesets.rxdata")
  $data_common_events = load_data("Data/CommonEvents.rxdata")
  $data_system        = load_data("Data/System.rxdata")
  Audio.bgm_stop
  Graphics.frame_count = 0
  x = 1 #x pozycji na mapie intra, pamiętaj, że liczony od zera
  y = 1 # jak wyżej, tylko że to y pozycji
  id = 004 # ID mapy (pokazywany w pasku tytułowym właściwości mapki)
  $game_temp          = Game_Temp.new
  $game_system        = Game_System.new
  $game_switches      = Game_Switches.new
  $game_variables     = Game_Variables.new
  $game_self_switches = Game_SelfSwitches.new
  $game_screen        = Game_Screen.new
  $game_actors        = Game_Actors.new
  $game_party         = Game_Party.new
  $game_troop         = Game_Troop.new
  $game_map           = Game_Map.new
  $game_player        = Game_Player.new
  $game_party.setup_starting_members
  $game_map.setup(id)
  $game_player.moveto(x, y) # posuwamy gracza;)
  $game_player.refresh
  $game_map.autoplay
  $game_map.update
  $scene = Scene_Map.new #pokazujemy mapkę
  # $scene &#12364;&#26377;&#21177;&#12394;&#38480;&#12426; main &#12513;&#12477;&#12483;&#12489;&#12434;&#21628;&#12403;&#20986;&#12377;
  while $scene != nil
    $scene.main
  end
  # &#12501;&#12455;&#12540;&#12489;&#12450;&#12454;&#12488;
  Graphics.transition(20)
rescue Errno::ENOENT
  # &#20363;&#22806; Errno::ENOENT &#12434;&#35036;&#36275;
  # &#12501;&#12449;&#12452;&#12523;&#12364;&#12458;&#12540;&#12503;&#12531;&#12391;&#12365;&#12394;&#12363;&#12387;&#12383;&#22580;&#21512;&#12289;&#12513;&#12483;&#12475;&#12540;&#12472;&#12434;&#34920;&#31034;&#12375;&#12390;&#32066;&#20102;&#12377;&#12427;
  filename = $!.message.sub("Plik lub ścieżka nie istnieje ", "")
  print("Brakuje pliku: #{filename} ")
end



Forum uszkadza skrypt.

Main

A, i jeszcze to:
Spoiler:

Kod:
class Window_okno < Window_Base
  def initialize(x = 160, y = 120, width = 320, height = 240)
    super(x, y, width, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = "Tahoma"
    self.contents.font.size = 18
    self.back_opacity = 160
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.draw_text(0, 0, 288, 32, "tekst", 1)
  end
end


maciek1520 - Sro 22 Gru, 2010 23:26

Cytat:
Schodzimy trochę niżej do linijki 36?
Widzimy:
Kod:
@spriteset.dispose
@message_window.dispose

Piszemy:
Kod:
@okienko.dispose


gdzie piszemy to @okienko.dispose ??
nad czy pod prosze o odp w pw

Sabikku - Czw 23 Gru, 2010 01:52

Bez różnicy, kolejność nie ma najmniejszego znaczenia.
maciek1520 - Czw 23 Gru, 2010 12:17

ok dzieki jakos to rozwiazalem sam
a bledem bylo to ze na tej linicjce
Cytat:
@okienko = Window_okno.new

miialem zamiast okienko to okienka. wiec przepraszam za klopot

Pagding - Czw 23 Gru, 2010 15:54

Okno nie schodzi mi z mapy, mimo tego, że wszystko dobrze spisałem ;-(
Cytat:

@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
@okienko = Window_okno.new


i

Cytat:

@spriteset.dispose
@message_window.dispose
@okienko.dispose


Może wy znajdziecie mój błąd.

Sabikku - Czw 23 Gru, 2010 16:12

Tutaj błędu nie ma, musiałbyś pokazać cały kod bro.
Pagding - Czw 23 Gru, 2010 18:57

Oto kod:
Cytat:
class Window_okno < Window_Base
def initialize(x = 160, y = 200, width = 220, height =240)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = ("Arial")
self.contents.font.size = 18
self.back_opacity = 150
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, 288, 32, "Zakazana jaskinia", 0)
end
end

Sabikku - Czw 23 Gru, 2010 23:00

Tutaj też nie ma żadnego błędu ~~. Miałem na myśli kod Scene_Map.
Lukortech - Sob 05 Lut, 2011 13:02

5/6 - bo się napracowałeś.
Ale pewnie się przyda. Już zapisuję stronę jako by móc offline'owo oglądać twe wypociny.

shiwt - Sob 05 Lut, 2011 14:46

Lukortech napisał/a:
5/6 - bo się napracowałeś.
Ale pewnie się przyda. Już zapisuję stronę jako by móc offline'owo oglądać twe wypociny.

On tego nie napisał, tylko skopiował z innej strony.

Mikołaj - Sob 19 Lut, 2011 11:00

Ja nierozumiem tego. :cry:
Ratti - Sob 19 Lut, 2011 11:39

Jakbyś przeanalizował logicznie tą stronę:
http://pl.wikibooks.org/wiki/Ruby
By wykorzystać ją w rpgmakerze to na pewno zrozumiesz ;-)
Pozdrawiam :przytul:

Mikołaj - Sro 02 Mar, 2011 14:42

Czytałem ją już.I dalej nie rozumię :-P
Shlizer - Czw 03 Mar, 2011 00:53

Jak nie 'rozumię' to niech nauczy się polskiego to 'zrozumię' =)
co prawda w C++ oraz trochę WinApi, ale z pierwszych lekcji może zajarzysz czym jest programowanie: http://xion.org.pl/produc...g/megatutorial/ wg. mnie Xion napisał póki co najlepszy kurs programowania jaki dotychczas widziały moje oczy, jeśli go nie zrozumiesz to pozostaje Ci błagać o nauczenie Cię programowania nauczyciela informatyki.. choć w Polsce to brzmi bardziej jak żart niestety.. =/

Mikołaj - Czw 03 Mar, 2011 14:44

Mój nauczyciel też nie umię. :-P
Shlizer - Pią 04 Mar, 2011 01:19

Bo Twój nauczyciel prawie na pewno nie jest informatykiem, a nauczycielem innej dziedziny, który zrobił sobie miesięczny kurs obsługi komputera (jak włączyć, do czego jest mysz i jak formatować tekst w Wordzie), dzięki czemu może nauczać informatyki.. ciekawe czy informatyk po miesięcznym kursie biologii mógłby uczyć tego przedmiotu w szkole? =/
Dżoj - Sro 16 Mar, 2011 17:51

pw115 czekam na poradnik o CMS'ie
sieczken - Pią 06 Maj, 2011 08:58

Dzięki tutorial przydał się w 100%
Avara - Sob 16 Lip, 2011 14:28

Zrobiłam pojawiające się okienko wyboru w klasie Scene. Co muszę zrobić, aby gra się zatrzymała, podczas jego wyświetlania? Oczywiście okienko wyboru musi pozostać aktywne.
Sabikku - Sob 16 Lip, 2011 15:24

Rmvx? I pisząc 'gra' masz na myśli mapę?
Jeśli tak, wystarczy przestać aktualizować (update'ować) pozostałe elementy z metody Scene_Map::update. Np. tak:
Kod:
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    @okno_wyboru.update
    if not @okno_wyboru.active
      $game_map.interpreter.update      # Update interpreter
      $game_map.update                  # Update map
      $game_player.update               # Update player
      $game_system.update               # Update timer
      @spriteset.update                 # Update sprite set
      @message_window.update            # Update message window
      unless $game_message.visible      # Unless displaying a message
        update_transfer_player
        update_encounter
        update_call_menu
        update_call_debug
        update_scene_change
      end
    end
  end

Dzięki czemu tak długo, jak okno wyboru jest aktywne, wszystkie pozostałe elementy (mapa, gracz, zdarzenia) pozostają zatrzymane.

Avara - Sob 16 Lip, 2011 23:21

Nic się nie zmieniło. Nawet błędu nie było. Jakbym tego w ogóle nie wkleiła. Oczywiście dostosowałam go i umieściłam pomiędzy def i end itd... ten sposób nie działa. Tylko Graphics.freeze (sama kombinuję co z tym zrobić) zadziałało ale wtedy nawet to okno wyboru jest nieaktywne. Proszę o inne pomysły. Sama też szukam rozwiązania.
Sabikku - Sob 16 Lip, 2011 23:52

Powyższy kod działa, jeśli wrzucisz go zamiast def update ... end w klasie Scene_Map, pod warunkiem, że twoje okno wyboru jest aktywne - czyli jego zmienna active wynosi true.

Wszystko zależy od tego, jak zrobione masz okienko i bez kodu trudno tu cokolwiek doradzić. Najlepiej wrzuć całe Scene_Map, albo np. podeślij mi na pw, to spróbuję pomóc.

Avara - Nie 17 Lip, 2011 00:05

Ha! Udało mi się!!!

Spoiler:

Kod:
class Scene_Map
   
  alias o_main main
  def main
    komenda_1 = "Zrób coś 1."
    komenda_2 = "Zrób coś 2."
    komenda_3 = "Zrób coś 3."
    @okienko_wyboru = Window_Command.new(192, [komenda_1, komenda_2, komenda_3])
    @okienko_wyboru.x = 50
    @okienko_wyboru.y = 100
    @okienko_wyboru.back_opacity = 150
    @okienko_wyboru.active = false
    @okienko_wyboru.visible = false
    o_main     
  end 
 
 
  alias o_terminate terminate
  def terminate
    @okienko_wyboru.dispose
    o_terminate
  end
 
 
  alias o_update update
  def update
    @okienko_wyboru.update
    if Input.trigger?(Input::C) and @okienko_wyboru.active
      case @okienko_wyboru.index
      when 0:
        @okienko = Window_okno.new
        $game_switches[1] = true       
      when 1:
        $game_variables[5] = 3
        $game_variables[6] = 7       
      when 2:
        $game_variables[5] = $game_variables[6]       
      end
    end
    if Input.trigger?(Input::F5)
      if @okienko_wyboru.active == false
        @okienko_wyboru.visible = true
        @okienko_wyboru.active = true
        $game_temp.background_bitmap.dispose
        $game_temp.background_bitmap = Graphics.snap_to_bitmap
        $game_temp.background_bitmap.blur
        @menuback_sprite = Sprite.new
        @menuback_sprite.bitmap = $game_temp.background_bitmap
        @menuback_sprite.color.set(16, 16, 16, 128)
        update_menu_background
      else
        @okienko_wyboru.visible = false
        @okienko_wyboru.active = false
      end     
    end
    o_update
  end 
    def update_menu_background
  end
end

Okienko przy pierwszej opcji wyświetla tylko wartość zmiennej nr 5. Jest w osobnym skrypcie.
Teraz tylko muszę odkryć, jak się "odświeża" obraz.

Edit: hmm.. nie do końca. Wszystko pod tłem się porusza, choć tego nie widać. A "odświeżyć" obraz już umiem.

Ma ktoś jakieś pomysły?

Sabikku - Nie 17 Lip, 2011 00:30

W tym miejscu...
Kod:
o_update

...wywoływana jest 'stara' definicja update, która aktualizuje wszystkie obiekty - mapę, interpreter (zdarzenia), gracza itd.

Ogólnie nie obraź się, ale za dużo kombinujesz, zamiast robić takie rzeczy lepiej stworzyć osobną scenę (która będzie się odpalać po naciśnięciu F5). Pieprzenie się z takimi rzeczami bezpośrednio na Scene_Map to katorga, jak widzisz powyżej - bardzo trudno uniknąć błędów (np. naciśnij dwa razy F5).

Tak czy siak, jeśli ci to pomoże: żeby zablokować aktualizowanie mapy, zamień:
Kod:
o_update

na:
Kod:
if not @okienko_wyboru.active
  o_update
end

Avara - Nie 17 Lip, 2011 01:11

Teraz działa bezbłędnie. Nie obrażam się. Dopiero dziś zaczęłam się uczyć robić okienko z jakąkolwiek treścią. Wcześniej próbowałam nauczyć się robić skrypty, ale w ogóle mi to nie wychodziło. Dopiero dziś mi zaczęło wychodzić.
Próbowałam przerobić to przerobić na osobną scenę, ale nie działa. Korzystałam z kilku różnych poradników, gotowych skryptów i szukałam w podstawowych skryptach programu rozwiązań problemów. Przykro mi, że Cię rozczarowałam i dzięki serdeczne za pomoc :-)

Sabikku - Nie 17 Lip, 2011 01:17

Oj, wskazałem tylko (imo) lepsze rozwiązanie, nie musisz wiedzieć wszystkiego i na pewno nikogo nie rozczarowałaś - dobrze ci idzie ;-) . Powodzenia.
Avara - Nie 17 Lip, 2011 01:25

Oto ostateczna wersja próbnego okienka gdzie wszystko działa bez zarzutu. Można okienko ze zmienną wyłączyć przed powrotem do gry i ładnie się samo odświeża :)
Spoiler:

Kod:
class Scene_Map
   
  alias o_main main
  def main
    komenda_1 = "Zrób coś 1."
    komenda_2 = "Zrób coś 2."
    komenda_3 = "Zrób coś 3."
    @okienko_wyboru = Window_Command.new(192, [komenda_1, komenda_2, komenda_3])
    @okienko_wyboru.x = 50
    @okienko_wyboru.y = 100
    @okienko_wyboru.back_opacity = 150
    @okienko_wyboru.active = false
    @okienko_wyboru.visible = false
    o_main     
  end 
 
 
  alias o_terminate terminate
  def terminate
    @okienko_wyboru.dispose
    o_terminate
  end
 
 
  alias o_update update
  def update
    @okienko_wyboru.update
    if Input.trigger?(Input::C) and @okienko_wyboru.active
      case @okienko_wyboru.index
      when 0:
        @okienko = Window_okno.new
        $game_switches[1] = true       
      when 1:
        $game_variables[5] = 3
        $game_variables[6] = 7
        @okienko.refresh
      when 2:
        $game_variables[5] = $game_variables[6]
        @okienko.refresh
      end
    end
    if Input.trigger?(Input::F5)
      if @okienko_wyboru.active == false
        @okienko_wyboru.visible = true
        @okienko_wyboru.active = true
        $game_temp.background_bitmap.dispose
        $game_temp.background_bitmap = Graphics.snap_to_bitmap
        $game_temp.background_bitmap.blur
        @menuback_sprite = Sprite.new
        @menuback_sprite.bitmap = $game_temp.background_bitmap
        @menuback_sprite.color.set(16, 16, 16, 128)
      else
        @okienko_wyboru.visible = false
        @okienko_wyboru.active = false
        $scene = Scene_Map.new
      end     
    end
    if Input.trigger?(Input::F6)
      if @okienko.visible == true
        @okienko.visible = false
      end
    end
    if not @okienko_wyboru.active
      o_update
    end
  end 
end

Jak na pierwszy dzień to chyba nieźle mi poszło :)

Avara - Nie 17 Lip, 2011 14:32

Piszę nowy post, bo inaczej nikt nie zauważy mojego pytania:

Jak w prosty sposób można zrobić tak, by samo zaznaczenie opcji dawało jakiś efekt bez potwierdzania enterem?

Sabikku - Nie 17 Lip, 2011 14:47

Nie napisałaś, czy efekt ma się wykonywać raz (przy zmianie opcji klawiszem kierunku), czy wielokrotnie (tak długo, jak wybrana jest dana opcja). Wielokrotnie jest łatwo, np. wrzuć pod def update to co poniżej:
Kod:

if @okienko_wyboru.index == 0
  # Co ma się dziać, jeśli zaznaczona jest pierwsza opcja.
elsif @okienko_wyboru.index == 1
  # Co ma się dziać, jeśli zaznaczona jest druga opcja.
elsif @okienko_wyboru.index == 2
  # Co ma się dziać, jeśli zaznaczona jest trzecia opcja.
end

Avara - Nie 17 Lip, 2011 21:01

Bardzo Ci dziękuję. O to mi właśnie chodziło. :-) Jeszcze raz thx ;-)
Avara - Nie 31 Lip, 2011 12:58

Szukałam sposobu, aby w oknie można było wyświetlić tekst w kolorze wybranym z windowskin, ale nie znalazłam, go nigdzie na forum, ani w necie. Udało mi się jednak samej dojść do tego, jak to zrobić (szukając w podstawowych skryptach maker'a vx).

W klasie naszego okna dodajemy definicję:
Kod:
def text_color(n)
    x = 64 + (n % 8) * 8
    y = 96 + (n / 8) * 8
    return windowskin.get_pixel(x, y)
  end

a w definicji reflesh:
Kod:
self.contents.font.color = text_color(15)

Zamiast 15 może być dowolna liczba od 0 do 31 (tyle ile jest kolorów w windowskin).
Każda linijka wstawiona po tym kodzie będzie miała wybrany przez nas kolor. Jeśli chcemy mieć z powrotem kolor podstawowy, to po wybranych przez nas linijkach tekstu wklejamy
Kod:
self.contents.font.color = text_color(0)


Mam nadzieję, że wszystko jest zrozumiałe i że może się to komuś przyda :-)

Kod wzięty z Window_Base ;-)

Avara - Wto 12 Cze, 2012 12:13

W jaki sposób zwęzić zaznaczenie w danym Window_Selectable? Mam w tym oknie mniejszą czcionkę i chciałabym zwęzić zaznaczenie.
Ayene - Sro 13 Cze, 2012 08:44

W RMVX za szerokość zaznaczenia w Window_Selectable odpowiada definicja 'item_rect(index)'. Wystarczy w niej edytować linijkę:
Kod:
rect.width = (contents.width + @spacing) / @column_max - @spacing

Można albo wpisać konkretną wartość, albo pobawić się działaniami.


Powered by phpBB modified by Przemo © 2003 phpBB Group