Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3773 miembros registrados.
El último usuario registrado es Selu64.

Nuestros miembros han publicado un total de 85868 mensajes en 12230 argumentos.

[XP][VX][Ace] [Herramienta de Scripter][ALFA] Mouse Gesture

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP][VX][Ace] [Herramienta de Scripter][ALFA] Mouse Gesture

Mensaje por Wecoc el 2016-11-02, 07:36

Hice una prueba que no me salió demasiado bien, pero igualmente quise compartirla porque es diferente a lo habitual y seguro que habrá quien pueda sacarle algo.
Lo que hace es añadir un sistema Mouse gesture (o Mouse drag) es decir de reconocimiento de formas al dibujar algo con el ratón.

Está inspirado en el reciente doodle Halloween 2016.

Usé de referencia un viejo script de LittleDrago ya obsoleto llamado Mouse Gesture y requiere dos scripts a parte: Glitchfinder's Key Input Module y Glitchfinder's Mouse Module (implementación de teclado -> ratón). Puede que funcione con otros sistemas de ratón pero no se ha comprobado y se recomienda usar éste.

Créditos: LittleDrago, Glitchfinder & Wecoc

Insertar encima de main y debajo de los dos scripts requeridos ya mencionados.

Código:
#==============================================================================
# ** [XP][VX][Ace] Mouse Gesture v0.1
#------------------------------------------------------------------------------
#  Autor: Wecoc (usando de base el script Mouse Gesture de LittleDrago)
# - Éste script require Glitchfinder's Key Input Module
# - Éste script require Glitchfinder's Mouse Input Module
#==============================================================================

module Mouse_Gesture
  module_function
  
  VXA = defined?(Window_BattleActor)
  
  # Default color
  DRAG_COLOR = Color.new(255, 255, 255, 128)
  DRAG_WIDTH = 4
  DRAG_TILE = 32
  
          # :name => [(movement), (color)]
  CONFIG = {:down  => [['down'],  Color.new(0, 0, 255, 128)],
            :up    => [['up'],    Color.new(0, 0, 255, 128)],
            :left  => [['left'],  Color.new(255, 0, 0, 128)],
            :right => [['right'], Color.new(255, 0, 0, 128)],
            :square => [['down', 'right', 'up', 'left'], Color.new(255, 255, 0, 128)],
            :green_triangle_a => [['upright', 'downright'], Color.new(0, 255, 0, 128)],
            :green_triangle_b => [['upleft' , 'downleft' ], Color.new(0, 255, 0, 128)],
            :yellow_triangle_a => [['downright', 'upright'], Color.new(255, 255, 0, 128)],
            :yellow_triangle_b => [['downleft' , 'upleft' ], Color.new(255, 255, 0, 128)],
            :thunder => [['downleft', 'right', 'downleft'], Color.new(255, 192, 0, 128)],
            :heart => [['upleft', 'up', 'upright', 'downright', 'upright',
            'downright', 'down', 'downleft'], Color.new(250, 80, 250, 128)]}
  
  for k in CONFIG.keys
    eval("def #{k} ; return CONFIG[#{k}] ; end")
  end
  
  ALLOWED_SCENE = ['Scene_Map']
  
  def forbid_mouse_gestures
    return false if !scene.is_a?(Scene_Map)
    if defined?(Window_ActorCommand)            # If VX or VXA
      return true if !$game_player.movable?
      return false
    end                                         # If XP
    return true if $game_system.map_interpreter.running?
    return true if $game_player.move_route_forcing
    return true if $game_temp.message_window_showing
  end
  
  def scene() VXA ? SceneManager.scene : $scene end
  
  def update_mouse_gestures
    return if forbid_mouse_gestures
    if Mouse.dragging?
      @points = [] if @points.nil?
      if @points[-1] != [Mouse.x, Mouse.y] or @points.size == 0
        @points.push([Mouse.x, Mouse.y])
      end
      draw_gesture if @points.size > 0 && Graphics.frame_count % 2 == 0
    else
      @points = [] if @points != []
      if !@gesture_sprite.nil?
        @gesture_sprite.opacity -= 10
        if @gesture_sprite.opacity <= 0
          @gesture_sprite.bitmap.dispose
          @gesture_sprite.dispose
          @gesture_sprite = nil
        end
      end
    end
  end
  
  def draw_gesture
    return if @points.size <= 1
    @gesture_sprite = Sprite.new if @gesture_sprite.nil?
    @gesture_sprite.bitmap = Bitmap.new(640, 480) if @gesture_sprite.bitmap.nil?
    @gesture_sprite.opacity = 255
    @gesture_sprite.bitmap.clear
    current_gesture = recog_mouse_gesture
    color = DRAG_COLOR
    for k in CONFIG.keys
      if equal_gesture?(CONFIG[k][0].clone, current_gesture.clone)
        color = CONFIG[k][1]
      end
    end
    for i in 1...@points.size
      spx = @points[i-1][0]
      spy = @points[i-1][1]
      epx = @points[i][0]
      epy = @points[i][1]
      @gesture_sprite.bitmap.draw_line(spx, spy, epx, epy, color, DRAG_WIDTH)
    end
  end
  
  def recog_mouse_gesture
    @start_point = @points[0]
    t = DRAG_TILE
    result = []
    for i in 0...@points.size
      next if @start_point == @points[i]
      sx, sy = *@start_point
      px, py = *@points[i]
      if sx - px > t && (sy - py).abs < t
        result = result_gesture(result, @points[i], 'left')
      elsif sx - px < -t && (sy - py).abs < t
        result = result_gesture(result, @points[i], 'right')
      elsif sy - py > t && (sx - px).abs < t
        result = result_gesture(result, @points[i], 'up')
      elsif sy - py < -t && (sx - px).abs < t
        result = result_gesture(result, @points[i], 'down')
      elsif sx - px > t && sy - py > t
        result = result_gesture(result, @points[i], 'upleft')
      elsif sx - px < -t && sy - py > t
        result = result_gesture(result, @points[i], 'upright')
      elsif sx - px > t && sy - py < -t
        result = result_gesture(result, @points[i], 'downleft')
      elsif sx - px < -t && sy - py < -t
        result = result_gesture(result, @points[i], 'downright')
      end
    end
    return result
  end
  
  def result_gesture(result, point, d)
    result << d if result[-1] != d
    @start_point = point
    return result
  end
  
  def equal_gesture?(g1, g2)
    g1 == g2
  end
end

#==============================================================================
# ** Scene_Something
#------------------------------------------------------------------------------
#  This class is definition from All Class
#==============================================================================

Mouse_Gesture::ALLOWED_SCENE.each {|kelas| eval "
class #{kelas}
  include Mouse_Gesture
  alias drg_143_upd update unless method_defined?(:drg_143_upd) ||
                                 !method_defined?(:update)
  def update
    drg_143_upd
    update_mouse_gestures
  end
end#"}

#==============================================================================
# ** Bitmap
#==============================================================================

class Bitmap
  unless method_defined?(:draw_line)
    def draw_line(x1, y1, x2, y2, color, line_width = 1) # by exseiken
      cx = x2 - x1
      cy = y2 - y1
      if cx.abs > cy.abs
        #return if cx == 0
        if x2 < x1
          temp = x2 ; x2 = x1 ; x1 = temp
          temp = y2 ; y2 = y1 ; y1 = temp
        end
        for i in 0..cx.abs
          y = y1 + cy * i / cx
          set_pixel(x1 + i, y, color)
          if line_width != 1
            for j in 2..line_width
              if (j & 1) == 0
                set_pixel(x1 + i, y - j / 2, color)
              else
                set_pixel(x1 + i, y + j / 2, color)
              end
            end
          end
        end
      else
        #return if cy == 0
        if y2 < y1
          temp = x2 ; x2 = x1 ; x1 = temp
          temp = y2 ; y2 = y1 ; y1 = temp
        end
        for i in 0..cy.abs
          x = x1 + cx * i / cy
          set_pixel(x, y1 + i, color)
          if line_width != 1
            for j in 2..line_width
              if j & 1
                set_pixel(x - j / 2, y1 + i, color)
              else
                set_pixel(x + j / 2, y1 + i, color)
              end
            end
          end
        end
      end
    end
  end
end

Cualquiera puede editarlo y usarlo como quiera pero se requieren conocimientos de script.
avatar
Wecoc
Administrador
Administrador



Créditos 12087

Gracias : 519

Volver arriba Ir abajo

Re: [XP][VX][Ace] [Herramienta de Scripter][ALFA] Mouse Gesture

Mensaje por rigel2 el 2016-11-02, 07:41

jeje nunca e entendido el sistema de gesture hasta en windows me lia demasiado no tenia idea de que en rpg maker se pudiera hacer esto pero igualmente uno nunca sabe cuando podra usar un script como este asi que sera mejor que lo archive en mi biblioteca de scripts thx por el aporte como siempre genial wecoc
avatar
rigel2
Principiante
Principiante

0/3

Créditos 936

Gracias : 33

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.