KireSerdnaSáb Jun 23, 2012 5:13 pm
Administrador
Buenas!
Si alguna vez haz tenido esa molesta acción de que cuando haces un mapa muy grande y caminas por el, se ve como si fueses por saltitos, son por los Fps.
Aquí te doy una buena solución.
Si alguna vez haz tenido esa molesta acción de que cuando haces un mapa muy grande y caminas por el, se ve como si fueses por saltitos, son por los Fps.
Aquí te doy una buena solución.
- Código:
#==============================================================================
# Listra Smooth Scroller Module (RMXP)
# Autor: Bunga Tepi Jalan
# Versión 1.0
# Traducción (en fase): D.A.C.
#==============================================================================
# Propiedad de Bunga Tepi Jalan.
# * No te olvides de los créditos en caso de usar este script.
# * Eres libre de compartir - copiar, distribuir y comunicar públicamente la obra.
# * Eres libre de reescribir - para adaptar el trabajo.
# * Se prohíbe el uso de este script para fines comerciales.
#==============================================================================
# Información:
# Este script hace que el desplazamiento del mapa sea más suave.
# Si encuentras algún problema o tienes alguna sugerencia, mándame un e-mail a 'listra92@gmail.com', o postea en
# cualquiera de las siguientes direcciones:
# - http://bungatepijalan.wordpress.com
# - http://www.rpgmakerid.com
# - http://prodig.forumotion.net
# - http://vixep.forumsrpg.net
#==============================================================================
module LSSM
#--------------------------------------------------------------------------
# * Listra Smooth Scroller Module Configuration
#--------------------------------------------------------------------------
# Config 1 -- Factor de desplazamiento suave: cuánto más alto sea el valor, más lento es el desplazamiento.
SMOOTH = 16.0
# Config 2 -- Desplazamiento del borde del mapeado horizontal y vertical personalizado
# No exceder CENTER_X y CENTER_Y.
HBOR = 320 * 4
VBOR = 240 * 4
# Config 3 -- ¿Usar HBOR & VBOR?
USECUSTOMBOR = false
end
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# This class handles the player. Its functions include event starting
# determinants and map scrolling. Refer to "$game_player" for the one
# instance of this class.
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * Invariables (changed)
#--------------------------------------------------------------------------
CENTER_X = 320 * 4 # Center screen x-coordinate * 4
CENTER_Y = 240 * 4 # Center screen y-coordinate * 4
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Remember whether or not moving in local variables
last_moving = moving?
# If moving, event running, move route forcing, and message window
# display are all not occurring
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# Move player in the direction the directional button is being pressed
case Input.dir4
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end
end
# Remember coordinates in local variables
last_real_x = @real_x
last_real_y = @real_y
super
# Player position as the real target coordinate (times 4)
# Disable this if you want to use another position at certain event
target_x = @real_x
target_y = @real_y
# Horizontal & vertical scroll border
if LSSM::USECUSTOMBOR
hbor = LSSM::HBOR
vbor = LSSM::VBOR
else
hbor = CENTER_X
vbor = CENTER_Y
end
# If character is positioned lower than the center of the screen
if target_y - $game_map.display_y > 15*128 - vbor
# Scroll map down
if target_y > $game_map.height*128 - vbor
$game_map.scroll_down((($game_map.height - 15)*128 - $game_map.display_y)/LSSM::SMOOTH)
else
$game_map.scroll_down((target_y - $game_map.display_y - 15*128 + vbor)/LSSM::SMOOTH)
end
end
# If character is positioned more left on-screen than center
if target_x - $game_map.display_x < hbor
# Scroll map left
if target_x < hbor
$game_map.scroll_left($game_map.display_x/LSSM::SMOOTH)
else
$game_map.scroll_left(($game_map.display_x + hbor - target_x)/LSSM::SMOOTH)
end
end
# If character is positioned more right on-screen than center
if target_x - $game_map.display_x > 20*128 - hbor
# Scroll map right
if target_x > $game_map.width*128 - hbor
$game_map.scroll_right((($game_map.width - 20)*128 - $game_map.display_x)/LSSM::SMOOTH)
else
$game_map.scroll_right((target_x - $game_map.display_x - 20*128 + hbor)/LSSM::SMOOTH)
end
end
# If character is positioned higher than the center of the screen
if target_y - $game_map.display_y < vbor
# Scroll map up
if target_y < vbor
$game_map.scroll_up($game_map.display_y/LSSM::SMOOTH)
else
$game_map.scroll_up(($game_map.display_y + vbor - target_y)/LSSM::SMOOTH)
end
end
# If not moving
unless moving?
# If player was moving last time
if last_moving
# Event determinant is via touch of same position event
result = check_event_trigger_here([1,2])
# If event which started does not exist
if result == false
# Disregard if debug mode is ON and ctrl key was pressed
unless $DEBUG and Input.press?(Input::CTRL)
# Encounter countdown
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
# If C button was pressed
if Input.trigger?(Input::C)
# Same position and front event determinant
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end