Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Smooth Cursor

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Smooth Cursor

Mensaje por Wecoc el 2015-01-09, 06:28

Éste script hace que el cursor de las ventanas, al moverse de un índice a otro, se "mueva" hacia allí en vez de ser un cambio directo.

Lo que hace es integrar nuevas variables en las ventanas que derivan de Window_Selectable

1 - cursor_duration. Ésta no la cambiéis, es la que usa para hacer el cálculo.
2 - cursor_speed. Es la velocidad del cursor, de 1 a 6. Por defecto vale 3.
3 - back_to_top. Si está activado, al estar en el último índice y tirar hacia abajo vuelve al primero. Por defecto vale true, pero si os fijáis está desactivado en Window_MenuStatus (la ventana de actores del menú).
4 - qw_enabled. Si está activado, puedes usar las teclas Av Pág / Re Pág (o Q/W). Por defecto vale true pero lo desactivé en Window_MenuStatus (la ventana de actores del menú), Window_Target (La selección de actor al usar un item o skill en menú) y Window_Message (ventana de mensajes).

Código:
#==============================================================================
# * [XP] Smooth Cursor
#==============================================================================

#==============================================================================
# * Window_Selectable
#==============================================================================

class Window_Selectable < Window_Base
 
  attr_accessor :cursor_speed
  attr_accessor :back_to_top
  attr_accessor :qw_enabled
 
  alias cursor_speed_ini initialize unless $@
  def initialize(*args)
    cursor_speed_ini(*args)
    @cursor_duration = 0
    @cursor_speed = 3
    @back_to_top = true
    @qw_enabled = true
  end
 
  def index=(index)
    @index = index
    if self.active and @help_window != nil
      update_help
    end
    update_cursor_rect
    if @index >= 0
      cursor_width = self.width / @column_max - 32
      x = @index % @column_max * (cursor_width + 32)
      y = @index / @column_max * 32 - self.oy
      self.cursor_rect.set(x, y, cursor_width, 32)
    end
  end   
 
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
      return
    end
    row = @index / @column_max
    if row < self.top_row
      self.top_row = row
    end
    if row > self.top_row + (self.page_row_max - 1)
      self.top_row = row - (self.page_row_max - 1)
    end
  end
 
  def update_cursor_movement
    if @cursor_duration >= 1
      d = @cursor_duration
      cursor_width = self.width / @column_max - 32
      new_x = @index % @column_max * (cursor_width + 32)
      new_y = @index / @column_max * 32 - self.oy
      x = (self.cursor_rect.x * (d - 1) + new_x) / d
      y = (self.cursor_rect.y * (d - 1) + new_y) / d
      @cursor_duration -= 1
      self.cursor_rect.set(x, y, cursor_width, 32)
    end
  end
 
  def update
    super
    update_cursor_movement
    if self.active and @item_max > 0 and @index >= 0
      if Input.repeat?(Input::DOWN)
        if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
          @index < @item_max - @column_max
          $game_system.se_play($data_system.cursor_se)
          if @back_to_top
            @index = (@index + @column_max) % @item_max
          else
            @index = [@index + @column_max, @item_max - 1].min
          end
          @cursor_duration = [7 - @cursor_speed, 1].max
        end
      end
      if Input.repeat?(Input::UP)
        if (@column_max == 1 and Input.trigger?(Input::UP)) or
          @index >= @column_max
          $game_system.se_play($data_system.cursor_se)
          if @back_to_top
            @index = (@index - @column_max + @item_max) % @item_max
          else
            @index = [@index - @column_max, 0].max
          end
          @cursor_duration = [7 - @cursor_speed, 1].max
        end
      end
      if Input.repeat?(Input::RIGHT)
        if @column_max >= 2 and @index < @item_max - 1
          $game_system.se_play($data_system.cursor_se)
          @index += 1
          @cursor_duration = [7 - @cursor_speed, 1].max
        end
      end
      if Input.repeat?(Input::LEFT)
        if @column_max >= 2 and @index > 0
          $game_system.se_play($data_system.cursor_se)
          @index -= 1
          @cursor_duration = [7 - @cursor_speed, 1].max
        end
      end
      if @qw_enabled == true
        if Input.repeat?(Input::R)
          if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
            $game_system.se_play($data_system.cursor_se)
            @index = [@index + self.page_item_max, @item_max - 1].min
            self.top_row += self.page_row_max
            @cursor_duration = [7 - @cursor_speed, 1].max
          end
        end
        if Input.repeat?(Input::L)
          if self.top_row > 0
            $game_system.se_play($data_system.cursor_se)
            @index = [@index - self.page_item_max, 0].max
            self.top_row -= self.page_row_max
            @cursor_duration = [7 - @cursor_speed, 1].max
          end
        end
      end
    end
    if self.active and @help_window != nil
      update_help
    end
    update_cursor_rect
  end
end

#==============================================================================
# * Window_MenuStatus
#==============================================================================

class Window_MenuStatus < Window_Selectable
  alias cursor_speed_ms_ini initialize unless $@
  def initialize(*args)
    cursor_speed_ms_ini(*args)
    @back_to_top = false
    @qw_enabled = false
  end
 
  def index=(index)
    @index = index
    update_cursor_rect
    if @index >= 0
      y = @index * 116
      self.cursor_rect.set(0, y, self.width - 32, 96)
    end
  end
 
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    end
  end
 
  def update_cursor_movement
    if @cursor_duration >= 1
      d = @cursor_duration
      new_y = @index * 116
      y = (self.cursor_rect.y * (d - 1) + new_y) / d
      @cursor_duration -= 1
      self.cursor_rect.set(0, y, self.width - 32, 96)
    end
  end
end

#==============================================================================
# * Window_Target
#==============================================================================

class Window_Target < Window_Selectable
  alias cursor_speed_tg_ini initialize unless $@
  def initialize(*args)
    cursor_speed_tg_ini(*args)
    @back_to_top = true
    @qw_enabled = false
  end
 
  def update_cursor_rect
    if @index <= -2
      self.cursor_rect.set(0, (@index + 10) * 116, self.width - 32, 96)
    elsif @index == -1
      self.cursor_rect.set(0, 0, self.width - 32, @item_max * 116 - 20)
    end
  end
 
  def index=(index)
    @index = index
    update_cursor_rect
    if @index >= 0
      y = @index * 116
      self.cursor_rect.set(0, y, self.width - 32, 96)
    end
  end

  def update_cursor_movement
    if @cursor_duration >= 1
      d = @cursor_duration
      new_y = @index * 116
      y = (self.cursor_rect.y * (d - 1) + new_y) / d
      @cursor_duration -= 1
      self.cursor_rect.set(0, y, self.width - 32, 96)
    end
  end
end

#==============================================================================
# * Window_Message
#==============================================================================

class Window_Message < Window_Selectable
  alias cursor_speed_ms_ini initialize unless $@
  def initialize(*args)
    cursor_speed_ms_ini(*args)
    @back_to_top = true
    @qw_enabled = false
  end
 
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    end
  end
 
  def index=(index)
    @index = index
    update_cursor_rect
    if @index >= 0
      y = ($game_temp.choice_start + @index) * 32
      self.cursor_rect.set(8, y, @cursor_width, 32)
    end
  end
 
  def update_cursor_movement
    if @cursor_duration >= 1
      d = @cursor_duration
      new_y = ($game_temp.choice_start + @index) * 32
      y = (self.cursor_rect.y * (d - 1) + new_y) / d
      @cursor_duration -= 1
      self.cursor_rect.set(8, y, @cursor_width, 32)
    end
  end
end


Soy el autor del script pero no pido créditos. Podéis modificar el script a vuestro antojo.


Última edición por Wecoc el 2015-01-21, 13:21, editado 2 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12387

Gracias : 595

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Smooth Cursor

Mensaje por errd el 2015-01-20, 04:24

No entiendo para que sirve
avatar
errd
Iniciado
Iniciado

0/3

Créditos 50

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Smooth Cursor

Mensaje por comgerde05 el 2015-01-20, 05:29

@errd escribió:No entiendo para que sirve



Wecocio escribió:Éste script hace que el cursor de las ventanas, al moverse de un índice a otro, se "mueva" hacia allí en vez de ser un cambio directo.



En pocas palabras le da un movimiento más "fluido" al cursor (la cosita esa que se mueve cunado pulsas una flecha de dirección)

PD: Acabo de verlo in-game y me gusto el efecto que da. Me pregunto si para el ACE existira uno parecido. (Luego lo busco con calma xD)
avatar
comgerde05
Principiante
Principiante

0/3

Créditos 652

Gracias : 32

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Smooth Cursor

Mensaje por Miky Joe el 2015-01-20, 21:21

es verdad quita el golpe de seleccion,me gusta,lastima que no uso el xp,bueno lo pasare a un amigo.
avatar
Miky Joe
Veterano
Veterano

0/3

Créditos 1131

Gracias : 72

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Smooth Cursor

Mensaje por krakacen el 2015-04-06, 19:39

Vaya, la verdad que le da un aspecto mas profesional al proyecto, me gusta, lo usaré.
Gracias ^^
avatar
krakacen
Iniciado
Iniciado

0/3

Créditos 24

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Smooth Cursor

Mensaje por Avenger_K el 2015-04-19, 12:52

El script esta fantástico, es de esos que añaden una función pequeña pero a la vez muy útil. Lastima que es incompatible con algunos tipos de menus.
Bye Bye!
avatar
Avenger_K
Soñador
Soñador

0/3

Créditos 338

Gracias : 15

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Smooth Cursor

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.