Project1

标题: 光标移动的问题。(1500分) [打印本页]

作者: 八云紫    时间: 2008-7-23 17:26
标题: 光标移动的问题。(1500分)
先发脚本:

  1. class Window_Position < Window_Selectable
  2.   
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化对象
  5.   #     actor : 角色
  6.   #--------------------------------------------------------------------------
  7.   def initialize(x, y)
  8.     super(x, y, 400, 300)
  9.     @column_max = 4
  10.     @indexes = 0
  11.     @timeses = 0
  12.     @bitmap = []
  13.     for actor in $game_party.members
  14.       @bitmap.push(Cache.character(actor.character_name))
  15.     end
  16.     self.active = true
  17.     self.index = -1
  18.     refresh
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 刷新
  22.   #--------------------------------------------------------------------------
  23.   def refresh
  24.     self.contents.clear
  25.     @timeses += 1
  26.     #draw_location(0, 0)
  27.     case @indexes
  28.       when 0
  29.         index = 0
  30.       when 1,3
  31.         index = 1
  32.       when 2
  33.         index = 2
  34.     end
  35.     if @timeses % 15 == 0
  36.       @indexes += 1
  37.       for actor in $game_party.members
  38.         xs = Position::BAPN[2][1][0]
  39.         ys = Position::BAPN[2][3][1]
  40.         draw_characters(@bitmap[actor.id - 1], index, xs + actor.id * 50, ys,$game_actors[actor.id].direction)
  41.       end
  42.       @indexes = @indexes % 4
  43.       @timeses = 0
  44.     else
  45.       for actor in $game_party.members
  46.         xs = Position::BAPN[2][1][0]
  47.         ys = Position::BAPN[2][3][1]
  48.         draw_characters(@bitmap[actor.id - 1], index, xs + actor.id * 50, ys, $game_actors[actor.id].direction)
  49.       end
  50.     end
  51.     update
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 描绘行走图
  55.   #--------------------------------------------------------------------------
  56.   def draw_characters(character_name,character_index, x, y,dir = true)
  57.     return if character_name == nil
  58.    # bitmap = Cache.character(character_name)
  59.     n = character_index
  60.     if dir
  61.       src_rect = Rect.new((n%3) *32, 32, 32, 32)
  62.       self.contents.blt(x, y, character_name, src_rect)
  63.     else
  64.       src_rect = Rect.new((n%3) *32, 64, 32, 32)
  65.       self.contents.blt(x, y, character_name, src_rect)
  66.     end
  67.   # bitmap.dispose
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 获取项目要描画的矩形
  71.   #     index : 项目编号
  72.   #--------------------------------------------------------------------------
  73.   def item_rect(index)
  74.     rect = Rect.new(0, 0, 0, 0)
  75.     rect.width = 32
  76.     rect.height = 32
  77.     rect.x = index % @column_max * rect.width
  78.     rect.y = index / @column_max * 32
  79.     return rect
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 描绘场景
  83.   #--------------------------------------------------------------------------  
  84.   def draw_location(x, y)
  85.     bitmap = Bitmap.new("Graphics/Pictures/Lineup.png")
  86.     rect = Rect.new(0, 0, 0, 0)
  87.     rect.x = x
  88.     rect.y = y
  89.     rect.width = 128
  90.     rect.height = 128
  91.     self.contents.blt(x, y, bitmap, rect)
  92.     bitmap.dispose
  93.   end
  94. end
复制代码


问题是,在调用这个窗口的 时候,光标移动不能,麻烦大家帮我看看,是哪里错了?{/hx} [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 水镜风生    时间: 2008-7-23 19:02
没仔细看,光标不动估计是缺少更新。

这只是一个窗口罢了,要调用它还需要一个场景(Scene)。

如果是在已有的场景里调用的话,请在update方法里加入新建窗口的更新。
如果是想在地图上直接调用,那么请再写一个专用的Scene,再在地图上调用Scene。

建议LZ看看下面的教程,对场景和窗口讲得比较仔细。
http://51cool.uu1001.com/read.php?tid=236&fpage=4
http://51cool.uu1001.com/read.php?tid=258&fpage=3
http://51cool.uu1001.com/read.php?tid=272&fpage=3

[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: link006007    时间: 2008-7-23 19:06
如果想在地图上使用  请直接使用Scene_Map...
现在无法测试  不过在窗口中描绘行走图, 是很费FPS的
作者: 八云紫    时间: 2008-7-23 19:15
以下引用水镜风生于2008-7-23 11:02:27的发言:

没仔细看,光标不动估计是缺少更新。

这只是一个窗口罢了,要调用它还需要一个场景(Scene)。

如果是在已有的场景里调用的话,请在update方法里加入新建窗口的更新。
如果是想在地图上直接调用,那么请再写一个专用的Scene,再在地图上调用Scene。

建议LZ看看下面的教程,对场景和窗口讲得比较仔细。
http://51cool.uu1001.com/read.php?tid=236&fpage=4
http://51cool.uu1001.com/read.php?tid=258&fpage=3
http://51cool.uu1001.com/read.php?tid=272&fpage=3

[本贴由作者于 2008-7-23 11:04:25 最后编辑]


Scene 类很简单的:
  1. class Scene_Positions < Scene_Base
  2.   def start
  3.     @a = Window_Position.new(0,0)
  4.   end
  5.   def terminate
  6.     super
  7.     @a.dispose
  8.   end
  9.   def update
  10.     @a.refresh
  11.   end
  12. end
复制代码

以下引用link006007于2008-7-23 11:06:25的发言:

如果想在地图上使用  请直接使用Scene_Map...
现在无法测试  不过在窗口中描绘行走图, 是很费FPS的


我的想法就是在窗口中描绘的。

以下引用link006007于2008-7-23 11:06:25的发言:

不过在窗口中描绘行走图, 是很费FPS的


这个问题已经解决了。 FPS 稳定在 60 。{/hx}

[LINE]1,#dddddd[/LINE]

先不说 按 B C 键的判定, 就连 上下左右都 没 反应。

弄了 一上午,还是不行。{/dk}
作者: 水镜风生    时间: 2008-7-23 19:21
Scene里:

def update
    @a.refresh
  end

应该是:
def update
   @a.update
end

LX有错,不是updata……
作者: dbshy    时间: 2008-7-23 19:23
class Scene_Positions < Scene_Base
  def start
    @a = Window_Position.new(0,0)
  end
  def terminate
    super
    @a.dispose
  end
  def update
    @a.refresh
    @a.update
  end
end

我是脚本废柴,如有错,请大家自行更正
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 八云紫    时间: 2008-7-23 19:25
以下引用dbshy于2008-7-23 11:23:05的发言:

class Scene_Positions < Scene_Base
def start
   @a = Window_Position.new(0,0)
end
def terminate
   super
   @a.dispose
end
def update
   @a.refresh
   @a.updata
end
end


依旧不动哦。{/dk}
作者: 水镜风生    时间: 2008-7-23 19:27
@a.refresh多余,是update不是updata……
作者: 八云紫    时间: 2008-7-23 19:29
以下引用水镜风生于2008-7-23 11:27:26的发言:

@a.refresh多余,是update不是updata……


因为要在Window里画行走图,不调用 refresh 就 动不 了了 .
作者: IamI    时间: 2008-7-23 19:30
Orz,原类里面refresh最后不是有一个update啊 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 八云紫    时间: 2008-7-23 19:37
是不是 Window_Selectable 的 cursor_movable? 的问题?

我把 Window_Selectable 里的 update 的  if cursor_movable? 改成 if true 光标就可以移

动到 index = 0 的地方,然后就不动了。


作者: link006007    时间: 2008-7-23 19:46
看不出问题   没有VX  应该是你没有初始化@item_max这个值
@item_max  最大选项数目
@column_max 列数
你让@item_max>=@column_max应该可以移动光标   
PS:
窗口描绘会动的行走图绝对会消耗FPS 只是你的窗口没有draw_text...
真正是draw_text消耗FPS [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 八云紫    时间: 2008-7-23 19:49
以下引用link006007于2008-7-23 11:46:45的发言:

看不出问题   没有VX  应该是你没有初始化@item_max这个值
@item_max  最大选项数目
@column_max 列数
你让@item_max>=@column_max应该可以移动光标   
PS:
窗口描绘会动的行走图绝对会消耗FPS 只是你的窗口没有draw_text...
真正是draw_text消耗FPS


原来如此,偶好笨,解决了。 哭~~~~~




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