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

Project1

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

[已经解决] 我优化的卫星脚本后,求再优化一个效果

[复制链接]

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
跳转到指定楼层
1
发表于 2016-3-13 16:53:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
下面是我在论坛找的卫星地图脚本。
有更改了两个地方。
第一个地方是我想在移动的时候播放一个动画,移动结束后右播放一个动画(就像口袋妖怪飞行那种)。但我不会用用脚本写,所以我改成了事件执行。
第二个地方是我的地图大小不是640*480,用原脚本的情况下,剩余位置是黑色。我加了两段脚本,改成了透明。
在脚本这块我是新手,所以有一个功能想求论坛的大大帮我实现。
这个脚本,当没有选择地方,地图和名字都还会在屏幕上。
我想优化这个功能再使用。
改成只选定地点时,图片和文字才会出现,离开之后,图片和文字消失。希望有大大帮忙!
  1. ALLMAP = 1 #记录已开启地图的变量的ID。
  2. FR  = 20 #聚焦半径,当交叉点的坐标离地图目标距离在20个像素以内时,会自动移动靠近。
  3. module SATEMAP
  4.   #定义目标地图,举例:
  5.   #TAGMAP[1] = [400,139,14,4,8]
  6.   #意思:
  7.   #TAGMAP[地图ID] = [卫星的x点,卫星的y点,要飞行地图的x点,要飞行地图的y点,面向]
  8.   #1表示,400和139表示点在大地图上的坐标,14和4表示场所移动后的坐标。8是朝向。
  9.   #也就是说,当横轴与纵轴的交叉点坐标为400,139时,玩家按下确定键,角色就会面朝上移动到
  10.   #1号地图坐标为14,4的地点。
  11.   TAGMAP = []
  12.   TAGMAP[2] = [168,296,16,16,2]#真新镇,面朝下
  13. end
  14. #==============================================================================
  15. # ■ Scene_Satellite
  16. #------------------------------------------------------------------------------
  17. #  处理卫星地图画面
  18. #==============================================================================
  19. class Scene_Satellite
  20.   #--------------------------------------------------------------------------
  21.   # ● 初始化对像
  22.   #--------------------------------------------------------------------------
  23.   def initialize
  24.     @allmap_id = $game_variables[ALLMAP]
  25.     @focus = 0
  26.     @map_id = $game_map.map_id
  27.     @tag_lock = false
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 主处理
  31.   #--------------------------------------------------------------------------
  32.   def main
  33.     screen = Spriteset_Map.new
  34.     # 创建背景
  35.     @back = Sprite.new
  36.     @back.bitmap = Bitmap.new("Graphics/Systems/back")
  37.     # 创建X轴
  38.     @mm_x = Sprite.new
  39.     @mm_x.bitmap = Bitmap.new("Graphics/Systems/mm_x")
  40.     @mm_x.y = SATEMAP::TAGMAP[@map_id][1]
  41.     # 创建Y轴
  42.     @mm_y = Sprite.new
  43.     @mm_y.bitmap = Bitmap.new("Graphics/Systems/mm_y")
  44.     @mm_y.x = SATEMAP::TAGMAP[@map_id][0]
  45.     # 创建地点缩略图
  46.     @mm_icon = Sprite.new
  47.     @mm_icon.bitmap = Bitmap.new("Graphics/Systems/Icon/"+@map_id.to_s)
  48.     @mm_icon.x = 15
  49.     @mm_icon.y = 232
  50.     # 创建地名
  51.     @mm_name = Sprite.new
  52.     @mm_name.bitmap = Bitmap.new("Graphics/Systems/Name/"+@map_id.to_s)
  53.     @mm_name.x = 60
  54.     @mm_name.y = 380
  55.      # 执行过度
  56.     Graphics.transition(30, "Graphics/Transitions/卫星" )
  57.     # 主循环
  58.     loop do
  59.       # 刷新游戏画面
  60.       Graphics.update
  61.       # 刷新输入信息
  62.       Input.update
  63.       # 刷新画面
  64.       update
  65.       # 如果画面切换就中断循环
  66.       if $scene != self
  67.         break
  68.       end
  69.     end
  70.     # 装备过渡
  71.     Graphics.freeze
  72.     # 释放窗口
  73.     @back.dispose
  74.     @mm_x.dispose
  75.     @mm_y.dispose
  76.     @mm_name.dispose
  77.     @mm_icon.dispose
  78.     screen.dispose
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 刷新画面
  82.   #--------------------------------------------------------------------------
  83.   def update
  84.     @mm_icon.bitmap = Bitmap.new("Graphics/Systems/Icon/"+@map_id.to_s)
  85.     @mm_name.bitmap = Bitmap.new("Graphics/Systems/Name/"+@map_id.to_s)
  86.     disjudge
  87.     # 按下 X 键的情况下
  88.     if Input.trigger?(Input::B)
  89.       # 演奏取消 SE
  90.      $game_system.se_play($data_system.cancel_se)
  91.      $scene = Scene_Map.new
  92.       return
  93.     end
  94.     #值可以随便定,但是要比校正范围小一定的值。
  95.     if Input.press?(Input::LEFT)   
  96.       if @mm_y.x>0
  97.       @mm_y.x -= 3
  98.       end
  99.      end
  100.     if Input.press?(Input::RIGHT)
  101.      if @mm_y.x<640
  102.       @mm_y.x += 3
  103.       end
  104.      end
  105.     if Input.press?(Input::UP)
  106.       if @mm_x.y>0
  107.       @mm_x.y -= 3
  108.      end
  109.     end
  110.     if Input.press?(Input::DOWN)
  111.       if @mm_x.y<480
  112.       @mm_x.y += 3
  113.       end
  114.     end
  115.     if Input.trigger?(Input::C)
  116.       if @tag_lock
  117.       $game_system.se_play($data_system.decision_se)
  118.       #$game_screen.start_tone_change(Tone.new(-255,-255,-255,0), 0)
  119.       $scene = Scene_Map.new
  120.       $game_variables[24] = SATEMAP::TAGMAP[@map_id][2]
  121.       $game_variables[25] = SATEMAP::TAGMAP[@map_id][3]
  122.       $game_temp.common_event_id = 951
  123.       #$game_temp.player_transferring = true
  124.       #$game_temp.player_new_map_id = @map_id
  125.       #$game_temp.player_new_x=SATEMAP::TAGMAP[@map_id][2]
  126.       #$game_temp.player_new_y=SATEMAP::TAGMAP[@map_id][3]
  127.       #$game_temp.player_new_direction = SATEMAP::TAGMAP[@map_id][4]  
  128.       #$game_screen.start_tone_change(Tone.new(0,0,0,0), 10)
  129.       else
  130.         $game_system.se_play($data_system.buzzer_se)
  131.       end
  132.     end
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 实时判断
  136.   #--------------------------------------------------------------------------
  137.   def disjudge
  138.     for i in @allmap_id
  139.       ax = SATEMAP::TAGMAP[i][0]
  140.       ay = SATEMAP::TAGMAP[i][1]
  141.       x = @mm_y.x
  142.       y = @mm_x.y
  143.       f = FR**2
  144.       dis = (x-ax)**2 + (y-ay)**2
  145.       #自动校正范围,默认16个像素,根据大地图来定。
  146.       if dis <= f
  147.         if x> ax
  148.           @mm_y.x-=1
  149.         elsif x< ax
  150.           @mm_y.x+=1
  151.         end
  152.         if y> ay
  153.           @mm_x.y-=1
  154.         elsif y< ay
  155.           @mm_x.y+=1
  156.         end
  157.         @map_id = i
  158.       end
  159.       dis2 = (x-SATEMAP::TAGMAP[@map_id][0])**2 + (y-SATEMAP::TAGMAP[@map_id][1])**2
  160.       if dis2 < f
  161.         @tag_lock = true
  162.       else
  163.         @tag_lock = false
  164.         end
  165.     end
  166.   end
  167. end
复制代码

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
2
 楼主| 发表于 2016-3-13 17:23:09 | 只看该作者
自己解决了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 15:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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