| 赞 | 425 |
| VIP | |
| 好人卡 | |
| 积分 | 422 |
| 经验 | |
| 最后登录 | 2026-8-20 |
| 在线时间 | 6017 小时 |
- 梦石
- 0
- 星屑
- 42235
- 在线时间
- 6017 小时
- 注册时间
- 2006-11-10
- 回帖
- 6966
|
发表于 2022-5-17 16:58:54
|
显示全部楼层
本帖最后由 灯笼菜刀王 于 2022-5-17 17:00 编辑
[pre lang="ruby"]class Spr_qte < RPG::Sprite
def initialize(pic,q1,q2,r1,r2,time)
super()
self.bitmap = RPG::Cache.picture(pic)
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
@_move_time = 0
@move_p = []
f1 = r1[0]..r2[0]
f2 = r1[1]..r2[1]
@q = [q1,q2,f1.to_a,f2.to_a,time]
@turn = false
reset
end
def move(x,y,time)
@move_p = [x || self.x,y || self.y,self.x,self.y,time]
@_move_time = time
end
def reset
self.x,self.y,self.z = @q[0][0],@q[0][1],9800
move(@q[1][0],@q[1][1],@q[4])
end
def stop
@old_move_time = @_move_time
@_move_time = 0
end
def go
@_move_time = @old_move_time
@old_move_time = nil
end
def input_ok?
return (@q[2].include?(self.x) and @q[3].include?(self.y))
end
def update
super
if @_move_time > 0
@_move_time -= 1
#x,y,oldx,oldy,time
new_x = 1.0 * (@move_p[0] - @move_p[2]) / @move_p[4] * \
(@move_p[4] - @_move_time) + @move_p[2]
new_y = 1.0 * (@move_p[1] - @move_p[3]) / @move_p[4] * \
(@move_p[4] - @_move_time) + @move_p[3]
self.x = Integer(new_x)
self.y = Integer(new_y)
return
end
if @old_move_time.nil?
if @turn
move(@q[1][0],@q[1][1],@q[4])
@turn = false
else
move(@q[0][0],@q[0][1],@q[4])
@turn = true
end
end
end
end
class Interpreter
def qte_on(图片名,起点,终点,判定点1,判定点2,time)
@w = Spr_qte.new(图片名,起点,终点,判定点1,判定点2,time)
loop do
Graphics.update
$scene.instance_variable_get(:@spriteset).update
$game_system.update
@w.update
Input.update
if Input.repeat?(Input::C)
return @w.input_ok?
end
end
end
def qte_off
return if @w.nil?
@w.dispose
@w.bitmap.dispose
end
end[/pre]
随手写了个简易的QTE, 用它手感应该会略好一些,笑
使用方法, 条件分歧: 脚本: qte_on(图片名,起点,终点,判定点1,判定点2,time) 注意,符号全部要用半角符号,即英文输入法标点
图片名为光标图片名字, 图片放picture文件夹内, 注意名字要带半角双引号 栗子 : "我是图"
起点,终点,判定点1,判定点2, 都要写成数组格式, 栗子 [X坐标,Y坐标], 表示光标移动的路线以及成功判定的"路段"(光标图片的中心坐标在判定点1和2中间即为成功)
time 光标从起点移动到终点所需的时间, 根据v=s/t 可以知道, 时间越短速度越快, 笑
使用栗子
|
|