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

Project1

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

[通用发布] 【教程】画面的缩放 待编辑

[复制链接]

Lv2.观梦者

梦石
0
星屑
690
在线时间
791 小时
注册时间
2011-10-20
帖子
2394

开拓者

跳转到指定楼层
1
发表于 2013-8-7 19:20:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 end55rpg 于 2013-8-10 08:58 编辑

zoom=0.4(从1变化到0.4)
zoom=2(从1变化到2)
本教程要实现的是:能在不同放大率画面的正确地走动,能随时更改画面放大率.
Tilemap源码请自备= =,用Panoramas的可以直接看↓
------------------------------------------------------------
误区:伪3D脚本里面有缩放,但是你提取不出来能怎么样呢?
就算取出来了,与本脚本教程也大相径庭,因为那仅仅是tilemap的缩放,实际上它包括了:
图块 远景 天气sprite ARPG‘s damage sprite 其他(如赶选的箭sprite)通通需要zoom设定乘法。
但,不是这么简单,我们还有,比如zoom缩小之后,还要限制小地图15*20缩小后出现黑框,大地图缩小站在边缘的问题(如:缩放中心的改变,实现oxy是scrooll的功劳,否则黑框)

之所以我没有发脚本,是因为修改遍及大半的脚本。于是我们开始吧,先建立一个zoomsystem类 主要用作变量开关 如下面脚本:
  1. $ZOOM=1
  2. $zoom2=1
  3. $zoomtime = 0
  4. $ZOOMDIG=false
  5. $ZOOMBIG=false
  6. $redid=false
  7. class Game_Map
  8.   alias endupdate update
  9.   def update
  10.     if $zoomtime > 0
  11.       if $zoom2 >= 1
  12.       x=$game_player.screen_x*$ZOOM
  13.       y=$game_player.screen_y*$ZOOM
  14. px=(x-320).abs
  15. py=(y-240).abs
  16. $game_map.scroll_right(px) if x > 330
  17. $game_map.scroll_down(py) if y > 250
  18. else
  19.    $ZOOMDIG=true
  20. end
  21.      
  22. =begin
  23.       if $zoom2-$ZOOM > 0
  24.         $ZOOMBIG=true
  25.         $ZOOMDIG=false
  26.       else
  27.         $ZOOMDIG=true
  28.         $ZOOMBIG=false
  29.       end
  30. =end

  31.       case $zoommode
  32.       when 0
  33.         endzoom
  34.       when 1
  35.         startfast
  36.       when 2
  37.         startslow
  38.       else
  39.         p "过期啦"#endzoom
  40.       end
  41.     else
  42.       if $redid
  43.         changezoom(1,40,1,false)
  44.         $redid=false
  45.       else
  46.         $zoomspeedhistory = nil
  47.         $zoomtimehistory = nil#$zoomtime
  48.         $ZOOMDIG=false
  49.         #$ZOOMBIG=false
  50.       end
  51.       
  52.       
  53.     end      
  54.     endupdate
  55.   end
  56.   def changezoom(z,t,m=0,redid=false)
  57.     return if $game_switches[23]
  58.     $zoom2=z.to_f
  59.     $zoomtime = t
  60.     $zoommode=m
  61.     $zoomspeedhistory = $ZOOM
  62.     $zoomtimehistory = $zoomtime
  63.     $redid=redid
  64.     return true
  65.   end
  66.   def changezoom2(z,t,m=0,redid=false)
  67.     $zoom2=z.to_f
  68.     $zoomtime = t
  69.     $zoommode=m
  70.     $zoomspeedhistory = $ZOOM
  71.     $zoomtimehistory = $zoomtime
  72.     $redid=redid
  73.     return true
  74.   end
  75.   def endzoom
  76.    
  77.     $ZOOM += (-$ZOOM+$zoom2)/$zoomtime
  78.    
  79.     $zoomtime -= 1
  80.   end
  81.   def startfast#1
  82.     #-$ZOOM+$zoom2瞬时ZOOM变化量
  83.     d=(-$ZOOM+$zoom2)/$zoomtime
  84.     begin
  85.       m=($zoomtime-$zoomtimehistory/2).to_f/$zoomtimehistory/2
  86.     rescue
  87.       return
  88.     end
  89.     if $zoomtime > $zoomtimehistory/2
  90.       $ZOOM += (d/m)*2
  91.     else
  92.       $ZOOM += (d*m)*2
  93.     end
  94.     $zoomtime -= 1
  95.   end
  96.   def startslow#2
  97.     begin
  98.     d=(-$ZOOM+$zoom2)/$zoomtime
  99.     f=$zoomtimehistory.to_i
  100.   rescue
  101.     return
  102.     end
  103.     case $zoomtime
  104.     when f*(9.0/10)..f
  105.       $ZOOM += d*0.2
  106.       when f*(8.0/10)..f*(9.0/10)
  107.         $ZOOM += d*0.3
  108.       when f*(7.0/10)..f*(8.0/10)
  109.         $ZOOM += d*0.5
  110.       when f*(6.0/10)..f*(7.0/10)
  111.         $ZOOM += d*0.75
  112.       when f*(5.0/10)..f*(6.0/10)
  113.         $ZOOM += d*1
  114.       when f*(4.0/10)..f*(5.0/10)
  115.         $ZOOM += d/1
  116.       when f*(3.0/10)..f*(4.0/10)
  117.           $ZOOM += d/0.75
  118.       when f*(2.0/10)..f*(3.0/10)
  119.           $ZOOM += d/0.5
  120.       when f*(1.0/10)..f*(2.0/10)
  121.           $ZOOM += d/0.3
  122.       when 0..f*(1.0/10)
  123.           $ZOOM += d/0.2
  124.           end
  125.           $zoomtime -= 1
  126.   end
  127. end
复制代码
算法不太会,基本实现了几个方法:zoom平滑过渡如由快到慢,由慢到快(影视中常用的拉镜头办法)
zoom的update变化scroll(算法不好,出此补助下策),实现changezoom的快捷方法(内嵌上述过渡方法)

接下来就该涉及各个sprite的运用¥zoom与画面滚动等了,别以为直接修改sprite父类就可以,问题很多,如windows你敢修改,虽说这个是小毛病,但是还有更多隐性bug会出现,具体你们想想就知道了,我也忘记了。
待编辑.....

点评

待编辑不会用草稿啊……  发表于 2013-8-7 19:41

Lv2.观梦者

梦石
0
星屑
690
在线时间
791 小时
注册时间
2011-10-20
帖子
2394

开拓者

2
 楼主| 发表于 2013-8-8 00:03:13 | 只看该作者
本帖最后由 end55rpg 于 2013-8-10 09:01 编辑

我也是看到Xas4.0
没想到缩小zoom更复杂,貌似xas也没有实现,要不然迟迟不发布,估计技术原因,哇哈哈哈
所以我成了首发了(貌似他的放大也就是打死怪物那会儿。。。而且还不能动吧- -)

顺便胡扯一下,我在短八中并没好好利用此项创意,仅仅靠两个键来让用户自行缩放,拓展其他思路:极度zoom最小后,你可以实现例如
你看到的从街道的视野扩展到整个地球
这就要您的额外技术了,
另外缩小到很小时会弹出浮点数63275256什么的e计算问题,貌似超过运算位极限了。


欢迎点此进入我的egames.wink.ws,有RMQQ堂等

[url=http://rpg.blue/thread-317273-1-1.html]短篇八-赶选

http://yun.baidu.com/share/link?shareid=2158225779&uk=169642147&third=0


历险ARPG赢回你的疆域新的战斗模式?…………点击这里:[宋乱贼狂 for QQ堂]
http://rpg.blue/group-368-1.html
programing ....?
[url=http://rpg.blue/thrd-234658-1-1.html]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-4 01:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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