赞 | 2 |
VIP | 341 |
好人卡 | 22 |
积分 | 6 |
经验 | 66602 |
最后登录 | 2024-5-19 |
在线时间 | 1243 小时 |
Lv2.观梦者 (管理员) 八云紫的式神
- 梦石
- 0
- 星屑
- 614
- 在线时间
- 1243 小时
- 注册时间
- 2008-1-1
- 帖子
- 4282
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
更新一个不需要改Scene_title的范例
http://rpg.blue/upload_program/d/zh99998_Project35_114419866.rar
- #东方绯想天式飘动title
- class Window_Title < Window_Selectable
- #--------------------------------------------------------------------------
- # 定义常量
- #--------------------------------------------------------------------------
- AMP = -50 #幅度,正数为向右,负数为向左
- WAITTIME = 300 #等待时间,单位:帧
- SPEED = 300 #飘动速度,值越大越慢
- OX = [130,150,170,150] #初始横坐标
- LOADDATA = 1 #读档指令的位置,如果不使用无存档时变暗功能,把此项设为nil
- WAIT_PER_PERIOD = false #每次飘动完成后等待
- #--------------------------------------------------------------------------
- # 初始化
- #--------------------------------------------------------------------------
- def initialize(x = -16, y = 200)
- bitmap = Cache.system("title_command")
- @width = bitmap.width
- @height= bitmap.height
- super(x, y, Graphics.width - 2 * x, @height + 32)
- self.opacity = 0
- @index = 0
- @column_max = 1
- @item_max = OX.size
- @height /= @item_max
- @sprites = []
- OX.size.times do |index|
- sprite = Sprite.new
- sprite.bitmap = bitmap
- sprite.src_rect.set(0, @height * index, bitmap.width, @height)
- sprite.y = y + @height * index + 16
- sprite.x = OX[index]
- @sprites.push(sprite)
- end
- if LOADDATA and Dir.glob('Save*.rvdata').empty? #读档按钮不可用时的颜色修正,可以根据图片的特点来修改以取得比较好的视觉效果
- @sprites[LOADDATA].opacity = 128 #半透明
- @sprites[LOADDATA].tone = Tone.new(0,0,0,255) #灰度化
- end
- @move_x = []
- @wait_time = 0
- @move_index = [0,0,0,0]
- SPEED.times {|index|@move_x.push((Math.cos(Math::PI * index / SPEED * 2) * AMP).round - AMP)}
- update
- end
- #--------------------------------------------------------------------------
- # 更新
- #--------------------------------------------------------------------------
- def update
- last_index = @index
- super
- if @index != last_index
- @wait_time = 0
- @stopping = true
- end
- if @move_index.all? {|index|index == 0}
- if @wait_time > WAITTIME
- sprite_move(0)
- @wait_time = 0
- @stopping = true if WAIT_PER_PERIOD
- else
- @stopping = false
- @wait_time += 1
- end
- else
- sprite_move(0) unless @stopping and @move_index[0] == 0
- (1...OX.size).each {|index| sprite_move(index) if @move_index[index] != 0 or @move_index[index - 1] >= 30}
- end
- end
- #--------------------------------------------------------------------------
- # 释放(再定义)
- #--------------------------------------------------------------------------
- def dispose
- @sprites.each do |sprite|
- sprite.bitmap.dispose
- sprite.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● 获取项目要描画的矩形
- # index : 项目编号
- #--------------------------------------------------------------------------
- def item_rect(index)
- return Rect.new(0,index * @height, self.contents.width, @height)
- end
- #--------------------------------------------------------------------------
- # 精灵的移动
- #--------------------------------------------------------------------------
- def sprite_move(index)
- @move_index[index] < SPEED - 1 ? @move_index[index] += 1 : @move_index[index] = 0
- @sprites[index].ox = @move_x[@move_index[index]]
- end
- end
复制代码
版权归八云紫所有
要顺便修改一下Scene_Title
(因为懒得改指令项,所以范例工程里点about会退出)
虽然每帧都要更新精灵的位置,但是在4个选项下能稳定的保持在60fps
http://rpg.blue/upload_program/d/zh99998_Project35_107120815.rar
2008-11-12更新:
自动计算WIDTH和HEIGHT
增加对读档不可用的情况的一些处理,并且不需要额外的图
在update里加入了super(我当时NC了居然忘了super这种东西)
光标顶到窗口两边
对算法做了一些修正
2008-11-13更新:
做了一些细微的调整 |
|