设为首页 收藏本站
登录 /立即注册 /找回密码

URPGs

快捷导航
  • 门户Portal
  • 论坛BBS
  • 群组Group
  • 导读Guide
  • 家园Space
  • 工具Tools
  • 广播Follow
  • 期刊Periodical
  • 排行榜Ranklist
  • 社区茶坊
  • pixlr图片编辑
  • 资源列表
  • photobucket
  • RMVA Lite [In English]
  • RM RTP
  • TryRUBY
  • RMXP+RMVX下载[VeryCD]
  • RMVA下载[66RPG]
搜索
  • 本版
  • 帖子
  • 用户
URPGs»论坛 › 技术讨论 › 教程 › 简易的坐标标定法,做UI时可用
返回列表 发新帖
查看: 4165|回复: 4

简易的坐标标定法,做UI时可用

[复制链接]
Ruby200
Ruby200 当前离线
积分
3
查看详细资料 窥视卡 雷达卡
发表于 2013-5-6 11:50:50 | 显示全部楼层 |阅读模式
教程
适用于: RPG Maker VX Ace 
教程类型: 脚本教程 
难度水平: 进阶
转载许可: 允许,但需要在转载时注明原出处
本帖最后由 Ruby200 于 2013-5-6 12:44 编辑

有时候自己做UI脚本需要确定血槽等的位置,为了方便也可以用下面的方法

如果你有PS,FW等工具,可能已经自带了这个功能,又或者使用图层,就无需用原图了

首先截个图,外框多一点少一点无所谓,但是需要的区域要截图出来,然后左上角点上某个特殊颜色,其他需要标记的地方也点上特殊颜色,以后,就用这个特殊颜色来表示要知道坐标的点。

这个画图就能完成,为了精确也可以开放大模式或者使用其他工具
31.png

记得把VA绘图区域左上角的位置也点出来,以后方便计算
32.png

然后用下面的脚本把这个图片中的特殊点的位置提取出来,然后进一步利用吧
[code=ruby]class Notation
  attr_accessor :data
  def initialize(bmp)
    @bmp = Bitmap.new(bmp)
    @addr = DL::dlwrap @bmp
    @addr = DL::CPtr[@addr][16, 4].unpack("L").first
    @addr = DL::CPtr[@addr][8, 4].unpack("L").first
    @addr = DL::CPtr[@addr][16, 4].unpack("L").first
    @addr = DL::CPtr[@addr]
    @data = {}
  end
  
  def dispose
    @bmp.dispose     
  end
   
  def getdata(color = nil)
    color ||= @bmp.get_pixel(0, 0)
    y = @addr[0, @bmp.width * @bmp.height * 4]
    u = [color.blue, color.green, color.red, color.alpha].map(&:to_i).pack("C*")
    @data[color] ||= begin
      a = []
      0.step(y.length, 4){|x|
        a << x / 4 if y[x, 4] == u
      }
      width, height = @bmp.width, @bmp.height
      a.map!{|c| [c % width, height - 1 - c / width ] }.sort!
      a
    end
  end
  
end
[/code]

测试
[code=ruby]
x = Notation.new("1.png")
msgbox x.getdata
x.dispose
[/code]

效果:
313.png

评分

参与人数 1金币 +1 收起 理由
Sonic1997 + 1 触=A=

查看全部评分

回复

使用道具 举报

  • 提升卡
  • 置顶卡
  • 沉默卡
  • 喧嚣卡
  • 变色卡
  • 抢沙发
  • 千斤顶
  • 显身卡
lbq
lbq 当前离线
积分
199
查看详细资料 窥视卡 雷达卡
发表于 2013-5-6 12:26:49 | 显示全部楼层
看了许久才看明白脚本。。果然我还是太渣了吗。。。
不过好厉害的样子。。不过我一般不用绝对坐标的呢嗯

点评

satgo1546
不用绝对坐标+1  发表于 2013-5-6 18:14
Ruby200
另外 直接用get_pixel也很快 VA的效率比XPVX高了很多 这个只是稍微再快了一点点  发表于 2013-5-6 12:36
Ruby200
可以随便用一个点作为基点 剩下的相对于他点绝对坐标……减掉之后得到相对坐标的数据,比如人物状态对话框肯定不止一项……  发表于 2013-5-6 12:35
回复 Like Dislike

使用道具 举报

  • 显身卡
烁灵
烁灵 当前离线
积分
23
查看详细资料 窥视卡 雷达卡
发表于 2013-5-6 12:28:12 | 显示全部楼层
← ←一般用QQ截图来定坐标...

点评

Ruby200
嘿嘿  发表于 2013-5-6 12:35
回复 Like Dislike

使用道具 举报

  • 显身卡
Sonic1997
Sonic1997 当前离线
积分
212
查看详细资料 窥视卡 雷达卡
发表于 2013-5-6 13:01:38 | 显示全部楼层
居然只有30行=A=
(←这渣虽然不懂脚本但还是能看懂原理...
太触了..
回复 Like Dislike

使用道具 举报

  • 显身卡
satgo1546
satgo1546 当前离线
积分
201
查看详细资料 窥视卡 雷达卡
发表于 2013-5-6 18:16:18 | 显示全部楼层
对BMP处理直接略过
直接读取好然后依次getpixel好像的确很快=w=
但是!如果游戏画面本身就有这个“特殊颜色”——

点评

Sonic1997
那么是你的设置问题=w=  发表于 2013-5-6 22:07
回复 Like Dislike

使用道具 举报

  • 显身卡
返回列表 发新帖
高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

浏览过的版块

  • 茶馆

站点统计|Archiver|手机版|意见反馈[feedback]| URPGs RPG Maker 游戏制作讨论

GMT+8, 2025-7-4 02:34 , Processed in 0.019850 second(s), 9 queries .

Powered by Discuz! X3.5

© 2011-2019 URPGs (Discuz! X3.4 © 2001-2019 Comsenz Inc.)

积分 0, 距离下一级还需 积分
快速回复 返回顶部 返回列表