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

Project1

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

[已经解决] 写了传送代码但是按下后无效

[复制链接]

Lv1.梦旅人

梦石
0
星屑
85
在线时间
8 小时
注册时间
2022-1-3
帖子
3
跳转到指定楼层
1
发表于 2023-2-22 08:52:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
游戏的内容是镜子里镜子外两个世界,使用道具后可以从表世界传送到里世界相同位置这样。
已经试过“使用第21个道具后自动执行传送”,“使用公共事件调用脚本”,和“判定拥有特殊道具后按下键盘上指定键自动执行传送”三个方法,均无效。
以下是第三种方法的代码。如果有人可以帮忙修改,有偿。搞定后会公开此脚本。
RUBY 代码复制
  1. module Input
  2.   Q = :X
  3. end
  4.  
  5. class Scene_Map
  6.   alias q_press_update update
  7.   def update
  8.     # Call the original update method
  9.     q_press_update
  10.     # Check if the Q key is pressed and if the player has the specific item
  11.     if Input.trigger?(Input::Q) && $game_party.item_number($data_items[21].id) > 0
  12.       # Get the current map ID, player coordinates and direction
  13.       map_id = $game_map.map_id
  14.       x = $game_player.x
  15.       y = $game_player.y
  16.       direction = $game_player.direction
  17.       # Calculate the target map ID based on the current map ID
  18.       if map_id < 40
  19.         target_map_id = map_id + 17
  20.       else
  21.         target_map_id = map_id - 17
  22.       end
  23.       # Play the teleport SE
  24.       $game_system.se_play($data_system.teleport_se)
  25.       # Reserve the transfer to the target map
  26.       $game_player.reserve_transfer(target_map_id, x, y, direction)
  27.       # Clear the scene variable to return to the map scene
  28.       $scene = nil
  29.     end
  30.   end
  31. end

Lv1.梦旅人

梦石
0
星屑
85
在线时间
8 小时
注册时间
2022-1-3
帖子
3
2
 楼主| 发表于 2023-2-22 09:01:17 | 只看该作者
稍微简单说明一下(发太急忘了)
代码大致分成这样:
先判断有没有特殊道具(我这里是道具栏的第21个道具)
然后获取当前地图的id,主角的朝向,x坐标和y坐标。
因为我的游戏里表世界和里世界是挨着的,比如1-10是表世界,10-20就是里世界,所以这个地方执行一下判断,判断当前地图id是不是<11(代码里是<40)
如果小于11,则按下q后+10跳转到里世界相同位置,不是就-10跳转到表世界相同位置。
最后还有一个传送音效,瞎写的。
我是新人,如果对各位大佬的话没有理解的话还麻烦多包容,不好意思啊……
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37789
在线时间
5399 小时
注册时间
2006-11-10
帖子
6546
3
发表于 2023-2-22 10:12:42 | 只看该作者
暂且不管 $game_player.reserve_transfer(target_map_id, x, y, direction) 这个函数有没有定义以及有没有效果

你写的脚本按键无效的原因是 "无法触发" , 如果你想按键盘上的Q来触发, 那写法是 Input.trigger?(17)  或者第二行改成  Q = 17 (XP的默认键位设置)

顺便提醒下 $scene = nil 是退出游戏

如果想使用道具触发, 那直接让道具关联公共事件, 在公共事件里用事件处理场所移动即可
写法
变量1 = 主角.X
变量2 = 主角.Y
脚本:
a = $game_map.map_id
$game_variables[3]=a<40 ? a+17:a-17      
事件: 场所移动
中间随便你插音效动画啥的

附赠: 镜像世界应该是左右颠倒的吧? 如果想"传送到颠倒的世界同一个位置, 而你的地图画法就是直接左右颠倒",  那传送点X改成:  $game_map.width - $game_player.x

评分

参与人数 2星屑 +50 +1 收起 理由
guoxiaomi + 50 认可答案
Tsurumi蚀殇 + 1 认可答案

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
85
在线时间
8 小时
注册时间
2022-1-3
帖子
3
4
 楼主| 发表于 2023-2-22 12:28:38 | 只看该作者
灯笼菜刀王 发表于 2023-2-22 10:12
暂且不管 $game_player.reserve_transfer(target_map_id, x, y, direction) 这个函数有没有定义以及有没有 ...

还是我功力不足了,呜呜呜谢谢大佬指点,感觉豁然开朗了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1237
在线时间
163 小时
注册时间
2019-10-4
帖子
217
5
发表于 2023-3-10 17:56:19 | 只看该作者
本帖最后由 契约师Vi 于 2023-3-10 17:59 编辑

可以试试用我写的传送TP
  1. #==============================================================================
  2. # ■ Scene_Tp
  3. #------------------------------------------------------------------------------
  4. #  地图传送技能脚本界面
  5. #==============================================================================
  6. #召唤界面:$scene = Scene_Tp.new
  7. class Scene_Tp
  8.   #--------------------------------------------------------------------------
  9.   # ● 主处理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     # 生成命令窗口
  13.     s1 = "地点一"
  14.     s2 = "地点二"
  15.     s3 = "地点三"
  16.     s4 = "返 回"      
  17.     @command_window = Window_Command.new(192, [s1, s2, s3, s4])
  18.     @command_window.x = 504 - @command_window.width / 2
  19.     @command_window.y = 180
  20.     @command_window.back_opacity = 225
  21.     #地图作为背景
  22.     @sprite = Spriteset_Map.new
  23.     @tp_window = Window_Base.new(375,90,260,64)
  24.     @tp_window.contents=Bitmap.new(@tp_window.width-32,@tp_window.height)
  25.     @tp_window.contents.font.size=22
  26.     @tp_window.contents.font.color = @tp_window.normal_color
  27.     @tp_window.contents.font.name = "黑体"
  28.     @tp_window.contents.draw_text(4, 4, 280, 25, " 选择所要前往的地点")
  29.     @tp_window.back_opacity = 225
  30.     #--------------------------------------------------------------------------
  31.     Graphics.transition
  32.     # 主循环
  33.     loop do
  34.       # 刷新游戏画面
  35.       Graphics.update
  36.       # 刷新输入信息
  37.       Input.update
  38.       # 刷新画面
  39.       update
  40.       # 如果画面被切换就中断循环
  41.       if $scene != self
  42.         break
  43.       end
  44.     end
  45.     # 装备过渡
  46.     Graphics.freeze
  47.     # 释放命令窗口
  48.     @command_window.dispose
  49.     # 释放标题图形
  50.     @tp_window.dispose
  51.     @sprite.dispose#地图作为背景
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 刷新画面
  55.   #--------------------------------------------------------------------------
  56.   def update
  57.     # 刷新命令窗口
  58.     @command_window.update
  59.        # 按下 B 键的情况下
  60.     if Input.trigger?(Input::B)
  61.       # 演奏取消 SE
  62.       $game_system.se_play($data_system.cancel_se)
  63.       # 切换的地图画面
  64.       $scene = Scene_Map.new
  65.       return
  66.     end
  67.     # 按下 C 键的情况下——C等于空格键
  68.     if Input.trigger?(Input::C)
  69.       # 命令窗口的光标位置的分支
  70.       case @command_window.index
  71.       when 0 #地点一
  72.        $game_map.setup($game_new_map_id=3)#地图ID
  73.        $game_player.moveto($game_new_x=11, $game_new_y=11)#地图x坐标,地图y坐标
  74.        $scene = Scene_Map.new
  75.       when 1  # 地点二
  76.        $game_map.setup($game_new_map_id=1)
  77.        $game_player.moveto($game_new_x=11, $game_new_y=11)
  78.        $scene = Scene_Map.new
  79.         # 刷新主角
  80.         $game_player.refresh
  81.       when 2  # 地点三
  82.        $game_map.setup($game_new_map_id=2)
  83.        $game_player.moveto($game_new_x=11, $game_new_y=11)
  84.        $scene = Scene_Map.new
  85.        # 刷新主角
  86.         $game_player.refresh
  87.        when 3  # 返回
  88.           $scene = Scene_Map.new
  89.       
  90.         # 刷新主角
  91.        $game_player.refresh
  92.       end
  93.     end
  94.   end
  95. end

复制代码

评分

参与人数 2+2 收起 理由
Tsurumi蚀殇 + 1 认可答案
guoxiaomi + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 14:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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