Skrypt obrazki menu - curiosis - 26-07-17 02:40
Witajcie, mam pytanie, Czy można zrobić tak, aby zamiast klikać strzałka w górę i w dół do zmiany obrazka (Nowa Gra, Wczytaj itd) można używać strzałek w prawo oraz w lewo? :D Mam trochę galimatias w skryptach i nie wiem czy ta część skryptu wystarczy. 0.o Z góry dziękuję :D
Kod:
#=====================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs title screen processing.
#=========================================================
class Scene_Title
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# If battle test
if $BTEST
battle_test
return
end
# Load database
$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")
# Make system object
$game_system = Game_System.new
# Make title graphic
@sprite = Sprite.new
@viewport1 = Viewport.new(0, 0, 640, 480)
@fog = Plane.new (@viewport1)
@fog.bitmap = RPG::Cache.fog("006-Sandstorm02", 0) #tutaj wpisujecie nazwę swojego fogu
@fog.z = 1000
@fog.opacity = 20 #tutaj macie przeźroczystość możecie dać od 0 do 255
# NEW CODE
@back_sprite = Sprite.new
@back_sprite.z = @sprite.z - 10
# transition between images, set to 0 if none
@transition_frames = 10
@delta = 255 / @transition_frames
@wait = 0
#END NEW CODE
# Continue enabled determinant
# Check if at least one save file exists
# If enabled, make @continue_enabled true; if disabled, make it false
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
# If continue is enabled, move cursor to "Continue"
# NEW CODE
if @continue_enabled
@sprite.bitmap = RPG::Cache.title("2")
@back_sprite.bitmap = RPG::Cache.title("2")
@index = 2
else
@sprite.bitmap = RPG::Cache.title("1")
@back_sprite.bitmap = RPG::Cache.title("1")
@index = 1
end
# END NEW CODE
# Play title BGM
$game_system.bgm_play($data_system.title_bgm)
# Stop playing ME and BGS
Audio.me_stop
Audio.bgs_stop
# Execute transition
Graphics.transition
# Main loop
loop do
# Update game screen
Graphics.update
# Update input information
Input.update
# Frame update
update
@fog_x = 1
@fog_y = 1
@fog.blend_type = 2 #tu jest tak gdy: 0 - normal, 1 - pozytyw, 2 - negatyw
@fog.ox = @fog_x - 2+ @fog.ox #tu gdzie minus możecie zmienić na plus to będzie się poruszało w lewo, gdy minus w prawo
@fog.oy = @fog_y - 2+ @fog.oy #tu jest podobnie tylko że w górę i w dół
# Abort loop if screen is changed
if $scene != self
break
end
end
# Prepare for transition
Graphics.freeze
@fog.dispose
# Dispose of title graphic
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# NEW CODE
if @wait >= 0
if @wait == 0
@sprite.bitmap = RPG::Cache.title(@index.to_s)
@sprite.opacity = 255
else
@sprite.opacity -= @delta
end
@wait -= 1
return
end
# if directional buttons are pressed
if Input.trigger?(Input::LEFT) or Input.trigger?(Input::UP)
$game_system.se_play($data_system.cursor_se)
if @index == 1
@index = 3
else
@index -= 1
end
@wait = @transition_frames
@back_sprite.bitmap = RPG::Cache.title(@index.to_s)
end
if Input.trigger?(Input::RIGHT) or Input.trigger?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
if @index == 3
@index = 1
else
@index += 1
end
@wait = @transition_frames
@back_sprite.bitmap = RPG::Cache.title(@index.to_s)
end
# If C button was pressed
if Input.trigger?(Input::C)
# Branch by index
case @index
when 1 # New game
command_new_game
when 2 # Continue
command_continue
when 3 # Shutdown
command_shutdown
end
end
# END NEW CODE
end
#--------------------------------------------------------------------------
# * Command: New Game
#--------------------------------------------------------------------------
def command_new_game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Stop BGM
Audio.bgm_stop
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each type of game object
$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
# Set up initial party
$game_party.setup_starting_members
# Set up initial map position
$game_map.setup($data_system.start_map_id)
# Move player to initial position
$game_player.moveto($data_system.start_x, $data_system.start_y)
# Refresh player
$game_player.refresh
# Run automatic change for BGM and BGS set with map
$game_map.autoplay
# Update map (run parallel process event)
$game_map.update
# Switch to map screen
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# * Command: Continue
#--------------------------------------------------------------------------
def command_continue
# If continue is disabled
unless @continue_enabled
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to load screen
$scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# * Command: Shutdown
#--------------------------------------------------------------------------
def command_shutdown
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Fade out BGM, BGS, and ME
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
# Shutdown
$scene = nil
end
#--------------------------------------------------------------------------
# * Battle Test
#--------------------------------------------------------------------------
def battle_test
# Load database (for battle test)
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each game object
$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
# Set up party for battle test
$game_party.setup_battle_test_members
# Set troop ID, can escape flag, and battleback
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# Play battle start SE
$game_system.se_play($data_system.battle_start_se)
# Play battle BGM
$game_system.bgm_play($game_system.battle_bgm)
# Switch to battle screen
$scene = Scene_Battle.new
end
end
RE: Skrypt obrazki menu - AlmostNoRuby - 26-07-17 09:01
Nie rozumiem, podałeś tylko tą część skryptu i ona działa prawidłowo. To znaczy da się zmieniać opcję i przyciskami góra/dół, i lewo/prawo. Jeżeli chcesz usunąć możliwość zmiany opcji przyciskami góra/dół, usuń fragment kodu zaznaczony na czerwono:
# if directional buttons are pressed
if Input.trigger?(Input::LEFT) or Input.trigger?(Input::UP)
$game_system.se_play($data_system.cursor_se)
if @index == 1
@index = 3
else
@index -= 1
end
@wait = @transition_frames
@back_sprite.bitmap = RPG::Cache.title(@index.to_s)
end
if Input.trigger?(Input::RIGHT) or Input.trigger?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
if @index == 3
@index = 1
else
@index += 1
end
@wait = @transition_frames
@back_sprite.bitmap = RPG::Cache.title(@index.to_s)
end
U mnie to jest 124 i 134 linijka.
Do wszystkich przyczepnych osób: w tagu /code nie da się kolorować tekstu.
RE: Skrypt obrazki menu - Mateusz SSJ8 - 30-07-17 10:15
W pierwszej kolejności trzeba by to uporządkować. Najlepiej na podobieństwo RPG Makera VX Ace.
Kiedy to już jest, można dodać klasę "Window_HorzCommand" i w "Scene_Title" zmienić "Window_Command.new" na "Window_HorzCommand.new"
Warto pomyśleć o tym, żeby kursor wyboru nie przechodził automatycznie do następnego wiersza, kiedy gracz próbuje ruszyć nim w prawo w ostatniej kolumnie, ani do poprzedniego, kiedy gracz próbuje ruszyć nim w lewo w pierwszej kolumnie.
RE: Skrypt obrazki menu - AlmostNoRuby - 31-07-17 10:06
Cytat:W pierwszej kolejności trzeba by to uporządkować. Najlepiej na podobieństwo RPG Makera VX Ace.
Wiem, że skrypty w RPGXP są mniej czytelne od tych w VX/-ACE. Gdybyśmy robili jakieś głębsze zmiany to się by to przydało, ale nie przewracamy skryptu do góry nogami tylko usuwamy 2 warunki.
Cytat:Kiedy to już jest, można dodać klasę "Window_HorzCommand" i w "Scene_Title" zmienić "Window_Command.new" na "Window_HorzCommand.new"
...Chcesz dodać to wybieranie w poziomie?... może się przydać, ale chyba nie tutaj... bo bez tego okienka w poziomie działa...eee...nie wiem co więcej powiedzieć .
Cytat:Warto pomyśleć o tym, żeby kursor wyboru nie przechodził automatycznie do następnego wiersza, kiedy gracz próbuje ruszyć nim w prawo w ostatniej kolumnie, ani do poprzedniego, kiedy gracz próbuje ruszyć nim w lewo w pierwszej kolumnie.
Jak chcesz takie okienko zrobić, to rób. Tylko dlaczego piszesz o tym tutaj?
RE: Skrypt obrazki menu - Mateusz SSJ8 - 31-07-17 21:54
Przecież w RPG Makerze VXAce można napisać klasę specyficznego okna, które na podstawie parametru "ext" polecenia wyświetla ikonę tego polecenia. W RPG Makerze XP czeka cię więcej pracy, żeby osiągnąć taki sam efekt (głównie przez zmiany, jakie musisz dokonać w specyfice okien), ale wysiłek ten bardzo się opłaca.
I w RPG Makerze VXAce polecenia dla ekranu nie są wykonywane bezpośrednio w nim, ale w oknie, którego dotyczą. Wymaga to, co prawda przeładowania ich do okna, ale skoro RPG Maker VXAce używa tego patentu, to czemu RPG Maker XP miałby nie robić tego samego.
RE: Skrypt obrazki menu - AlmostNoRuby - 01-08-17 08:49
Nie wiem, czy piszemy o tym samym... bo ja pisałem teraz o braku kolumn w okna wyboru RPGXP... ale mniejsza.
RPGXP był pewnego rodzaju startem. Przejściem na inną technologię. I co jest logiczne, dlatego są mniejsze i większe błędy w "szkielecie" systemu. Jeżeli chcesz tworzyć jakieś poprawki do "szkieletu" (np. możliwości okien, o czym mówimy) - utwórz temat, opisz, co chcesz zrobić a nie pisz w temacie w którym user pyta o to, czy dałoby się zrobić jedną drobną rzecz, czy to wynika z tego, że ma dużo skryptów dodanych do projektu i ma je niepoukładane i coś konsoliduje z drugim, czy z czego.
RE: Skrypt obrazki menu - Mateusz SSJ8 - 01-08-17 12:04
Przepraszam, jak to nie ma kolumn w RPG Makerze XP? A ta instrukcja w definicji klasy "Window_Command" to co?
I ty TO nazywasz brakiem kolumn? Przecież do tej wartości odwołuje się polecenie odpowiedzialne za ruch kursora wyboru. A przynajmniej jego części odpowiadające obecnym w RPG Makerze VXAce poleceniom "cursor_down", "cursor_left", "cursor_right" i "cursor_up". Chyba nie muszę ci przypominać, że nie można dzielić przez zero.
Poza tym pierwsza wartość "@index" to 0, a najmniejszą dopuszczoną przez skrypt jest 1. Autorze TEGO tematu. Dlaczego?
RE: Skrypt obrazki menu - AlmostNoRuby - 01-08-17 12:18
Dobra. Cały ja _--
Może będzie lepiej jak skończymy tą rozmowę bo się staje coraz bardziej...?
|