脚本里找个位置,最好就是第一个 
module  Math 
  def  self .f ( x) 
    return  self .f ( x+1 )  if  x < 0 
    return  self .f ( x-1 )  if  x > 2 
    ( x-1 ) **2 
  end 
end 
class  Window_Base
  #-------------------------------------------------------------------------- 
  # ● 移动到 
  #-------------------------------------------------------------------------- 
  def  move_to( x, y,duration, opa=nil ) 
    @old_x  = self .x 
    @old_y  = self .y 
    @target_x  = ( x ? x : self .x ) 
    @target_y  = ( y ? y : self .y ) 
    @target_opa  = ( opa ? opa : @target_opa ) 
    @old_opa  = self .opacity 
    @duration  = duration
    @duration_full  = duration.to_f 
  end 
  #-------------------------------------------------------------------------- 
  # ● 刷新移动 
  #-------------------------------------------------------------------------- 
  def  move_update
    return  true  if  @duration .nil ? or  @duration  <= 0 
    @duration  -= 1 
    var = 1 -Math .f ( @duration/@duration_full+1 ) 
    self .x  = ( @old_x + ( @target_x-@old_x)  *var+0.5 ) .to_i 
    self .y  = ( @old_y + ( @target_y-@old_y)  *var+0.5 ) .to_i 
    self .opacity  = @old_opa  + ( @target_opa - @old_opa ) *var if  @target_opa 
    self .contents_opacity  = self .opacity 
    false 
  end 
end 
module  Math 
 
  def  self .f ( x) 
 
    return  self .f ( x+1 )  if  x < 0 
 
    return  self .f ( x-1 )  if  x > 2 
 
    ( x-1 ) **2 
 
  end 
 
end 
 
class  Window_Base
 
  #-------------------------------------------------------------------------- 
 
  # ● 移动到 
 
  #-------------------------------------------------------------------------- 
 
  def  move_to( x, y,duration, opa=nil ) 
 
    @old_x  = self .x 
 
    @old_y  = self .y 
 
    @target_x  = ( x ? x : self .x ) 
 
    @target_y  = ( y ? y : self .y ) 
 
    @target_opa  = ( opa ? opa : @target_opa ) 
 
    @old_opa  = self .opacity 
 
    @duration  = duration
 
    @duration_full  = duration.to_f 
 
  end 
 
  #-------------------------------------------------------------------------- 
 
  # ● 刷新移动 
 
  #-------------------------------------------------------------------------- 
 
  def  move_update
 
    return  true  if  @duration .nil ? or  @duration  <= 0 
 
    @duration  -= 1 
 
    var = 1 -Math .f ( @duration/@duration_full+1 ) 
 
    self .x  = ( @old_x + ( @target_x-@old_x)  *var+0.5 ) .to_i 
 
    self .y  = ( @old_y + ( @target_y-@old_y)  *var+0.5 ) .to_i 
 
    self .opacity  = @old_opa  + ( @target_opa - @old_opa ) *var if  @target_opa 
 
    self .contents_opacity  = self .opacity 
 
    false 
 
  end 
 
end 
 
 
找到Scene_Map的update方法,里面加一句update_diy_windows 
再在main前加上: 
class  Scene_Map
  def  update_diy_windows
    @diy_windows  ||= [ ] 
    @diy_windows .each { |wnd|wnd.move_update ;wnd.update } 
  end 
  def  add_diy_window( wnd) 
    @diy_windows  ||= [ ] 
    @diy_windows  << wnd
  end 
  def  dispose_diy_window( wnd) 
    @diy_windows  ||= [ ] 
    @diy_windows .delete ( wnd) 
    wnd.dispose 
  end 
end 
class  Scene_Map
 
  def  update_diy_windows
 
    @diy_windows  ||= [ ] 
 
    @diy_windows .each { |wnd|wnd.move_update ;wnd.update } 
 
  end 
 
  def  add_diy_window( wnd) 
 
    @diy_windows  ||= [ ] 
 
    @diy_windows  << wnd
 
  end 
 
  def  dispose_diy_window( wnd) 
 
    @diy_windows  ||= [ ] 
 
    @diy_windows .delete ( wnd) 
 
    wnd.dispose 
 
  end 
 
end 
 
 
 
 
使用方法,如lz写得那样,但是本脚本只在地图上有效,其他地方(如战斗时)使用会出错. 
$test = Window_Base.new(20, 20, 800, 48) 
 $test.contents.draw_text(0, 0, 800, 30, "测试", 0) 
SceneManager.scene.add_diy_window($test) 
$test.opacity = 0 
$test.contents_opacity = 0 
$test.move_to(nil, nil, 300, 255) 
 
 
就能在300内将窗口从透明变为不透明。 
 
$test.move_to(500, 20, 30, 255) 
 
就能在300内将窗口从原位置移动到(500, 20)透明变为不透明。 
$test.move_to(500, nil, 30, 255) 
$test.move_to(nil, 500, 30, 255) 
这个lz可以试试 
 
释放窗口使用: 
SceneManager.scene.dispose_diy_window($test) 
就行,没试过,可能有错