赞 | 406 |
VIP | 0 |
好人卡 | 11 |
积分 | 390 |
经验 | 242285 |
最后登录 | 2024-11-15 |
在线时间 | 5717 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 39016
- 在线时间
- 5717 小时
- 注册时间
- 2006-11-10
- 帖子
- 6619
|
本帖最后由 灯笼菜刀王 于 2022-5-17 17:00 编辑
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
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
随手写了个简易的QTE, 用它手感应该会略好一些,笑
使用方法, 条件分歧: 脚本: qte_on(图片名,起点,终点,判定点1,判定点2,time) 注意,符号全部要用半角符号,即英文输入法标点
图片名为光标图片名字, 图片放picture文件夹内, 注意名字要带半角双引号 栗子 : "我是图"
起点,终点,判定点1,判定点2, 都要写成数组格式, 栗子 [X坐标,Y坐标], 表示光标移动的路线以及成功判定的"路段"(光标图片的中心坐标在判定点1和2中间即为成功)
time 光标从起点移动到终点所需的时间, 根据v=s/t 可以知道, 时间越短速度越快, 笑
使用栗子
|
|