Project1
标题:
【教程】画面的缩放 待编辑
[打印本页]
作者:
end55rpg
时间:
2013-8-7 19:20
标题:
【教程】画面的缩放 待编辑
本帖最后由 end55rpg 于 2013-8-10 08:58 编辑
zoom=0.4(从1变化到0.4)
41424.PNG
(311.3 KB, 下载次数: 17)
下载附件
保存到相册
2013-8-10 08:54 上传
zoom=2(从1变化到2)
本教程要实现的是:能在不同放大率画面的正确地走动,能随时更改画面放大率.
Tilemap源码请自备= =,用Panoramas的可以直接看↓
------------------------------------------------------------
误区:伪3D脚本里面有缩放,但是你提取不出来能怎么样呢?
就算取出来了,与本脚本教程也大相径庭,因为那仅仅是tilemap的缩放,实际上它包括了:
图块 远景 天气sprite ARPG‘s damage sprite 其他(如赶选的箭sprite)通通需要zoom设定乘法。
但,不是这么简单,我们还有,比如zoom缩小之后,还要限制小地图15*20缩小后出现黑框,大地图缩小站在边缘的问题(如:缩放中心的改变,实现oxy是scrooll的功劳,否则黑框)
之所以我没有发脚本,是因为修改遍及大半的脚本。于是我们开始吧,先建立一个zoomsystem类 主要用作变量开关 如下面脚本:
$ZOOM=1
$zoom2=1
$zoomtime = 0
$ZOOMDIG=false
$ZOOMBIG=false
$redid=false
class Game_Map
alias endupdate update
def update
if $zoomtime > 0
if $zoom2 >= 1
x=$game_player.screen_x*$ZOOM
y=$game_player.screen_y*$ZOOM
px=(x-320).abs
py=(y-240).abs
$game_map.scroll_right(px) if x > 330
$game_map.scroll_down(py) if y > 250
else
$ZOOMDIG=true
end
=begin
if $zoom2-$ZOOM > 0
$ZOOMBIG=true
$ZOOMDIG=false
else
$ZOOMDIG=true
$ZOOMBIG=false
end
=end
case $zoommode
when 0
endzoom
when 1
startfast
when 2
startslow
else
p "过期啦"#endzoom
end
else
if $redid
changezoom(1,40,1,false)
$redid=false
else
$zoomspeedhistory = nil
$zoomtimehistory = nil#$zoomtime
$ZOOMDIG=false
#$ZOOMBIG=false
end
end
endupdate
end
def changezoom(z,t,m=0,redid=false)
return if $game_switches[23]
$zoom2=z.to_f
$zoomtime = t
$zoommode=m
$zoomspeedhistory = $ZOOM
$zoomtimehistory = $zoomtime
$redid=redid
return true
end
def changezoom2(z,t,m=0,redid=false)
$zoom2=z.to_f
$zoomtime = t
$zoommode=m
$zoomspeedhistory = $ZOOM
$zoomtimehistory = $zoomtime
$redid=redid
return true
end
def endzoom
$ZOOM += (-$ZOOM+$zoom2)/$zoomtime
$zoomtime -= 1
end
def startfast#1
#-$ZOOM+$zoom2瞬时ZOOM变化量
d=(-$ZOOM+$zoom2)/$zoomtime
begin
m=($zoomtime-$zoomtimehistory/2).to_f/$zoomtimehistory/2
rescue
return
end
if $zoomtime > $zoomtimehistory/2
$ZOOM += (d/m)*2
else
$ZOOM += (d*m)*2
end
$zoomtime -= 1
end
def startslow#2
begin
d=(-$ZOOM+$zoom2)/$zoomtime
f=$zoomtimehistory.to_i
rescue
return
end
case $zoomtime
when f*(9.0/10)..f
$ZOOM += d*0.2
when f*(8.0/10)..f*(9.0/10)
$ZOOM += d*0.3
when f*(7.0/10)..f*(8.0/10)
$ZOOM += d*0.5
when f*(6.0/10)..f*(7.0/10)
$ZOOM += d*0.75
when f*(5.0/10)..f*(6.0/10)
$ZOOM += d*1
when f*(4.0/10)..f*(5.0/10)
$ZOOM += d/1
when f*(3.0/10)..f*(4.0/10)
$ZOOM += d/0.75
when f*(2.0/10)..f*(3.0/10)
$ZOOM += d/0.5
when f*(1.0/10)..f*(2.0/10)
$ZOOM += d/0.3
when 0..f*(1.0/10)
$ZOOM += d/0.2
end
$zoomtime -= 1
end
end
复制代码
算法不太会,基本实现了几个方法:zoom平滑过渡如由快到慢,由慢到快(影视中常用的拉镜头办法)
zoom的update变化scroll(算法不好,出此补助下策),实现changezoom的快捷方法(内嵌上述过渡方法)
接下来就该涉及各个sprite的运用¥zoom与画面滚动等了,别以为直接修改sprite父类就可以,问题很多,如windows你敢修改,虽说这个是小毛病,但是还有更多隐性bug会出现,具体你们想想就知道了,我也忘记了。
待编辑.....
作者:
end55rpg
时间:
2013-8-8 00:03
本帖最后由 end55rpg 于 2013-8-10 09:01 编辑
我也是看到Xas4.0
没想到缩小zoom更复杂,貌似xas也没有实现,要不然迟迟不发布,估计技术原因,哇哈哈哈
所以我成了首发了(貌似他的放大也就是打死怪物那会儿。。。而且还不能动吧- -)
顺便胡扯一下,我在短八中并没好好利用此项创意,仅仅靠两个键来让用户自行缩放,拓展其他思路:极度zoom最小后,你可以实现例如
你看到的从街道的视野扩展到整个地球
这就要您的额外技术了,
另外缩小到很小时会弹出浮点数63275256什么的e计算问题,貌似超过运算位极限了。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1