Project1

标题: 若干双人游戏的问题 [打印本页]

作者: shenqideshijuan    时间: 2025-4-9 14:40
标题: 若干双人游戏的问题
本帖最后由 shenqideshijuan 于 2025-4-9 15:05 编辑

重新编辑一下……既然发问了,就把我要问的问题塞到一个帖子里吧……这样有大神看直接就全帮我解答了

最近在做一个双人游戏,默认每个地图编号为1,2的事件是主角,Player直接架空不管它,采用事件移动,监测事件的xy坐标,根据1P2P站在哪个位置来决定执行哪些事件
摄像机默认在1P,按F5可以切换摄像机

现在有若干问题……
【1】如何让视角跟随NPC(事件)移动

我不太明白该怎么样让视角移动到2P
站内搜索了两个小时……还是没有什么成果
我知道有一个脚本,但是是XP的,转移到VA不兼容,我不懂VA的脚本也没法改
  1. class Game_Player < Game_Character
  2.   #--------------------------------------------------------------------------
  3.   # ● 像通到画面中央一样的设置地图的显示位置
  4.   #--------------------------------------------------------------------------
  5.   def centerNPC(id)
  6.     if id==0
  7.     max_x = ($game_map.width - 20) * 128
  8.     max_y = ($game_map.height - 15) * 128
  9.     $game_map.display_x = [0, [$game_player.real_x - CENTER_X, max_x].min].max
  10.     $game_map.display_y = [0, [$game_player.real_y - CENTER_Y, max_y].min].max
  11.     else
  12.     max_x = ($game_map.width - 20) * 128
  13.     max_y = ($game_map.height - 15) * 128
  14.     $game_map.display_x = [0, [$game_map.events[id].real_x - CENTER_X, max_x].min].max
  15.     $game_map.display_y = [0, [$game_map.events[id].real_y - CENTER_Y, max_y].min].max
  16.     end
  17.   end  
  18. end
复制代码


【2】怎么样把rmva自带的Num2468移动,Num0菜单,数字键Enter关掉

我不关的话,就没法区分1P和2P是谁按下的X/C键。。。

【3】怎么样和移动的人物进行交互

因为我推翻了用Player本体去跟事件交互的设定嘛,所以1P2P要办的所有事情,都必须要通过xy判定来进行
当1P2P到某个坐标点并且按下C/Num0键 才会执行这个事件
这个的局限就在于,一些移动的事件根本没法交互,坐标会乱套
如果要用事件的话该怎么写泥……脚本也行……





如果有会的请帮忙忙,蟹蟹
作者: shenqideshijuan    时间: 2025-4-9 14:42
这一段是VA上关于摄像机判定的脚本
我翻来覆去改了半天,不是毫无变化就是报错
头疼qwq……
  1.   #--------------------------------------------------------------------------
  2.   # ● 画面中央的 X 坐标
  3.   #--------------------------------------------------------------------------
  4.   def center_x
  5.     (Graphics.width / 32 - 1) / 2.0
  6.   end
  7.   #--------------------------------------------------------------------------
  8.   # ● 画面中央的 Y 坐标
  9.   #--------------------------------------------------------------------------
  10.   def center_y
  11.     (Graphics.height / 32 - 1) / 2.0
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 设置显示位置为地图中央
  15.   #--------------------------------------------------------------------------
  16.   def center(x, y)
  17.     $game_map.set_display_pos(x - center_x, y - center_y)
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 移动到指定位置
  21.   #--------------------------------------------------------------------------
  22.   def moveto(x, y)
  23.     super
  24.     center(x, y)
  25.     make_encounter_count
  26.     vehicle.refresh if vehicle
  27.     @followers.synchronize(x, y, direction)
  28.   end
复制代码

作者: 喵呜喵5    时间: 2025-4-9 19:31
如果不需要1p 2p 同时可操作的话,
那直接切换到哪一个 p 就把玩家改到那一 p 所在的位置并把玩家的行走图修改成那一 p 的,
那就没那么多需要推翻的东西了
作者: shenqideshijuan    时间: 2025-4-12 11:44
喵呜喵5 发表于 2025-4-9 19:31
如果不需要1p 2p 同时可操作的话,
那直接切换到哪一个 p 就把玩家改到那一 p 所在的位置并把玩家的行走图 ...

其实还是需要的()
有一种非常简单粗暴的方法,就是把地图的尺寸设置成20*15,把玩家定在视野中央,让视野永远不会变化
但是地图太小了,所以不得不改一个视野转移至NPC脚本出来
作者: 灯笼菜刀王    时间: 2025-4-12 16:36
本帖最后由 灯笼菜刀王 于 2025-4-12 16:38 编辑


▲是要这样的吧, 不过我这个是XP且被我魔改过,你是不能直接用我的方法做,自己改吧

镜头要跟随事件移动, 主要是game player的 update_scroll ,这个方法, 参考game player 的update 把它挪到game characterbase 里, 然后,搞个变量用来记录谁扛摄像头, 谁扛谁调用update_scroll即可

---建议分割线----------------------------------------------------

如果你只是固定在指定事件上,且用事件操作事件移动, 那大可把player透明+穿透, 同步到事件处,移动事件时一起移动player就行了,不需要去改造默认脚本(emm,可能要改一下player的按键移动)

另外, 你想做啥类型的游戏? 双人模式的话, 切换视角的玩法并不适合双人玩, 毕竟你跟随一方让另一方盲打不成?

要双人模式, 那视角设置有三种比较好

1,街机式, 这个视角是固定在两个player中间, 而两个player只能在屏幕范围内移动,  这种做法需要 改一下 valid? ,限定player的移动范围, 同时改变 update_scroll , 让其@real_x @real_y 取两个player的中间值, 算法嘛...自己想吧

2,分屏式, 这个做法是在scene map里再搞个@spriteset2,  然后在update里用另一个值来控制地图滚动, 当然视口之类的也要重新调整下(还有估计整个滚动算法都要重写,笑)

3,主次式, 即2P只能在1P周围活动, 那只要限制2P的移动范围就可以了,其他照旧,这个方法应该做简单吧, 笑

※免责声明,以上做法都是即时脑补的初级做法参考, 并没进行过任何实际操作, 请根据实际情况自己应对




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1