查看: 4395|回复: 2

[已经解决] 如何在地图左上角显示 地图名和 坐标XY

[复制链接]

阿飞

梦石
0
星屑
68
在线时间
232 小时
注册时间
2010-8-27
回帖
800
发表于 2014-8-5 18:36:35 | 显示全部楼层 |阅读模式

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

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

×
图样是个椭圆样的   效果图如图
QQ图片20140805183513.jpg

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-8-5 19:35:08 | 显示全部楼层
本帖最后由 taroxd 于 2014-8-5 20:14 编辑

调坐标这种事情自己去干,在40~42行
23号开关开启时启用效果。开关ID在脚本第36行设置
默认效果如图: 搜狗截图_2014-08-05_19-48-07.png
@Cache  

[pre lang="ruby" line="1"]

module Cache
  @cache ||= {}
  def self.ellipse(a, b, color)
    key = [:ellipse, a, b, color]
    unless include?(key)
      @cache[key] = bitmap = Bitmap.new(2 * a, 2 * b)
      0.step(2*Math::PI, 0.01) do |theta|
        bitmap.set_pixel((a+a*Math.cos(theta)).to_i,
          (b+b*Math.sin(theta)).to_i, color)
      end
    end
    @cache[key]
  end
end

class Spriteset_Map
  alias cs_20140805 create_shadow
  def create_shadow
    cs_20140805
    @ellipse_sprite = Sprite.new
    a, b, c = 50, 40, Color.new(255,0,0)
    @ellipse_sprite.bitmap = Cache.ellipse(a,b,c).clone
    @ellipse_sprite.bitmap.fill_rect(0, b, 2*a, 1, c)
    @mapinfo_sprite = Sprite.new
    @mapinfo_sprite.bitmap = Bitmap.new(2*a, 2*b)
    @mapinfo_sprite.bitmap.font.size = 16
    @ellipse_sprite.x = 10
    @ellipse_sprite.y = 10
    @mapinfo_sprite.x = 10
    @mapinfo_sprite.y = 10
  end
  
  alias us_20140805 update_shadow
  def update_shadow
    us_20140805
    @mapinfo_sprite.visible = @ellipse_sprite.visible = $game_switches[23]
    if @mapinfo_to_draw != mapinfo_to_draw
      n, x, y = @mapinfo_to_draw = mapinfo_to_draw
      text = "X:#{x} Y:#{y}"
      b = @mapinfo_sprite.bitmap
      b.clear
      b.draw_text(0,20,b.width,20,n,1)
      b.draw_text(0,40,b.width,20,text,1)
    end
  end
  
  alias ds_20140805 dispose_shadow
  def dispose_shadow
    ds_20140805
    @ellipse_sprite.bitmap.dispose
    @ellipse_sprite.dispose
    @mapinfo_sprite.bitmap.dispose
    @mapinfo_sprite.dispose
  end
  
  def mapinfo_to_draw
    [$game_map.display_name, $game_player.x, $game_player.y]
  end
end[/pre]      

点评

原来如此  发表于 2014-8-5 21:08
地图名显示的是地图的“显示名称”,你确定不是空的吗?  发表于 2014-8-5 21:00
这个我知道 坐标都显示了 , 地图名没显示  发表于 2014-8-5 20:57
23号开关开启时启用效果。开关ID在脚本第36行设置  发表于 2014-8-5 20:42
为什么我的没有显示地图名字  发表于 2014-8-5 20:40

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 @Cache

查看全部评分

回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-8-5 19:41:01 | 显示全部楼层
本帖最后由 余烬之中 于 2014-8-5 19:45 编辑

使用方法
把下面的脚本安装好,然后在Graphics/System下放一个图片 名字可以自己调整 默认为"Mapname"
脚本会用这个图片做背景 在上面绘制文字
可以设置一个键 当按下这个键的时候 会显示/隐藏地图名显示
图片示例
Mapname.png
基本格式是这样:上面一块会居中描绘地图名 下面一块居中描绘坐标(以"(X, Y)"的形式)
中间的分隔线 宽度为2px
此外对图片的宽度、高度没有要求 推荐宽度在150左右 高度在60左右
你想要的椭圆就要你自己画了 毕竟我不知道你喜欢怎样的椭圆 画丑了你也不满意的
脚本
[fold][pre lang="ruby" line="1"]#==============================================================================
# ** Window_Mapname
#==============================================================================
class Window_Mapname < Window_Base
  KEY = :Y
  # 按下哪个键会切换显示/不显示
  # :Y代表"S"键
  BITMAPNAME = "Mapname"
  # 图片的文件名 图片应该放在Graphics/System下
  def initialize
    @src= Cache.system(BITMAPNAME)
    off = standard_padding
    super(-off, -off, @src.rect.width + 2 * off, @src.rect.height + 2 * off)
    self.opacity = 0
    self.contents_opacity = 255
    refresh
  end
  def update
    super
    if !close?
      close if Input.trigger?(KEY)
      refresh if need_refresh?
    elsif Input.trigger?(KEY)
      open
      refresh
    end
  end
  def need_refresh?
    $game_player.x != @x || $game_player.y != @y || $game_map.map_id != @map_id
  end
  def refresh
    @x, @y, @map_id = $game_player.x, $game_player.y, $game_map.map_id
    contents.clear
    contents.blt(0, 0, @src, @src.rect)
    width, height = @src.rect.width, @src.rect.height / 2 - 1
    contents.draw_text(0, 0, width, height, $game_map.display_name, 1)
    contents.draw_text(0, height + 2, width, height, "(#{@x}, #{@y})", 1)
  end
end
#==============================================================================
# ** Scene_Map
#==============================================================================
Scene_Map = Class.new Scene_Map do
  def create_all_windows
    super
    create_mapname_window
  end
  def create_mapname_window
    @mapname_window = Window_Mapname.new
  end
  def call_menu
    @mapname_window.close
    super
  end
end[/pre][/fold]  

点评

你可以自己去掉……图片是完全自定义的  发表于 2014-8-5 20:17
这个有背景颜色  发表于 2014-8-5 20:10

评分

参与人数 2星屑 +1 梦石 +2 收起 理由
VIPArcher + 1 @src
taroxd + 1 + 1 @src

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部