Project1

标题: 菜单光标脚本与某个窗口不兼容问题 [打印本页]

作者: czg19970812    时间: 4 天前
标题: 菜单光标脚本与某个窗口不兼容问题
本帖最后由 czg19970812 于 2025-8-27 00:38 编辑

大佬们好,萌新请教一个脚本不兼容的问题 ,具体情况是这样的:光标脚本在其他功能下都能使用(如战斗,菜单下),但是在另外一个脚本窗口下就不能使用了,并导致光标失效。
以下是光标脚本和另外一个不兼容的脚本,求助求助
"光标脚本"
# +++ MOG - Animated Cursor (V1.1) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# Adiciona um cursor animado nos menus de comandos.
#==============================================================================
# Será necessário ter a imagem
#
# Menu_Cursor.png
#
# gravado na pasta GRAPHICS/SYSTEM/
#==============================================================================
# Ativando a animação do cursor
#
# Basta criar uma imagem que tenha a largura com no minimo o dobro de altura da
# imagem do cursor.
#
# EX
# largura 32 pixel (width) altura 32 pixel = 1 frames de animação.(Sem animação)
# largura 64 pixel (width) altura 32 pixel = 2 frames de animação.
# largura 128 pixel (width) altura 32 pixel = 4 frames de animação.
# largura 256 pixel (width) altura 32 pixel = 8 frames de animação
# Etc...
#
# NOTA
# Não há limite para quantidade de frames de animação, se não quiser a animação
# basta criar uma imagem com a altura proporcional a largura da imagem.
#
#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.1 - Correção da posição do cursor na cena de batalha.
#==============================================================================

module MOG_MENU_CURSOR
  #Ativar animação do cursor se movimentando para os lados.
  SIDE_ANIMATION = true
  #Definição da posição do cursor. (Ajustes na posição)
  CURSOR_POSITION = [5,0]
  #Definição da velocidade da animação de frames.
  CURSOR_ANIMATION_SPEED = 6
end

#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System

  attr_accessor :menu_cursor_name

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_menu_cursor_initialize initialize
  def initialize
      mog_menu_cursor_initialize
      @menu_cursor_name = "Menu_Cursor"
  end  

end  

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp

  attr_accessor :menu_cursor   

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_cursor_sprite_initialize initialize
  def initialize
      mog_cursor_sprite_initialize
      @menu_cursor = [false,0,0,0]
  end  

end  

#==============================================================================
# ■ Sprite Cursor
#==============================================================================
class Sprite_Cursor < Sprite

  include MOG_MENU_CURSOR

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  def initialize(viewport = nil , x , y)
      super(viewport)
      @cursor_image = Cache.system($game_system.menu_cursor_name.to_s)
      @frame_max = (@cursor_image.width / @cursor_image.height) rescue 1
      @frame_range = @frame_max > 0 ? (@cursor_image.width  / @frame_max) : 1
      @frame = 0
      @ca_speed = CURSOR_ANIMATION_SPEED
      self.bitmap = Bitmap.new(@frame_range,@frame_range)
      self.z = 10000
      self.opacity = 0
      @cw = self.bitmap.width / 2
      @c_p = [-@cw + CURSOR_POSITION[0],CURSOR_POSITION[1]]
      @mx = [0,0,0]
      refresh_animation(true)
      update_move
  end

  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------   
  def dispose
      self.bitmap.dispose
      self.bitmap = nil
      @cursor_image.dispose
  end  

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      if cursor_visible?
         self.visible = true
         update_move
         refresh_animation(false)
      else   
         self.visible = false
      end  
  end

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  def refresh_animation(start = false)
      @ca_speed += 1
      return if @frame_max == 1 and !start
      return if @ca_speed < CURSOR_ANIMATION_SPEED
      @ca_speed = 0
      self.bitmap.clear
      scr_rect = Rect.new(@frame_range * @frame,0,@frame_range,@frame_range)
      self.bitmap.blt(0,0,@cursor_image, scr_rect)
      @frame += 1
      @frame = 0 if @frame >= @frame_max
  end  

  #--------------------------------------------------------------------------
  # ● Cursor Visible?
  #--------------------------------------------------------------------------   
  def cursor_visible?
      px = $game_temp.menu_cursor[2]
      py = $game_temp.menu_cursor[3]
      return false if $game_temp.menu_cursor[1] == 0
      return false if px < 0 or py < 0 or (px == 0 and py == 0)
      return true
  end  

  #--------------------------------------------------------------------------
  # ● Update Move
  #--------------------------------------------------------------------------   
  def update_move
      self.opacity += 25
      @new_pos = [$game_temp.menu_cursor[2],$game_temp.menu_cursor[3]]
      execute_animation_s
      execute_move(0,self.x, @new_pos[0] + @mx[1] + @c_p[0])
      execute_move(1,self.y, @new_pos[1] + @c_p[1])
  end  

  #--------------------------------------------------------------------------
  # ● Execute Animation S
  #--------------------------------------------------------------------------      
  def execute_animation_s
      return if !SIDE_ANIMATION
      @mx[2] += 1
      return if @mx[2] < 4
      @mx[2] = 0
      @mx[0] += 1
      case @mx[0]
         when 1..7;  @mx[1] += 1            
         when 8..14; @mx[1] -= 1
         else
           @mx[0] = 0
           @mx[1] = 0
      end
  end

  #--------------------------------------------------------------------------
  # ● Execute Move
  #--------------------------------------------------------------------------      
  def execute_move(type,cp,np)
      sp = 5 + ((cp - np).abs / 5)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp if type == 0
      self.y = cp if type == 1
  end  

end

#==============================================================================
# ■ CURSOR_MENU SPRITE
#==============================================================================
module CURSOR_MENU_SPRITE

  #--------------------------------------------------------------------------
  # ● Cursor Sprite Enable
  #--------------------------------------------------------------------------      
  def cursor_sprite_enable
      return if self.index == nil rescue return
      create_cursor_sprite
      update_cursor_sprite
      update_cusor_position
      if !self.active
         $game_temp.menu_cursor[1] -= 1 if $game_temp.menu_cursor[1] > 0
      end
  end

  #--------------------------------------------------------------------------
  # ● Create Cursor Sprite
  #--------------------------------------------------------------------------   
  def create_cursor_sprite
      return if @cursor != nil
      return if $game_temp.menu_cursor[0]
      $game_temp.menu_cursor[0] = true
      reset_cursor_position
      @cursor = Sprite_Cursor.new(nil,x,y)
      @cursor_name = $game_system.menu_cursor_name
  end   

  #--------------------------------------------------------------------------
  # ● Dispose Cursor Sprite
  #--------------------------------------------------------------------------      
  def dispose_cursor_sprite
      return if @cursor == nil
      $game_temp.menu_cursor[0] = false
      reset_cursor_position
      @cursor.dispose
      @cursor = nil
  end  

  #--------------------------------------------------------------------------
  # ● Reset Cursor Position
  #--------------------------------------------------------------------------        
  def reset_cursor_position
      $game_temp.menu_cursor[1] = 0
      $game_temp.menu_cursor[2] = -32
      $game_temp.menu_cursor[3] = -32
  end  

  #--------------------------------------------------------------------------
  # ● Update Cursor
  #--------------------------------------------------------------------------         
  def update_cursor_sprite
      return if @cursor == nil
      @cursor.update
      refresh_cursor_sprite if @cursor_name != $game_system.menu_cursor_name
  end

  #--------------------------------------------------------------------------
  # ● Refresh Cursor Sprite
  #--------------------------------------------------------------------------            
  def refresh_cursor_sprite
      @cursor_name = $game_system.menu_cursor_name
      dispose_cursor_sprite
      create_cursor_sprite
  end  

  #--------------------------------------------------------------------------
  # ● Update Cursor Position
  #--------------------------------------------------------------------------         
  def update_cusor_position
      return if !can_update_cursor_position?
      x_v = [0,0]
      if SceneManager.scene_is?(Scene_Battle)
          if self.viewport != nil
             x_v = [-self.viewport.ox, self.viewport.rect.y]
          end
      end      
      x_e = (self.cursor_rect.x + self.x) - self.ox
      $game_temp.menu_cursor[2] = x_e + x_v[0]
      y_e = (self.cursor_rect.y + self.y + self.cursor_rect.height / 2) - self.oy
      $game_temp.menu_cursor[3] = y_e + x_v[1]
      $game_temp.menu_cursor[1] = 13
   end

  #--------------------------------------------------------------------------
  # ● Can Update Cursor
  #--------------------------------------------------------------------------            
   def can_update_cursor_position?
       return false if !self.active     
       return false if self.index < 0
       return false if !self.visible
       return true
   end  

end

#==============================================================================
# ■ Window Base
#==============================================================================
class Window_Base < Window
  include CURSOR_MENU_SPRITE

  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------              
  alias mog_menu_cursor_base_dispose dispose
  def dispose
      mog_menu_cursor_base_dispose
      dispose_cursor_sprite
  end  

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------              
  alias mog_cursor_update update
  def update
      mog_cursor_update
      cursor_sprite_enable
  end   


另外一个不兼容的脚本:
[pre lang="ruby" file="不兼容的脚本"]class Window_HS < Window_Command
  def initialize
    super(0,0)
  end
  def item_height
    line_height + 8
  end
  def window_height
    visible_line_number * item_height + standard_padding * 2
  end
  def draw_item(index)
    actor =  @list[index][:ext]
    if actor == nil
      draw_text(0, 5, 100, line_height, "全体")
      return
    end
    bitmap = Cache.character("#{actor.character_name}")
    self.contents.blt(0, (index)*32, bitmap,Rect.new(0,0,32,32),255)
    draw_actor_name(actor, x+35, (index)*32+5, 100)
  end
  def make_command_list
    add_command("全部", :all_actor)
    for i in 1...Tank::TANK_ACTOR.size
      next if $game_party.is_lease_tank(Tank::TANK_ACTOR)
      if $game_party.tank.get and $game_party.tank.stop
        id = Tank::TANK_ACTOR
        actor = $game_actors[id]
        add_command("#{actor.name}", :ok,true , actor)
      end
    end
  end
end[/pre]
end

$mog_rgss3_animated_cursor = true[/pre]

求求了大佬们


作者: czg19970812    时间: 4 天前
解决了,换个兼容的脚本




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1