Project1

标题: 在一个Window类xy坐标的确定 [打印本页]

作者: Majirefy    时间: 2012-4-19 00:49
标题: 在一个Window类xy坐标的确定
本帖最后由 Majirefy 于 2012-4-19 15:12 编辑

自己心血来潮写了修改脚本的时候,发现以前一直没有注意的一个问题……终于想起来提问了。
在一个Window中,如何确定内部新定义的Rect的坐标。

Rect.new(x, y, width, height) →这个Rect的new方法,可是x和y分别应该填入什么呢?
具体说一下,上图:


咳咳咳,可以依稀看到那个“小镇”文字的右上角有一个白色的Rect,预期的效果是这个白条在文字下面,类似下划线,然后采用过度效果,类似Window_MapName中定义两个Rect的渐变,镜面对称,变成看起来一个两边都渐变的直线……(好吧,也许我说得没有让人听懂……)
自己改造了一下Window_MapName代码:
  1. #==============================================================================
  2. # ** Window_MapName
  3. #------------------------------------------------------------------------------
  4. #  This window displays the map name.
  5. #==============================================================================

  6. class Window_MapName < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # * Settings
  9.   #--------------------------------------------------------------------------
  10.   FONT_NAME   = ["MingLiU", "FangSong"]   # Font Name
  11.   FONT_SIZE   = 36                        # Font Size
  12.   FONT_BOLD   = true                      # Font Bold
  13.   PADDING     = 12                        # Padding between the window's frame and contents
  14.   LINE_HEIGHT = 4                         # Height of Line
  15.   #--------------------------------------------------------------------------
  16.   # * Object Initialization
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     super(((Graphics.width - window_width) / 2),
  20.       ((Graphics.height - (FONT_SIZE + PADDING * 2)) / 2), window_width, FONT_SIZE + PADDING * 2)
  21.     contents.font.name = FONT_NAME
  22.     contents.font.size = FONT_SIZE
  23.     contents.font.bold = FONT_BOLD
  24.     self.opacity = 0
  25.     self.contents_opacity = 0
  26.     @show_count = 0
  27.     refresh
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # * Get Window Width
  31.   #--------------------------------------------------------------------------
  32.   def window_width
  33.     return Graphics.width
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # * Frame Update
  37.   #--------------------------------------------------------------------------
  38.   def update
  39.     super
  40.     if @show_count > 0 && $game_map.name_display
  41.       update_fadein
  42.       @show_count -= 1
  43.     else
  44.       update_fadeout
  45.     end
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # * Update Fadein
  49.   #--------------------------------------------------------------------------
  50.   def update_fadein
  51.     self.contents_opacity += 16
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # * Update Fadeout
  55.   #--------------------------------------------------------------------------
  56.   def update_fadeout
  57.     self.contents_opacity -= 16
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # * Open Window
  61.   #--------------------------------------------------------------------------
  62.   def open
  63.     refresh
  64.     @show_count = 150
  65.     self.contents_opacity = 0
  66.     self
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # * Close Window
  70.   #--------------------------------------------------------------------------
  71.   def close
  72.     @show_count = 0
  73.     self
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # * Refresh
  77.   #--------------------------------------------------------------------------
  78.   def refresh
  79.     contents.clear
  80.     unless $game_map.display_name.empty?
  81.       draw_background(contents.rect)
  82.       draw_text(contents.rect, $game_map.display_name, 1)
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # * Draw Background
  87.   #--------------------------------------------------------------------------
  88. #~   def draw_background(rect)
  89. #~     temp_rect = rect.clone
  90. #~     temp_rect.width /= 2
  91. #~     temp_rect.y = FONT_SIZE - PADDING
  92. #~     temp_rect.height = LINE_HEIGHT
  93. #~     contents.gradient_fill_rect(temp_rect, back_color2, back_color1)
  94. #~     temp_rect.x = temp_rect.width
  95. #~     contents.gradient_fill_rect(temp_rect, back_color1, back_color2)
  96. #~   end
  97.   def draw_background(rect)
  98.     temp_rect = Rect.new(0, 0, self.width, LINE_HEIGHT)
  99.     p temp_rect.x
  100.     p temp_rect.y
  101.     contents.gradient_fill_rect(temp_rect, back_color2, back_color1)
  102.     temp_rect.x = temp_rect.width
  103.     contents.gradient_fill_rect(temp_rect, back_color1, back_color2)
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # * Get Background Color 1
  107.   #--------------------------------------------------------------------------
  108.   def back_color1
  109.     Color.new(255, 255, 255, 220)
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # * Get Background Color 2
  113.   #--------------------------------------------------------------------------
  114.   def back_color2
  115.     Color.new(255, 255, 255, 0)
  116.   end
  117. end
复制代码
从第86行到105行是用来画那个渐变直线的。
100行和101行用了两个p函数显示一下我新建的那个temp_rect当前坐标,肯定是(0, 0):

可是现实出来这么感觉肯定不是(0, 0)呢……
所以这个坐标系的原点到底是基于哪个的呢……?


叽里呱啦这么多,还多些耐心看下去……
dsu_plus_rewardpost_czw

ToAsk3.png (288.4 KB, 下载次数: 64)

ToAsk3.png

作者: 凌童鞋    时间: 2012-4-19 06:27
我想知道你到底在问什么= =……
作者: orzfly    时间: 2012-4-19 11:22
原点在那个窗口的左上角处。你可以把self.opacity = 0改成255就可以看到窗口边框了。
作者: Majirefy    时间: 2012-4-19 11:41
我不知道为什么……这么编辑这个帖子都是这样子……


‘‘──Majirefy于2012-4-19 11:41补充以下内容

我怎么编辑这个帖子都是这个样子………………
明明写了很多的说……
’’
作者: 吉井明久    时间: 2012-4-19 13:47
Majirefy 发表于 2012-4-19 11:41
我不知道为什么……这么编辑这个帖子都是这样子……

把代码框的pre lang="ruby" line="1"换成code,/pre换成/code
作者: Majirefy    时间: 2012-4-19 16:56
orzfly 发表于 2012-4-19 11:22
原点在那个窗口的左上角处。你可以把self.opacity = 0改成255就可以看到窗口边框了。 ...

能帮忙提示一点……修改了opacity这个窗口就会一直在屏幕上……
这个之间关系或者是怎么调用的呢……(搜索教程的话,怎么搜索呢……)
作者: 吉井明久    时间: 2012-4-19 18:15
Majirefy 发表于 2012-4-19 16:56
能帮忙提示一点……修改了opacity这个窗口就会一直在屏幕上……
这个之间关系或者是怎么调用的呢……(搜 ...

RPG Maker VX Ace 的帮助文件里面搜索 Window 吧。
不过那里好像是日文版暂时还没有翻译。
那么可以找个 RPG Maker VX 的看看,几乎是一样的。
如果没有的话,论坛里面有。页面上导航栏有个隙间,下拉菜单里面有。
作者: yaojinbao    时间: 2012-4-20 21:42
表示路过……




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