Witam!
Ring Menu to skrypt pozwalający na wyświetlenie menu w formie koła, z ikonami pojawiającym się na ekranie. Zastosowałem ten skrypt w grze "System". Lekko go zmodyfikowałem. Mam nadzieję że komuś się przyda.
def initialize(menu_index = 0)
@menu_index = menu_index
$location_text=[]
$gold_text=[]
$window_size=[]
$ring_menu_text=[]
$chara_select=[]
@window_opacity=[]
@chara_select=[]
@window_position=[]
$location_text[0]="Comic Sans MS" # Font Type
$location_text[1]=24 # Font Size
$location_text[2]=0 # Location Title Color
$location_text[4]=0 # Map Name Color
$location_text[3]="Lokacja:" # Text
$gold_text[0]="Comic Sans MS" # Font Type
$gold_text[1]=24 # Font Size
$gold_text[2]=0 # Gold Title Color
$gold_text[6]=0 # Gold Color
$gold_text[4]="Złoto:" # Text
@window_opacity[0]=255 # Border Opacity
@window_opacity[1]=130 # Background Opacity
$window_location_skin="001-Blue01" # Location Windowskin
$window_gold_skin="001-Blue01" # Gold Windowskin
@window_position[0]=0 # X Axis Position
@window_position[1]=0 # Location Y Axis Position
@window_position[2]=384 # Gold Y Axis Position
$window_size[0]=160 # Length
$window_size[1]=96 # Height
$ring_menu_text[0]="Comic Sans MS" # Font Type
$ring_menu_text[7]=0 # Font Color
$ring_menu_text[8]=24 # Font Size
$ring_menu_text[1]="Przedmioty"
$ring_menu_text[2]="Czary"
$ring_menu_text[3]="Ekwipunek"
$ring_menu_text[4]="Stan"
$ring_menu_text[5]="Zapisz grę"
$ring_menu_text[6]="Wyjdź z gry"
@chara_select[0]=408 # X Axis Position
@chara_select[1]=0 # Y Axis Position
$chara_select[0]="Comic Sans MS" # Font Type
$chara_select[1]=0 # Font Color
$chara_select[5]=24 # Font Size
$chara_select[2]=255 # Border Opacity
$chara_select[3]=130 # Background Opacity
$chara_select[4]="001-Blue01" # Windowskin
end
if @command_window.active
update_command
return
end
if @status_window.active
update_status
return
end
end
def update_command
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
if $game_party.actors.size == 0 and @command_window.index < 4
$game_system.se_play($data_system.buzzer_se)
return
end
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
$scene = Scene_Item.new
when 1
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 2
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 3
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 4
if $game_system.save_disabled
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$scene = Scene_Save.new
when 5
$game_system.se_play($data_system.decision_se)
$scene = Scene_End.new
end
return
end
return if @command_window.animation?
if Input.press?(Input::UP) or Input.press?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
return
end
if Input.press?(Input::DOWN) or Input.press?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
return
end
end
def update_status
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@status_window.active = false
@status_window.visible = false
@status_window.index = -1
return
end
if Input.trigger?(Input::C)
case @command_window.index
when 1
if $game_party.actors[@status_window.index].restriction >= 2
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$scene = Scene_Skill.new(@status_window.index)
when 2
$game_system.se_play($data_system.decision_se)
$scene = Scene_Equip.new(@status_window.index)
when 3
$game_system.se_play($data_system.decision_se)
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
def refresh
self.contents.clear
case @mode
when MODE_START
refresh_start
when MODE_WAIT
refresh_wait
when MODE_MOVER
refresh_move(1)
when MODE_MOVEL
refresh_move(0)
end
rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
self.contents.draw_text(rect, @commands[@index],1)
end
def refresh_start
d1 = 2.0 * Math::PI / @item_max
d2 = 1.0 * Math::PI / STARTUP_FRAMES
r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( r * Math.sin( d ) ).to_i
y = @cy - ( r * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
def refresh_wait
d = 2.0 * Math::PI / @item_max
for i in 0...@item_max
j = i - @index
x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
draw_item(x, y, i)
end
end
def refresh_move( mode )
d1 = 2.0 * Math::PI / @item_max
d2 = d1 / MOVING_FRAMES
d2 *= -1 if mode != 0
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( RING_R * Math.sin( d ) ).to_i
y = @cy - ( RING_R * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
def draw_item(x, y, i)
rect = Rect.new(0, 0, @items[i].width, @items[i].height)
if @index == i
self.contents.blt( x, y, @items[i], rect )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect )
end
else
self.contents.blt( x, y, @items[i], rect, 128 )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
end
end
end
def disable_item(index)
@disabled[index] = true
end
def setup_move_start
@mode = MODE_START
@steps = STARTUP_FRAMES
if SE_STARTUP != nil and SE_STARTUP != ""
Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
end
end
def setup_move_move(mode)
if mode == MODE_MOVER
@index -= 1
@index = @items.size - 1 if @index < 0
elsif mode == MODE_MOVEL
@index += 1
@index = 0 if @index >= @items.size
else
return
end
@mode = mode
@steps = MOVING_FRAMES
end
def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($chara_select[4])
self.contents.font.name = $chara_select[0]
self.contents.font.color = text_color($chara_select[1])
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
x = 80
y = 80 * i
actor = $game_party.actors[i]
draw_actor_graphic(actor, x - 60, y + 65)
draw_actor_name(actor, x, y + 2)
draw_actor_hp(actor, x - 40, y + 26)
draw_actor_sp(actor, x - 40, y + 50)
end
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
end
end
end
class Game_Map
def name
$map_infos[@map_id]
end
end
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end
Pomógł: 3 razy Dołączył: 22 Gru 2009 Posty: 262 Skąd: Warszawa
Wysłany: Nie 17 Sty, 2010 10:03
A ja mam pytanie:
Czy da się dopasować ring menu do windowskina. W mojej grze są one zmienne.
[ Dodano: Nie 17 Sty, 2010 10:48 ]
Już znalazłem rozwiązanie w linijce 51 można zmienić Windowskin na jaki chcecie pod warunkiem że go macie w Graphics\Windowskins.
Eh.. Mam zdaje się problem kombatybilnościowy tego skryptu z SBS... Mianowicie... Skrypt działa pięknie do pierwszej walki... Po tej następuje error o komunikacie :
Script 'New menu' line 329:RGSSError occured. Disposed bitmap.
Niestety linjka 329 wygląda następująco : rect = Rect.new(0, 0, @items[i].width, @items[i].height)... Nie ma tu słowa o pozycji grafiki czy czegoś w ten deseń więc nie za bardzo wiem jak to zreperować... Jakieś sugestie ?
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pon 18 Sty, 2010 16:47
Jest pozycja grafiki - w tej linijce tworzy się nową bitmapę (Rect od rectangle, czyli prostokąt), dwa pierwsze argumenty to położenie, a dwa kolejne to wymiary. Wina musi leżeć po stronie SBS (to SideView Battle System?!). Czasami wyskakiwał mi tego typu błąd, gdy skrypt próbował stworzyć coś, co było mniejsze od standardowego 32-pikselowego formatu. Niestety nie jestem w stanie Tobie pomóc - nie wiem, jakiego SBS używasz.
Tak sideview battle system... Używam tłumaczenia systemu Tankentai'a (z portugalskiego/japońskiego na angielski) (nie wiem czy to nie problem :D) Link : http://www.rpgrevolution....opic=25504&st=0 (bardzo fajny battle system... polecam...).
Nie wiem gdzie leży problem bo obydwa skrypty... osobno działają... Menu działa dopóki nie ma miejsca pierwsza walka (może problem przy umieszczaniu aktorów/resizie ikonek/etc...)
Jeśli tłumaczenia/translacje skryptów na forum coś dają/są mile widziane... To ja chętnie pare zaoferuje/zaproponuje/przetłumaczę <mały offtop przepraszam>
[ Dodano: Wto 19 Sty, 2010 11:07 ]
Zero rezultatu :< Inne sugestie ? :< Myślę ,że będzie trzeba jednak pobabrać w skrypcie :< Tylko nie mam pojęcia od czego zacząć...
Skrypty <komentarze do nich> przetłumaczone na poski ? ;P
Ayene jesteś genialna ;P Chodzi o ikony ;P Jak jakaś postać używa tej broni ,która jest jako domyślna ikonka w menu... To robi się crash :D Bardzo dziękuje :>
Mam problem taki nie wiem od czego ale jeśli wybiore np:
czary to jest error
script 'ring menu xp' line 202 :nomethoderror occurred
undefided method 'restriction' for nil:nilclass
A jak ekwipunek to to samo ale inny komunikat jeszcze tak samo stan.
Mam podejrzenia że mi może się to kolizować z systemem myszki.
________________________ http://www.poomoc.pl/
Kilka kliknięć a pomożesz innym!
Czy naprawdę to jest duża strata czasu?
W ten sposób pomożesz innym!
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