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

Project1

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

[已经解决] 【地图问题*2】画面斜向卷动 与 滚动远景

[复制链接]

Lv5.捕梦者

梦石
24
星屑
7027
在线时间
247 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

跳转到指定楼层
1
发表于 2022-10-31 15:09:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
【问题一】
有没有办法将画面中心移动向指定的地图格子坐标呢,自带的只能竖向横向卷动,折线移动有点影响感观,希望能够直接直线移动镜头
另外,移动的速度能不能做线性参数,希望能有一个加速减速的过程,让过场镜头感加强
【问题二】
如何让远景图片随着某变量或参数滚动起来,且速度可调——如电梯场景,列车场景

Lv5.捕梦者

梦石
0
星屑
37839
在线时间
5419 小时
注册时间
2006-11-10
帖子
6549
2
发表于 2022-10-31 15:31:10 | 只看该作者
本帖最后由 灯笼菜刀王 于 2022-10-31 15:32 编辑

一,  把 $game_player 透明, 然后丢到你要的坐标即可

二,  在Spriteset_Map 里 对  @panorama.ox 和 @panorama.oy 动手脚即可 , 同理, 移动镜头也一样可以对 @scroll_rest 动手脚(在Game_Map里),

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
纯属小虫 + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7027
在线时间
247 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

3
 楼主| 发表于 2022-10-31 16:56:12 | 只看该作者
灯笼菜刀王 发表于 2022-10-31 15:31
一,  把 $game_player 透明, 然后丢到你要的坐标即可

二,  在Spriteset_Map 里 对  @panorama.ox 和 @pano ...

感谢,【问题二】好像有头绪了

【问题一】还有一些想要请教
用角色移动的方法的话,还得做一个跟角色行走图一样的事件在地图出现(如果画面卷洞的时候主角在场的话),而且角色移动好像只能45°的说......不过用跳跃的移动方式好像能够解决方向问题,但移动平滑变速还是没法搞定...
我有个思路,前辈看看可不可行
1、在Game_Map 定义一个 直接控制 @display_x 和 @display_y 变量的方法,自变量有【目标坐标】和【总体速度】
2、然后将这个方法置入到 update 里头去
3、随着帧数的变化,@display_x 和 @display_y 会向目标靠近,每一帧靠近的量会根据【总体速度】和【经过的距离】改变,从而达到先加速后减速的平滑镜头移动
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
4
发表于 2022-10-31 21:35:26 | 只看该作者
我之前平滑移动也是研究了很久, 用了视野跟随脚本进行改装,
$game_player.centerNPC(id)  
id里写你视野要移到的NPC(或事件)
比如 $game_player.centerNPC(3) , 每触发一次该脚本, 画面中心视野就会渐渐靠向该地图的3号事件 , 而不是一下就移过去  , 你可以在update里放$game_player.centerNPC(3) 试试什么效果
而id = 0的情况, 也就是$game_player.centerNPC(0)  , 则画面中心视野马上转回主角 , 也是原来该脚本所带的效果, 注意注释有些只是我笔记跟脚本无关,
配合灯王那个思路, 可以把某事件透明化, 移动该事件, 再触发这个$game_player.centerNPC(该事件id)
理解我认为是比较难的,

要正式使用还得把游戏运行流程, 所以还是不指望你能够实际使用, 看你会
@display_x 和 @display_y 之类的, 看来你思路也是正确的, 实际使用就看你自己情况


仅供参考

RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4. #NPC视野
  5. class Game_Player < Game_Character
  6.   #--------------------------------------------------------------------------
  7.   # ● 像通到画面中央一样的设置地图的显示位置
  8.   #--------------------------------------------------------------------------
  9.   def centerNPC(id)
  10.     if id==0
  11.     $目标视角=$game_player #可以使角色在粘在车子上
  12.  
  13.  
  14.  
  15.     max_x = ($game_map.width -  20) * 128
  16.     max_y = ($game_map.height - 15) * 128
  17.     $game_map.display_x = [0, [$game_player.real_x - CENTER_X, max_x].min].max #-1000 #加括号, 超出地图的坐标,同樣有效
  18.     $game_map.display_y = [0, [$game_player.real_y - CENTER_Y, max_y].min].max #-1000
  19.   else
  20.  
  21.     #$目标视角=$game_map.events[id]#可以使角色在粘在车子上 ,需单独使用(下面的就不需要)
  22.  
  23.     #max_x = ($game_map.width - 20) * 128
  24.     #max_y = ($game_map.height - 15) * 128
  25.     #$game_map.display_x = [0, [$game_map.events[id].real_x - CENTER_X, max_x].min].max
  26.     #$game_map.display_y = [0, [$game_map.events[id].real_y - CENTER_Y, max_y].min].max
  27.  
  28.     #,#{a},#{a},
  29. =begin ##粘車測試
  30.   delay = 2 if delay == nil
  31.   if delay < 2
  32.     delay+1
  33.     return false
  34.     end
  35.   if delay == 2
  36.     #return true
  37.     delay = 0
  38.   end
  39. =end
  40.   #x_sub = $game_player.real_x - $game_map.events[id].real_x
  41.   #y_sub = $game_player.real_y - $game_map.events[id].real_y
  42.  
  43.  
  44. #=begin
  45.   x_sub = ($game_map.display_x+128*8.5)  - $game_map.events[id].real_x
  46.   y_sub = ($game_map.display_y+128*7)  - $game_map.events[id].real_y
  47. #pst"#{($game_map.display_x+128*8.5)},#{$game_map.events[id].real_x}"
  48. #x_sub-500減多少都无用
  49. #y_sub-500
  50. x_a = x_sub.abs #求绝对值相减(位移)
  51. y_a = y_sub.abs
  52.  
  53.  
  54. if  x_sub == 0 and y_sub == 0
  55.  
  56. end
  57. sped = 10 #画面的移动速度
  58. sped_x = ([x_a*0.2,60].min).to_i
  59. #画面x的最大移动速度, 用x_a*0.2和60 两个值比较,取较小的值
  60.  
  61. sped_y = ([y_a*0.2,60].min).to_i
  62.  
  63. sped_x = 1 if x_a <sped #若画面的移动速度小于该速度最大值就变1, 不然一直画面跳动
  64. sped_y = 1 if y_a <sped
  65.     if  x_sub > 0 #目标事件在左边, 画面x轴向左移动
  66.        $game_map.display_x-=sped_x#(x_sub.abs)
  67.        #$game_map.scroll_left(x_sub.abs/128)
  68.      else x_sub < 0 #目标事件在右边, 画面x轴向右移动
  69.       # p 1
  70. $game_map.display_x+=sped_x#(x_sub.abs)
  71. #$game_map.scroll_right(x_sub.abs/128)
  72. end
  73.  
  74.  
  75.     if  y_sub>0 #目标事件在上边, 画面y轴向上移动
  76.       $game_map.display_y-=sped_y#(y_sub.abs)
  77.       #$game_map.scroll_up(y_sub.abs/128)
  78.     else y_sub < 0 #目标事件在下边, 画面y轴向下移动
  79.       #$game_map.scroll_down(y_sub.abs/128)
  80. $game_map.display_y+=sped_y#(y_sub.abs)
  81. end
  82.  
  83.  
  84. #=end ##粘車測試 #可能不是漸移,不知
  85. end
  86.  
  87. end  
  88.  
  89. end
  90.  
  91. #==============================================================================
  92. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  93. #==============================================================================
  94. =begin
  95. __END__#没做延时移备份
  96.   x_sub = ($game_map.display_x+128*8.5)  - $game_map.events[id].real_x
  97.   y_sub = ($game_map.display_y+128*7)  - $game_map.events[id].real_y
  98. pst"#{($game_map.display_x+128*8.5)},#{$game_map.events[id].real_x}"
  99. #x_sub-500減多少都无用
  100. #y_sub-500
  101. x = x_sub.abs
  102. y = y_sub.abs
  103.  
  104. if  x_sub = 0 and y_sub = 0
  105.         break
  106. end
  107.  
  108.     if  x_sub> 0 #在右边
  109.       for i in 0...x
  110.        $game_map.display_x-=1#(x_sub.abs)
  111.        #$game_map.scroll_left(x_sub.abs/128)
  112.        end
  113.      else x_sub < 0
  114.        for i in 0...x
  115. $game_map.display_x+=1#(x_sub.abs)
  116. #$game_map.scroll_right(x_sub.abs/128)
  117. end
  118. end
  119.  
  120.  
  121.     if  y_sub>0 #在下边
  122.       for i in 0...y
  123.       $game_map.display_y-=1#(y_sub.abs)
  124.       #$game_map.scroll_up(y_sub.abs/128)
  125.       end
  126.     else y_sub < 0
  127.       for i in 0...y
  128.       #$game_map.scroll_down(y_sub.abs/128)
  129. $game_map.display_y+=1#(y_sub.abs)
  130. end
  131. =end

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
纯属小虫 + 1 塞糖

查看全部评分

内容仅供参考,
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7027
在线时间
247 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

5
 楼主| 发表于 2022-11-4 16:42:00 | 只看该作者
本帖最后由 纯属小虫 于 2022-11-4 18:35 编辑
ppspssss 发表于 2022-10-31 21:35
我之前平滑移动也是研究了很久, 用了视野跟随脚本进行改装,
$game_player.centerNPC(id)  
id里写你视野要 ...


hmmmmm...
抽空按照display_x,y 的思路写了一个补丁式的脚本,能直接黏贴在main之前用
能够直接平滑移动至指定的地图坐标位置(没有做过线矫正),算是能够在剧情过场的时候用了
分享顺便公开测试一下

镜头平滑移动至坐标


另外:顺便把远景图片移动也做了个小脚本... ,实现了火车or飞船背景移动的效果

PS居然又一次自问自答了...
远景图片自动移动

点评

顺便把远景图片自动挪动也做了......hhh  发表于 2022-11-4 18:21

评分

参与人数 1+1 收起 理由
89444640 + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-2 20:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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