设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2084|回复: 6
打印 上一主题 下一主题

[已经解决] 光标控制

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
帖子
274
跳转到指定楼层
1
发表于 2012-7-5 15:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我设置
横的  @column_max = 2   是 2排
竖的  @item_max = 4       是 4 行
请问怎么控制  光标 上下左右移动
  1. class Window_44 < Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #     width    : 窗口的宽
  5.   #     commands : 命令字符串序列
  6.   #--------------------------------------------------------------------------
  7. def initialize
  8.    
  9.     super(80, 48, 600, 600)
  10.     self.contents = Bitmap.new(600, 600)
  11.     self.opacity = 100
  12.   
  13.     #refresh
  14.     @item_max = 4
  15.     @column_max = 2
  16.     self.index = 0
  17.    
  18.   end
  19.   #--------------------------------------------------------------------------
  20. #--------------------------------------------------------------------------

  21.   #--------------------------------------------------------------------------
  22.   
  23.   # ● 刷新
  24.   #     index : 项目编号
  25.   #--------------------------------------------------------------------------
  26.   #--------------------------------------------------------------------------
  27.   # ● 更新光标举行
  28.   #--------------------------------------------------------------------------
  29.   def update_cursor_rect
  30.     # 光标位置不满 0 的情况下
  31.     if @index < 0
  32.       self.cursor_rect.empty
  33.       return
  34.     end
  35.     # 获取当前的行
  36.     row = @index / @column_max
  37.     # 当前行被显示开头行前面的情况下
  38.     if row < self.top_row
  39.       # 从当前行向开头行滚动
  40.       self.top_row = row
  41.     end
  42.     # 当前行被显示末尾行之后的情况下
  43.     if row > self.top_row + (self.page_row_max - 1)
  44.       # 从当前行向末尾滚动
  45.       self.top_row = row - (self.page_row_max - 1)
  46.     end
  47.     # 计算光标的宽
  48.    
  49.     # 计算光标坐标
  50.    
  51.        x = @index % @column_max * 30 + 20
  52.        y = @index / @column_max * 30 + 146
  53.      
  54.   
  55.     # 更新国标矩形
  56.     self.cursor_rect.set(x, y, 65, 50)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 刷新画面
  60.   #--------------------------------------------------------------------------
  61.   def update
  62.   
  63.     # 可以移动光标的情况下
  64.     if self.active and @item_max > 0 and @index >= 0
  65.        # 方向键下被按下的情况下
  66.       if Input.repeat?(Input::DOWN) and @index<18
  67.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  68.         # 或光标位置在(项目数-列数)之前的情况下
  69.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
  70.            @index < @item_max - @column_max
  71.           # 光标向下移动
  72.           $game_system.se_play($data_system.cursor_se)
  73.           @index = (@index + @column_max) % @item_max
  74.         end
  75.       end
  76.       # 方向键上被按下的情况下
  77.       if Input.repeat?(Input::UP)
  78.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  79.         # 或光标位置在列之后的情况下
  80.         if (@column_max == 1 and Input.trigger?(Input::UP)) or
  81.            @index >= @column_max
  82.           # 光标向上移动
  83.           $game_system.se_play($data_system.cursor_se)
  84.           @index = (@index - @column_max + @item_max) % @item_max
  85.         end
  86.       end
  87.       if Input.repeat?(Input::RIGHT) or
  88.         @index <= @column_max
  89.         $game_system.se_play($data_system.cursor_se)
  90.         @index = (@index - @column_max + 10) % @item_max
  91.       end
  92.       
  93.       
  94.       
  95.       
  96.       
  97.       
  98.       
  99.       

  100.     end
  101.     # 刷新帮助文本 (update_help 定义了继承目标)
  102.     if self.active and @help_window != nil
  103.       update_help
  104.     end
  105.     # 刷新光标矩形
  106.     update_cursor_rect
  107.   end

  108. end
复制代码

Lv3.寻梦者

双子人

梦石
0
星屑
3185
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

2
发表于 2012-7-5 20:13:23 | 只看该作者
本帖最后由 hys111111 于 2012-7-5 20:15 编辑
  1. class Window_44 < Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #     width    : 窗口的宽
  5.   #     commands : 命令字符串序列
  6.   #--------------------------------------------------------------------------
  7. def initialize
  8.    
  9.     super(80, 48, 600, 600)
  10.     self.contents = Bitmap.new(600, 600)
  11.     self.opacity = 100
  12.   
  13.     self.active = true
  14.     #refresh
  15.     @item_max = 4
  16.     @column_max = 2
  17.     self.index = 0
  18.    
  19.   end
  20.   #--------------------------------------------------------------------------
  21. #--------------------------------------------------------------------------

  22.   #--------------------------------------------------------------------------
  23.   
  24.   # ● 刷新
  25.   #     index : 项目编号
  26.   #--------------------------------------------------------------------------
  27.   #--------------------------------------------------------------------------
  28.   # ● 更新光标举行
  29.   #--------------------------------------------------------------------------
  30.   def update_cursor_rect
  31.     # 光标位置不满 0 的情况下
  32.     if @index < 0
  33.       self.cursor_rect.empty
  34.       return
  35.     end
  36.     # 获取当前的行
  37.     row = @index / @column_max
  38.     # 当前行被显示开头行前面的情况下
  39.     if row < self.top_row
  40.       # 从当前行向开头行滚动
  41.       self.top_row = row
  42.     end
  43.     # 当前行被显示末尾行之后的情况下
  44.     if row > self.top_row + (self.page_row_max - 1)
  45.       # 从当前行向末尾滚动
  46.       self.top_row = row - (self.page_row_max - 1)
  47.     end
  48.     # 计算光标的宽
  49.    
  50.     # 计算光标坐标
  51.    
  52.        x = @index % @column_max * 30 + 20
  53.        y = @index / @column_max * 30 + 146
  54.      
  55.   
  56.     # 更新国标矩形
  57.     self.cursor_rect.set(x, y, 65, 50)
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 刷新画面
  61.   #--------------------------------------------------------------------------
  62.   def update
  63.       super
  64.     # 可以移动光标的情况下
  65.     if self.active and @item_max > 0 and @index >= 0
  66.        # 方向键下被按下的情况下
  67.       if Input.repeat?(Input::DOWN) and @index<18
  68.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  69.         # 或光标位置在(项目数-列数)之前的情况下
  70.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
  71.            @index < @item_max - @column_max
  72.           # 光标向下移动
  73.           $game_system.se_play($data_system.cursor_se)
  74.           @index = (@index + @column_max) % @item_max
  75.         end
  76.       end
  77.       # 方向键上被按下的情况下
  78.       if Input.repeat?(Input::UP)
  79.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  80.         # 或光标位置在列之后的情况下
  81.         if (@column_max == 1 and Input.trigger?(Input::UP)) or
  82.            @index >= @column_max
  83.           # 光标向上移动
  84.           $game_system.se_play($data_system.cursor_se)
  85.           @index = (@index - @column_max + @item_max) % @item_max
  86.         end
  87.       end
  88.       if Input.repeat?(Input::RIGHT) or
  89.         @index <= @column_max
  90.         $game_system.se_play($data_system.cursor_se)
  91.         @index = (@index - @column_max + 10) % @item_max
  92.       end
  93.       if Input.repeat?(Input::LEFT) or
  94.         @index >= @column_max
  95.         $game_system.se_play($data_system.cursor_se)
  96.         @index = (@index + @column_max + 10) % @item_max
  97.       end
  98.       
  99.       
  100.       
  101.       
  102.       
  103.       
  104.       

  105.     end
  106.     # 刷新帮助文本 (update_help 定义了继承目标)
  107.     if self.active and @help_window != nil
  108.       update_help
  109.     end
  110.     # 刷新光标矩形
  111.     update_cursor_rect
  112.   end

  113. end
复制代码
完成
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
帖子
274
3
 楼主| 发表于 2012-7-6 21:08:17 | 只看该作者
hys111111 发表于 2012-7-5 20:13
完成

请问下  我 Window_44.new调用没反应  是为什么

点评

我发了个范例 在下面 麻烦你看下好吗  发表于 2012-7-9 15:03
@window_44.dispose是放在 Scene_Map 里吗 @window_44.update我放在他 def update下面了 可是我用事件调用 我还没按键光标就一直跑到下面去了  发表于 2012-7-9 14:55
然后执行的Scene后面要加@window_44.dispose和update啊  发表于 2012-7-7 07:37
@window_44 = Window_44.new  发表于 2012-7-7 07:37
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2012-7-4
帖子
6
4
发表于 2012-7-8 12:01:12 | 只看该作者
#==============================================================================
$ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
$GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
$ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
$GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
$Window_HWND = $GetActiveWindow.call
$GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
#$FindWindow = Win32API.new("user32", "FindWindow", 'pp', 'i')
#$HookStart  = Win32API.new("mouse_hook.dll", "HookStart", 'i', nil)
#$HookEnd  = Win32API.new("mouse_hook.dll", "HookEnd", nil, nil)
#$GetMouseStatus  = Win32API.new("mouse_hook.dll", "GetMouseStatus", 'i', 'i')
#$Window_HWND = $FindWindow.call(nil, 'mousetry')

module Mouse   
LEFT = 0x01
RIGHT = 0x02

def self.init(sprite = nil)
#   $HookStart.call($Window_HWND)
   $ShowCursor.call(0)
   
   @show_cursor = false
   
   @mouse_sprite = Sprite.new
   @mouse_sprite.z = 99999
   @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/001-Weapon01.png')
   #@mouse_sprite.bitmap.fill_rect(Rect.new(0, 0, 32, 32), Color.new(0, 0, 0))

   @left_press = false
   @right_press = false
   @left_trigger = false
   @right_trigger = false
   @left_repeat = false
   @right_repeat = false
   @click_lock = false
   
   update
end
def self.exit
   @mouse_sprite.bitmap.dispose
   @mouse_sprite.dispose
   @show_cursor = true
#    $HookEnd.call
   $ShowCursor.call(1)
end
def self.mouse_debug
   return @mouse_debug.bitmap
end
def self.update
   left_down = $GetKeyState.call(0x01)
   right_down = $GetKeyState.call(0x02)
   
   @click_lock = false
   mouse_x, mouse_y = self.get_mouse_pos
   if @mouse_sprite != nil
     @mouse_sprite.x = mouse_x
     @mouse_sprite.y = mouse_y
   end
   if left_down[7] == 1
     @left_repeat = (not @left_repeat)
     @left_trigger = (not @left_press)
     @left_press = true
   else
     @left_press = false
     @left_trigger = false
     @left_repeat = false
   end
   if right_down[7] == 1
     @right_repeat = (not @right_repeat)
     @right_trigger = (not @right_press)
     @right_press = true
   else
     @right_press = false
     @right_trigger = false
     @right_repeat = false
   end
end
def self.get_mouse_pos
   point_var = [0, 0].pack('ll')
   if $GetCursorPos.call(point_var) != 0
     if $ScreenToClient.call($Window_HWND, point_var) != 0
       x, y = point_var.unpack('ll')
       if (x < 0) or (x > 10000) then x = 0 end
       if (y < 0) or (y > 10000) then y = 0 end
       if x > 640 then x = 640 end
       if y > 480 then y = 480 end
       return x, y
     else
       return 0, 0
     end
   else
     return 0, 0
   end
end
def self.press?(mouse_code)
   if mouse_code == LEFT
     if @click_lock
       return false
     else
       return @left_press
     end
   elsif mouse_code == RIGHT
     return @right_press
   else
     return false
   end
end
def self.trigger?(mouse_code)
   if mouse_code == LEFT
     if @click_lock
       return false
     else
       return @left_trigger
     end
   elsif mouse_code == RIGHT
     return @right_trigger
   else
     return false
   end
end
def self.repeat?(mouse_code)
   if mouse_code == LEFT
     if @click_lock
       return false
     else
       return @left_repeat
     end
   elsif mouse_code == RIGHT
     return @right_repeat
   else
     return false
   end
end
def self.click_lock?
   return @click_lock
end
def self.click_lock
   @click_lock = true
end
def self.click_unlock
   @click_lock = false
end
end
module Input
if @self_update == nil
   @self_update = method('update')
   @self_press = method('press?')
   @self_trigger = method('trigger?')
   @self_repeat = method('repeat?')
end
def self.update
   @self_update.call
   Mouse.update
end
def self.press?(key_code)
   if @self_press.call(key_code)
     return true
   end
   if key_code == C
     return Mouse.press?(Mouse::LEFT)
   elsif key_code == B
     return Mouse.press?(Mouse::RIGHT)
   else
     return @self_press.call(key_code)
   end
end
def self.trigger?(key_code)
   if @self_trigger.call(key_code)
     return true
   end
   if key_code == C
     return Mouse.trigger?(Mouse::LEFT)
   elsif key_code == B
     return Mouse.trigger?(Mouse::RIGHT)
   else
     return @self_trigger.call(key_code)
   end
end
def self.repeat?(key_code)
   if @self_repeat.call(key_code)
     return true
   end
   if key_code == C
     return Mouse.repeat?(Mouse::LEFT)
   elsif key_code == B
     return Mouse.repeat?(Mouse::RIGHT)
   else
     return @self_repeat.call(key_code)
   end
end
end
class Window_Selectable
if @self_alias == nil
   alias self_update update
   @self_alias = true
end
def update
   #self.cursor_rect.empty
   self_update
   if self.active and @item_max > 0
     index_var = @index
     tp_index = @index
     mouse_x, mouse_y = Mouse.get_mouse_pos
     mouse_not_in_rect = true
     for i in 0...@item_max
       @index = i
       update_cursor_rect
       top_x = self.cursor_rect.x + self.x + 16
       top_y = self.cursor_rect.y + self.y + 16
       bottom_x = top_x + self.cursor_rect.width
       bottom_y = top_y + self.cursor_rect.height
       if (mouse_x > top_x) and (mouse_y > top_y) and
          (mouse_x < bottom_x) and (mouse_y < bottom_y)
         mouse_not_in_rect = false
         if tp_index != @index
           tp_index = @index
           $game_system.se_play($data_system.cursor_se)
         end
         break
       end
     end
     if mouse_not_in_rect
       @index = index_var
       update_cursor_rect
       Mouse.click_lock
     else
       Mouse.click_unlock                 
     end
   end
end
end
class Window_NameInput
if @self_alias == nil
   alias self_update update
   @self_alias = true
end
def update
   #self.cursor_rect.empty
   self_update
   if self.active
     index_var = @index
     mouse_x, mouse_y = Mouse.get_mouse_pos
     mouse_not_in_rect = true
     for i in (0...CHARACTER_TABLE.size).to_a.push(180)
       @index = i
       update_cursor_rect
       top_x = self.cursor_rect.x + self.x + 16
       top_y = self.cursor_rect.y + self.y + 16
       bottom_x = top_x + self.cursor_rect.width
       bottom_y = top_y + self.cursor_rect.height
       #
       if (mouse_x > top_x) and (mouse_y > top_y) and
          (mouse_x < bottom_x) and (mouse_y < bottom_y)
         mouse_not_in_rect = false
         break
       end
     end
     if mouse_not_in_rect
       @index = index_var
       update_cursor_rect
       Mouse.click_lock
     else
       Mouse.click_unlock
     end
   end
end  
end
class Window_InputNumber
if @self_alias == nil
   alias self_update update
   @self_alias = true
end
def update
   #self.cursor_rect.empty
   self_update
   mouse_x, mouse_y = Mouse.get_mouse_pos
   if self.active and @digits_max > 0
     index_var = @index
     mouse_not_in_rect = true
     for i in 0...@digits_max
       @index = i
       update_cursor_rect
       top_x = self.cursor_rect.x + self.x + 16
       bottom_x = top_x + self.cursor_rect.width
       #
       if (mouse_x > top_x) and (mouse_x < bottom_x)
         mouse_not_in_rect = false
         break
       end
     end
     if mouse_not_in_rect
       @index = index_var
       update_cursor_rect
       Mouse.click_lock
     else
       Mouse.click_unlock
     end
   end
   if @last_mouse_y == nil
     @last_mouse_y = mouse_y
   end
   check_pos = (@last_mouse_y - mouse_y).abs
   if check_pos > 10
     $game_system.se_play($data_system.cursor_se)
     place = 10 ** (@digits_max - 1 - @index)
     n = @number / place % 10
     @number -= n * place
     n = (n + 1) % 10 if mouse_y < @last_mouse_y
     n = (n + 9) % 10 if mouse_y > @last_mouse_y
     @number += n * place
     refresh
     @last_mouse_y = mouse_y
   end
end
end
class Scene_File
if @self_alias == nil
   alias self_update update
   @self_alias = true
end
def update
   mouse_x, mouse_y = Mouse.get_mouse_pos
   Mouse.click_lock
   idx = 0
   for i in @savefile_windows
     top_x = i.x + 16
     top_y = i.y + 16
     bottom_x = top_x + i.width
     bottom_y = top_y + i.height
     if (mouse_x > top_x) and (mouse_y > top_y) and
        (mouse_x < bottom_x) and (mouse_y < bottom_y)
       i.selected = true
       if @file_index != idx  
         @file_index = idx
         $game_system.se_play($data_system.cursor_se)
       end            
       Mouse.click_unlock
     else
       i.selected = false
     end
     idx += 1
   end
   self_update
end
end
class Arrow_Enemy
if @self_alias == nil
   alias self_update update
   @self_alias = true
end
def update
   mouse_x, mouse_y = Mouse.get_mouse_pos
   idx = 0
   for i in $game_troop.enemies do
     if i.exist?
       top_x = i.screen_x - self.ox
       top_y = i.screen_y - self.oy
       bottom_x = top_x + self.src_rect.width
       bottom_y = top_y + self.src_rect.height
       if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
          (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
         if @index != idx
           $game_system.se_play($data_system.cursor_se)
           @index = idx
         end
       end
     end
     idx += 1
   end
   self_update
end
end
class Arrow_Actor
if @self_alias == nil
   alias self_update update
   @self_alias = true
end
def update
   mouse_x, mouse_y = Mouse.get_mouse_pos
   idx = 0
   for i in $game_party.actors do
     if i.exist?
       top_x = i.screen_x - self.ox
       top_y = i.screen_y - self.oy
       bottom_x = top_x + self.src_rect.width
       bottom_y = top_y + self.src_rect.height
       if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
          (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
         if @index != idx
           $game_system.se_play($data_system.cursor_se)
           @index = idx
         end
       end
     end
     idx += 1
   end
   self_update
end
end
class Game_Player
if @self_alias == nil
   alias self_update update
   @self_alias = true
end
def update
   mouse_x, mouse_y = Mouse.get_mouse_pos
   if Mouse.trigger?(Mouse::LEFT)
     unless $game_system.map_interpreter.running? or
            @move_route_forcing or $game_temp.message_window_showing
       @mouse_sta = 1
       trg_x = (mouse_x + $game_map.display_x / 4) / 32
       trg_y = (mouse_y + $game_map.display_y / 4) / 32
     end
   end
   if @mouse_sta != nil and @mouse_sta == 1
     unless moving? or $game_system.map_interpreter.running? or
            @move_route_forcing or $game_temp.message_window_showing
       if @paths_id != nil and @paths != nil and @paths_id <= @paths.size
         case @paths[@paths_id]
         when 6
           @last_move_x = true
           move_right
           @paths_id += 1
           @direction = 6
         when 4
           @last_move_x = true
           move_left
           @paths_id += 1
           @direction = 4
         when 2
           @last_move_x = false
           move_down
           @direction = 2
           @paths_id += 1
         when 8
           @last_move_x = false
           move_up
           @direction = 8
           @paths_id += 1
            
         when 1
           @last_move_x = false
           move_lower_left
           @direction = 1
           @paths_id += 1
         when 3
           @last_move_x = false
           move_lower_right
           @direction = 3
           @paths_id += 1
         when 7
           @last_move_x = false
           move_upper_left
           @direction = 7
           @paths_id += 1
         when 9
           @last_move_x = false
           move_upper_right
           @direction = 9
           @paths_id += 1
         end
       else
         @mouse_sta = 0
       end
     end
   end
   self_update
end
end
Mouse.init
END { Mouse.exit }
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

5
发表于 2012-7-9 14:33:19 | 只看该作者
  1. #==============================================================================
  2. $ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
  3. $GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
  4. $ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
  5. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  6. $Window_HWND = $GetActiveWindow.call
  7. $GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
  8. #$FindWindow = Win32API.new("user32", "FindWindow", 'pp', 'i')
  9. #$HookStart  = Win32API.new("mouse_hook.dll", "HookStart", 'i', nil)
  10. #$HookEnd  = Win32API.new("mouse_hook.dll", "HookEnd", nil, nil)
  11. #$GetMouseStatus  = Win32API.new("mouse_hook.dll", "GetMouseStatus", 'i', 'i')
  12. #$Window_HWND = $FindWindow.call(nil, 'mousetry')

  13. module Mouse   
  14. LEFT = 0x01
  15. RIGHT = 0x02

  16. def self.init(sprite = nil)
  17. #   $HookStart.call($Window_HWND)
  18.    $ShowCursor.call(0)
  19.    
  20.    @show_cursor = false
  21.    
  22.    @mouse_sprite = Sprite.new
  23.    @mouse_sprite.z = 99999
  24.    @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/001-Weapon01.png')
  25.    #@mouse_sprite.bitmap.fill_rect(Rect.new(0, 0, 32, 32), Color.new(0, 0, 0))

  26.    @left_press = false
  27.    @right_press = false
  28.    @left_trigger = false
  29.    @right_trigger = false
  30.    @left_repeat = false
  31.    @right_repeat = false
  32.    @click_lock = false
  33.    
  34.    update
  35. end
  36. def self.exit
  37.    @mouse_sprite.bitmap.dispose
  38.    @mouse_sprite.dispose
  39.    @show_cursor = true
  40. #    $HookEnd.call
  41.    $ShowCursor.call(1)
  42. end
  43. def self.mouse_debug
  44.    return @mouse_debug.bitmap
  45. end
  46. def self.update
  47.    left_down = $GetKeyState.call(0x01)
  48.    right_down = $GetKeyState.call(0x02)
  49.    
  50.    @click_lock = false
  51.    mouse_x, mouse_y = self.get_mouse_pos
  52.    if @mouse_sprite != nil
  53.      @mouse_sprite.x = mouse_x
  54.      @mouse_sprite.y = mouse_y
  55.    end
  56.    if left_down[7] == 1
  57.      @left_repeat = (not @left_repeat)
  58.      @left_trigger = (not @left_press)
  59.      @left_press = true
  60.    else
  61.      @left_press = false
  62.      @left_trigger = false
  63.      @left_repeat = false
  64.    end
  65.    if right_down[7] == 1
  66.      @right_repeat = (not @right_repeat)
  67.      @right_trigger = (not @right_press)
  68.      @right_press = true
  69.    else
  70.      @right_press = false
  71.      @right_trigger = false
  72.      @right_repeat = false
  73.    end
  74. end
  75. def self.get_mouse_pos
  76.    point_var = [0, 0].pack('ll')
  77.    if $GetCursorPos.call(point_var) != 0
  78.      if $ScreenToClient.call($Window_HWND, point_var) != 0
  79.        x, y = point_var.unpack('ll')
  80.        if (x < 0) or (x > 10000) then x = 0 end
  81.        if (y < 0) or (y > 10000) then y = 0 end
  82.        if x > 640 then x = 640 end
  83.        if y > 480 then y = 480 end
  84.        return x, y
  85.      else
  86.        return 0, 0
  87.      end
  88.    else
  89.      return 0, 0
  90.    end
  91. end
  92. def self.press?(mouse_code)
  93.    if mouse_code == LEFT
  94.      if @click_lock
  95.        return false
  96.      else
  97.        return @left_press
  98.      end
  99.    elsif mouse_code == RIGHT
  100.      return @right_press
  101.    else
  102.      return false
  103.    end
  104. end
  105. def self.trigger?(mouse_code)
  106.    if mouse_code == LEFT
  107.      if @click_lock
  108.        return false
  109.      else
  110.        return @left_trigger
  111.      end
  112.    elsif mouse_code == RIGHT
  113.      return @right_trigger
  114.    else
  115.      return false
  116.    end
  117. end
  118. def self.repeat?(mouse_code)
  119.    if mouse_code == LEFT
  120.      if @click_lock
  121.        return false
  122.      else
  123.        return @left_repeat
  124.      end
  125.    elsif mouse_code == RIGHT
  126.      return @right_repeat
  127.    else
  128.      return false
  129.    end
  130. end
  131. def self.click_lock?
  132.    return @click_lock
  133. end
  134. def self.click_lock
  135.    @click_lock = true
  136. end
  137. def self.click_unlock
  138.    @click_lock = false
  139. end
  140. end
  141. module Input
  142. if @self_update == nil
  143.    @self_update = method('update')
  144.    @self_press = method('press?')
  145.    @self_trigger = method('trigger?')
  146.    @self_repeat = method('repeat?')
  147. end
  148. def self.update
  149.    @self_update.call
  150.    Mouse.update
  151. end
  152. def self.press?(key_code)
  153.    if @self_press.call(key_code)
  154.      return true
  155.    end
  156.    if key_code == C
  157.      return Mouse.press?(Mouse::LEFT)
  158.    elsif key_code == B
  159.      return Mouse.press?(Mouse::RIGHT)
  160.    else
  161.      return @self_press.call(key_code)
  162.    end
  163. end
  164. def self.trigger?(key_code)
  165.    if @self_trigger.call(key_code)
  166.      return true
  167.    end
  168.    if key_code == C
  169.      return Mouse.trigger?(Mouse::LEFT)
  170.    elsif key_code == B
  171.      return Mouse.trigger?(Mouse::RIGHT)
  172.    else
  173.      return @self_trigger.call(key_code)
  174.    end
  175. end
  176. def self.repeat?(key_code)
  177.    if @self_repeat.call(key_code)
  178.      return true
  179.    end
  180.    if key_code == C
  181.      return Mouse.repeat?(Mouse::LEFT)
  182.    elsif key_code == B
  183.      return Mouse.repeat?(Mouse::RIGHT)
  184.    else
  185.      return @self_repeat.call(key_code)
  186.    end
  187. end
  188. end
  189. class Window_Selectable
  190. if @self_alias == nil
  191.    alias self_update update
  192.    @self_alias = true
  193. end
  194. def update
  195.    #self.cursor_rect.empty
  196.    self_update
  197.    if self.active and @item_max > 0
  198.      index_var = @index
  199.      tp_index = @index
  200.      mouse_x, mouse_y = Mouse.get_mouse_pos
  201.      mouse_not_in_rect = true
  202.      for i in 0...@item_max
  203.        @index = i
  204.        update_cursor_rect
  205.        top_x = self.cursor_rect.x + self.x + 16
  206.        top_y = self.cursor_rect.y + self.y + 16
  207.        bottom_x = top_x + self.cursor_rect.width
  208.        bottom_y = top_y + self.cursor_rect.height
  209.        if (mouse_x > top_x) and (mouse_y > top_y) and
  210.           (mouse_x < bottom_x) and (mouse_y < bottom_y)
  211.          mouse_not_in_rect = false
  212.          if tp_index != @index
  213.            tp_index = @index
  214.            $game_system.se_play($data_system.cursor_se)
  215.          end
  216.          break
  217.        end
  218.      end
  219.      if mouse_not_in_rect
  220.        @index = index_var
  221.        update_cursor_rect
  222.        Mouse.click_lock
  223.      else
  224.        Mouse.click_unlock                 
  225.      end
  226.    end
  227. end
  228. end
  229. class Window_NameInput
  230. if @self_alias == nil
  231.    alias self_update update
  232.    @self_alias = true
  233. end
  234. def update
  235.    #self.cursor_rect.empty
  236.    self_update
  237.    if self.active
  238.      index_var = @index
  239.      mouse_x, mouse_y = Mouse.get_mouse_pos
  240.      mouse_not_in_rect = true
  241.      for i in (0...CHARACTER_TABLE.size).to_a.push(180)
  242.        @index = i
  243.        update_cursor_rect
  244.        top_x = self.cursor_rect.x + self.x + 16
  245.        top_y = self.cursor_rect.y + self.y + 16
  246.        bottom_x = top_x + self.cursor_rect.width
  247.        bottom_y = top_y + self.cursor_rect.height
  248.        #
  249.        if (mouse_x > top_x) and (mouse_y > top_y) and
  250.           (mouse_x < bottom_x) and (mouse_y < bottom_y)
  251.          mouse_not_in_rect = false
  252.          break
  253.        end
  254.      end
  255.      if mouse_not_in_rect
  256.        @index = index_var
  257.        update_cursor_rect
  258.        Mouse.click_lock
  259.      else
  260.        Mouse.click_unlock
  261.      end
  262.    end
  263. end  
  264. end
  265. class Window_InputNumber
  266. if @self_alias == nil
  267.    alias self_update update
  268.    @self_alias = true
  269. end
  270. def update
  271.    #self.cursor_rect.empty
  272.    self_update
  273.    mouse_x, mouse_y = Mouse.get_mouse_pos
  274.    if self.active and @digits_max > 0
  275.      index_var = @index
  276.      mouse_not_in_rect = true
  277.      for i in 0...@digits_max
  278.        @index = i
  279.        update_cursor_rect
  280.        top_x = self.cursor_rect.x + self.x + 16
  281.        bottom_x = top_x + self.cursor_rect.width
  282.        #
  283.        if (mouse_x > top_x) and (mouse_x < bottom_x)
  284.          mouse_not_in_rect = false
  285.          break
  286.        end
  287.      end
  288.      if mouse_not_in_rect
  289.        @index = index_var
  290.        update_cursor_rect
  291.        Mouse.click_lock
  292.      else
  293.        Mouse.click_unlock
  294.      end
  295.    end
  296.    if @last_mouse_y == nil
  297.      @last_mouse_y = mouse_y
  298.    end
  299.    check_pos = (@last_mouse_y - mouse_y).abs
  300.    if check_pos > 10
  301.      $game_system.se_play($data_system.cursor_se)
  302.      place = 10 ** (@digits_max - 1 - @index)
  303.      n = @number / place % 10
  304.      @number -= n * place
  305.      n = (n + 1) % 10 if mouse_y < @last_mouse_y
  306.      n = (n + 9) % 10 if mouse_y > @last_mouse_y
  307.      @number += n * place
  308.      refresh
  309.      @last_mouse_y = mouse_y
  310.    end
  311. end
  312. end
  313. class Scene_File
  314. if @self_alias == nil
  315.    alias self_update update
  316.    @self_alias = true
  317. end
  318. def update
  319.    mouse_x, mouse_y = Mouse.get_mouse_pos
  320.    Mouse.click_lock
  321.    idx = 0
  322.    for i in @savefile_windows
  323.      top_x = i.x + 16
  324.      top_y = i.y + 16
  325.      bottom_x = top_x + i.width
  326.      bottom_y = top_y + i.height
  327.      if (mouse_x > top_x) and (mouse_y > top_y) and
  328.         (mouse_x < bottom_x) and (mouse_y < bottom_y)
  329.        i.selected = true
  330.        if @file_index != idx  
  331.          @file_index = idx
  332.          $game_system.se_play($data_system.cursor_se)
  333.        end            
  334.        Mouse.click_unlock
  335.      else
  336.        i.selected = false
  337.      end
  338.      idx += 1
  339.    end
  340.    self_update
  341. end
  342. end
  343. class Arrow_Enemy
  344. if @self_alias == nil
  345.    alias self_update update
  346.    @self_alias = true
  347. end
  348. def update
  349.    mouse_x, mouse_y = Mouse.get_mouse_pos
  350.    idx = 0
  351.    for i in $game_troop.enemies do
  352.      if i.exist?
  353.        top_x = i.screen_x - self.ox
  354.        top_y = i.screen_y - self.oy
  355.        bottom_x = top_x + self.src_rect.width
  356.        bottom_y = top_y + self.src_rect.height
  357.        if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
  358.           (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
  359.          if @index != idx
  360.            $game_system.se_play($data_system.cursor_se)
  361.            @index = idx
  362.          end
  363.        end
  364.      end
  365.      idx += 1
  366.    end
  367.    self_update
  368. end
  369. end
  370. class Arrow_Actor
  371. if @self_alias == nil
  372.    alias self_update update
  373.    @self_alias = true
  374. end
  375. def update
  376.    mouse_x, mouse_y = Mouse.get_mouse_pos
  377.    idx = 0
  378.    for i in $game_party.actors do
  379.      if i.exist?
  380.        top_x = i.screen_x - self.ox
  381.        top_y = i.screen_y - self.oy
  382.        bottom_x = top_x + self.src_rect.width
  383.        bottom_y = top_y + self.src_rect.height
  384.        if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
  385.           (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
  386.          if @index != idx
  387.            $game_system.se_play($data_system.cursor_se)
  388.            @index = idx
  389.          end
  390.        end
  391.      end
  392.      idx += 1
  393.    end
  394.    self_update
  395. end
  396. end
  397. class Game_Player
  398. if @self_alias == nil
  399.    alias self_update update
  400.    @self_alias = true
  401. end
  402. def update
  403.    mouse_x, mouse_y = Mouse.get_mouse_pos
  404.    if Mouse.trigger?(Mouse::LEFT)
  405.      unless $game_system.map_interpreter.running? or
  406.             @move_route_forcing or $game_temp.message_window_showing
  407.        @mouse_sta = 1
  408.        trg_x = (mouse_x + $game_map.display_x / 4) / 32
  409.        trg_y = (mouse_y + $game_map.display_y / 4) / 32
  410.      end
  411.    end
  412.    if @mouse_sta != nil and @mouse_sta == 1
  413.      unless moving? or $game_system.map_interpreter.running? or
  414.             @move_route_forcing or $game_temp.message_window_showing
  415.        if @paths_id != nil and @paths != nil and @paths_id <= @paths.size
  416.          case @paths[@paths_id]
  417.          when 6
  418.            @last_move_x = true
  419.            move_right
  420.            @paths_id += 1
  421.            @direction = 6
  422.          when 4
  423.            @last_move_x = true
  424.            move_left
  425.            @paths_id += 1
  426.            @direction = 4
  427.          when 2
  428.            @last_move_x = false
  429.            move_down
  430.            @direction = 2
  431.            @paths_id += 1
  432.          when 8
  433.            @last_move_x = false
  434.            move_up
  435.            @direction = 8
  436.            @paths_id += 1
  437.             
  438.          when 1
  439.            @last_move_x = false
  440.            move_lower_left
  441.            @direction = 1
  442.            @paths_id += 1
  443.          when 3
  444.            @last_move_x = false
  445.            move_lower_right
  446.            @direction = 3
  447.            @paths_id += 1
  448.          when 7
  449.            @last_move_x = false
  450.            move_upper_left
  451.            @direction = 7
  452.            @paths_id += 1
  453.          when 9
  454.            @last_move_x = false
  455.            move_upper_right
  456.            @direction = 9
  457.            @paths_id += 1
  458.          end
  459.        else
  460.          @mouse_sta = 0
  461.        end
  462.      end
  463.    end
  464.    self_update
  465. end
  466. end
  467. Mouse.init
  468. END { Mouse.exit }
复制代码
我这个是帮我上面的那个人发的···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
帖子
274
6
 楼主| 发表于 2012-7-9 15:02:07 | 只看该作者
sblkhgm 发表于 2012-7-6 21:08
请问下  我 Window_44.new调用没反应  是为什么

Project1.rar (187.61 KB, 下载次数: 52)
你看下这范例
回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3185
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

7
发表于 2012-7-10 08:26:20 | 只看该作者
Project1.rar (188.11 KB, 下载次数: 28)

已经改好了。
另外,我把音效屏蔽掉了,为节约内存。(不知道为什么虽然在if里面但是还是一直响)
使用方法:$game_temp.window_44 = true
退出方法:按B键
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 16:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表