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

Project1

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

[重金悬赏]窗口中 Sprite 的刷新问题

 关闭 [复制链接]

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

跳转到指定楼层
1
发表于 2008-9-19 00:22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
先发上脚本:

  1. ==============================================================================
  2. # ■ Window_Byz_NumberInput
  3. #------------------------------------------------------------------------------
  4. #  信息窗口内部使用、输入数值的窗口。
  5. #==============================================================================
  6. class Window_Byz_NumberInput < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对象
  9.   #     digits_max : 行数
  10.   #--------------------------------------------------------------------------
  11.   def initialize(x, y, w, h)
  12.     super(x, y, w, h)
  13.     @w = w
  14.     @x = x
  15.     @y = y
  16.     @h = h
  17.     @digits_max = 8
  18.     @number = []
  19.     @index = 0
  20.     @bitmap = Bitmap.new("Graphics/System/Number#{Byz_Vocab::NUMBER}")
  21.     self.active = false
  22.     @viewport = Viewport.new(x+16, [email protected] - 20, w-32, @bitmap.height + 10)
  23. #~     @viewport.visible = true
  24. #~     @viewport.color = Color.new(0,0,0,150)
  25.     @viewport.z = 9999
  26.     @sprite_number = []
  27.     for i in 0...@digits_max
  28.       @number[i] = 0
  29.       @sprite_number[i] = Sprite.new(@viewport)
  30.       @sprite_number[i].bitmap = @bitmap
  31.       @sprite_number[i].visible = false
  32.     end
  33.     refresh
  34.     update_cursor
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 获取行数
  38.   #--------------------------------------------------------------------------
  39.   def digits_max
  40.     return @digits_max
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 设置行数
  44.   #     digits_max : 新行数
  45.   #--------------------------------------------------------------------------
  46.   def digits_max=(digits_max)
  47.     @digits_max = digits_max
  48.     refresh
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 获取数值
  52.   #--------------------------------------------------------------------------
  53.   def number
  54.     n = 0
  55.     @number.each_index{|i| n += @number[i] * 10 ** i}
  56.     return n
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 设置数值
  60.   #     number : 新数值
  61.   #--------------------------------------------------------------------------
  62.   def number=(number)
  63.     n = [number, 0].max
  64.     @index = 0
  65.     @number = dew(n)
  66.     refresh
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 设置光标
  70.   #--------------------------------------------------------------------------
  71.   def index=(number)
  72.     @index = ([number, -1].max) % @digits_max
  73.     refresh
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 光标向右移动
  77.   #     wrap : 允许跳过
  78.   #--------------------------------------------------------------------------
  79.   def cursor_right(wrap)
  80.     if @index < @number.size - 1 or wrap
  81.       @index = (@index + 1) % @digits_max
  82.     end
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 光标向左移动
  86.   #     wrap : 允许跳过
  87.   #--------------------------------------------------------------------------
  88.   def cursor_left(wrap)
  89.     if @index > 0 or wrap
  90.       @index = (@index + @number.size - 1) % @number.size
  91.     end
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 更新画面
  95.   #--------------------------------------------------------------------------
  96.   def update
  97.     if self.active
  98.       n = @number[@index]
  99.       if Input.repeat?(Input::UP)
  100. #~         n = ((n + 1) % 10)
  101.         @number[@index] += 1
  102.         @number[@index] = 0 if n == 9
  103.         move_sprite(@sprite_number[@index], true)
  104.       end
  105.       if Input.repeat?(Input::DOWN)
  106. #~         n = (n + 9) % 10
  107.         @number[@index] -= 1
  108.         move_sprite(@sprite_number[@index], false)
  109.       end
  110.       refresh
  111.       last_index = @index
  112.       if Input.repeat?(Input::RIGHT)
  113.         cursor_right(Input.trigger?(Input::RIGHT))
  114.       end
  115.       if Input.repeat?(Input::LEFT)
  116.         cursor_left(Input.trigger?(Input::LEFT))
  117.       end
  118.       if @index != last_index
  119.         Sound.play_cursor
  120.       end
  121.       update_cursor
  122.     end
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 刷新
  126.   #--------------------------------------------------------------------------
  127.   def refresh
  128.     for i in 0...@digits_max
  129.       show_sprite(@number[i], @sprite_number[i], @w - 32 - (i+1) * @bitmap.width / 10 - 8, 0)
  130.     end
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 更新光标
  134.   #--------------------------------------------------------------------------
  135.   def update_cursor
  136.     self.cursor_rect.set(24 + @index * 16, 0, 16, WLH)
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 显示 Sprite
  140.   #--------------------------------------------------------------------------
  141.   def show_sprite(numbers, sprite, x, y)
  142.     sprite.src_rect.set(@bitmap.width / 10 * numbers, 0, @bitmap.width / 10, @bitmap.height)
  143.     sprite.x = x
  144.     sprite.y = y
  145.     sprite.visible = true
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 移动 Sprite
  149.   #    bool: 旋转方向
  150.   #          true  向上
  151.   #          false 向下
  152.   #--------------------------------------------------------------------------
  153.   def move_sprite(sprite, bool)
  154.     old_sprite = Sprite.new(@viewport)
  155.     old_sprite.visible = false
  156.     old_sprite.bitmap = @bitmap
  157.     old_sprite.x = sprite.x
  158.     old_sprite.y = 0
  159.     if bool
  160.       old_sprite.src_rect.x = sprite.src_rect.x + @bitmap.width / 10
  161.       old_sprite.src_rect.x = 0 if old_sprite.src_rect.x > @bitmap.width
  162.       old_sprite.oy = [email protected]
  163.       old_sprite.visible = true
  164.       for i in [email protected]
  165.         old_sprite.oy += 1
  166.         old_sprite.oy = 0 if old_sprite.oy > 0
  167.         sprite.oy += 1
  168.         Graphics.update
  169.       end
  170.       sprite = nil
  171.       sprite = Sprite.new(@viewport)
  172.       sprite.bitmap = @bitmap
  173.       sprite.x = old_sprite.x
  174.       sprite.y = 0
  175.       sprite.src_rect.x = old_sprite.src_rect.x
  176.       old_sprite.visible = false
  177.       old_sprite.bitmap = nil
  178.       old_sprite = nil
  179.     else
  180.       old_sprite.src_rect.x = sprite.src_rect.x - @bitmap.width / 10
  181.       old_sprite.src_rect.x = 0 if old_sprite.src_rect.x < 0
  182.       old_sprite.oy = @bitmap.height
  183.       old_sprite.visible = true
  184.       for i in [email protected]
  185.         old_sprite.oy -= 1
  186.         old_sprite.oy = 0 if old_sprite.oy < 0
  187.         sprite.oy -= 1
  188.         Graphics.update
  189.       end
  190.       sprite.src_rect.x -= @bitmap.width / 10
  191.       sprite.src_rect.x = 0 if sprite.src_rect.x < 0
  192.     end
  193. #~     old_sprite.bitmap = nil
  194. #~     old_sprite = nil
  195. #~     sprite.visible = true
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 位拆分
  199.   #--------------------------------------------------------------------------  
  200.   def dew(x)
  201.     return unless x.is_a?(Integer)
  202.     de = []
  203.     i = x % 10
  204.     while x >= 10
  205.       i = x % 10
  206.       de.push(i)
  207.       x /= 10
  208.     end
  209.     de.push(x)
  210.     return de
  211.   end
  212. end
复制代码


这个是效果图:



请注意红色框,发现什么了吧??(我语文不好,所以就不多说了)

求解决办法?{/hx}{/hx}

可以的话,顺便把 index 的刷新也解决了吧{/hx}。

至于报酬什么的,请开价。 前提是我能付的起。{/hx}

《天空之城 —— 破碎的命运》
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-4
帖子
608
2
发表于 2008-9-19 00:41:14 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-8
帖子
466
3
发表于 2008-9-19 01:11:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

4
发表于 2008-9-19 01:14:52 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

5
 楼主| 发表于 2008-9-19 01:17:16 | 只看该作者
http://rpg.blue/upload_program/goods/Number-_102186884.png


那个,本来是想丢掉 @digits_max,用 @number.size 来替换的。后来一想觉得不怎么好,所以

就又加上去了。


光标的话, 是依照 Window_Inputnumber 来写的, 所以 继承的是 Window_Base 。

以下引用沉影不器于2008-9-18 17:14:52的发言:

实现什么功能



实现当玩家按下 上 方向键改变数字的时候, 数字有一种从下向上改变的过程。

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-20
帖子
25
6
发表于 2008-9-19 01:19:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

7
 楼主| 发表于 2008-9-19 01:23:34 | 只看该作者
具体说下好了:

比如, 个位数字是 0 , 当玩家按下 上 的时候, 数字 1 就会在个位数字 0 的下面上升,慢

慢替代本来的个位数字。

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

8
发表于 2008-9-19 01:23:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

9
 楼主| 发表于 2008-9-19 01:24:36 | 只看该作者
恩恩。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-8
帖子
466
10
发表于 2008-9-19 01:28:54 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-1 21:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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