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

Project1

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

[已经解决] 放大游戏画面内容(比例)是否能实现

 关闭 [复制链接]

Lv6.析梦学徒

梦石
0
星屑
56096
在线时间
269 小时
注册时间
2010-6-16
帖子
982
跳转到指定楼层
1
发表于 2011-3-12 19:22:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  我是想制作放大镜的效果,就是放大画面比例的脚本,比如说“缩放级别120%”什么的。
但是究竟能不能实现啊= =?
于是静静等待ing{:nm_3:}
◇◆舒克君赛高◆◇

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
9
发表于 2011-3-13 17:21:02 | 只看该作者
本帖最后由 沙漠点灰 于 2011-3-13 17:24 编辑

回复 纸飞机哟 的帖子

我又来了,只不过这次带了东西....
下面代码置顶
  1. def Graphics.zoom=(zomm)
  2.    $zoom = zomm
  3.    $myfirst = 'myGod'  
  4.    宽度=(640*$zoom).to_i
  5.    高度=(480*$zoom).to_i
  6.    游戏ini名=".\\Game.ini"
  7.    val = "\0"*256
  8.    gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
  9.    gps.call("Game", "Title", "", val, 256, 游戏ini名)
  10.    val.delete!("\0")
  11.    title = val
  12.    fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
  13.    hWnd = fw.call("RGSS Player", title)
  14.    swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')

  15.    pointwds = [0,0,0,0].pack('llll')
  16.    pointcet = [0, 0].pack('ll')

  17.    wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
  18.    client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')

  19.    wdsrect.call(hWnd,pointwds)
  20.    client_screen.call(hWnd, pointcet)

  21.    wds = pointwds.unpack('llll')
  22.    cet = pointcet.unpack('ll')

  23.    addw =  wds[2] - wds[0] - 640
  24.    addh =  wds[3] - wds[1] - 480

  25.    x = wds[0] - (宽度 - 640) / 2
  26.    y = wds[1] - (高度 - 480) / 2

  27.    swp.call(hWnd, 0, x, y, 宽度 + addw, 高度 + addh, 0x20)
  28.    
  29. end
复制代码
下面的代码还是置顶,只不过在上面代码的下面
  1. Graphics.zoom=(1.2)
  2. # 平面类
  3. class Plane
  4.   # X放大率
  5.   alias dust_zoom_x= zoom_x=
  6.   def zoom_x=(zoom_x_o)
  7.     zoom_x_o *= $zoom
  8.     self.dust_zoom_x=(zoom_x_o)
  9.   end
  10.   # Y放大率
  11.   alias dust_zoom_y= zoom_y=
  12.   def zoom_y=(zoom_y_o)
  13.     zoom_y_o *= $zoom
  14.     self.dust_zoom_y=(zoom_y_o)
  15.   end
  16.   # oX
  17.   alias dust_ox= ox=
  18.   def ox=(ox_o)
  19.     ox_o *= $zoom
  20.     self.dust_ox= ox_o
  21.   end
  22.   # oY
  23.   alias dust_oy= oy=
  24.   def oy=(oy_o)
  25.     oy_o *= $zoom
  26.     self.dust_oy= oy_o
  27.   end
  28. end
  29. # 矩形
  30. class Rect
  31.   alias dust_initialize initialize
  32.   def initialize(x, y, width, height)
  33.     x     *= $zoom
  34.     y     *= $zoom
  35.     width *= $zoom
  36.     height*= $zoom
  37.     dust_initialize(x, y, width, height)
  38.   end
  39. end
  40. # 位图类
  41. class Bitmap
  42.   alias dust_initialize initialize
  43.   def initialize(width, height=0)
  44.     if width.is_a?(Integer) or width.is_a?(Float)
  45.       width *= $zoom
  46.       height*= $zoom
  47.       dust_initialize(width, height)
  48.     else
  49.       dust_initialize(width)
  50.     end
  51.   end
  52.   alias dust_draw_text draw_text
  53.   def draw_text(x, y, width=0, height=0, str="", align=0)
  54.     if x.is_a?(Rect)
  55.       self.dust_draw_text(x,y,width)
  56.     else
  57.       x     *= $zoom
  58.       y     *= $zoom
  59.       width *= $zoom
  60.       height*= $zoom
  61.       self.dust_draw_text(x, y, width, height, str, align)
  62.     end
  63.   end
  64. end
  65. # 字体类
  66. class Font
  67.   alias dust_size= size=
  68.   def size=(size_o)
  69.     size_o *= $zoom
  70.     self.dust_size= size_o
  71.   end
  72. end
  73. # 窗口类
  74. class Window
  75.   # X
  76.   alias dust_x= x=
  77.   def x=(x_o)
  78.     x_o *= $zoom
  79.     self.dust_x= x_o
  80.   end
  81.   # Y
  82.   alias dust_y= y=
  83.   def y=(y_o)
  84.     y_o *= $zoom
  85.     self.dust_y= y_o
  86.   end
  87.   # width
  88.   alias dust_width= width=
  89.   def width=(width_o)
  90.     width_o *= $zoom
  91.     self.dust_width= width_o
  92.   end
  93.   # height
  94.   alias dust_height= height=
  95.   def height=(height_o)
  96.     height_o *= $zoom
  97.     self.dust_height= height_o
  98.   end
  99.   # oX
  100.   alias dust_ox= ox=
  101.   def ox=(ox_o)
  102.     ox_o *= $zoom
  103.     self.dust_ox= ox_o
  104.   end
  105.   # oY
  106.   alias dust_oy= oy=
  107.   def oy=(oy_o)
  108.     oy_o *= $zoom
  109.     self.dust_oy= oy_o
  110.   end
  111. end
  112. # 端口类
  113. class Viewport
  114.   alias dust_initialize initialize
  115.   def initialize(x, y, width, height)
  116.     begin
  117.       x     *= $zoom
  118.       y     *= $zoom
  119.       width *= $zoom
  120.       height*= $zoom
  121.     rescue
  122.       print"不能按F12"
  123.       exit
  124.     end
  125.     dust_initialize(x, y, width, height)
  126.   end
  127. end
  128. # 雪碧类
  129. class Sprite
  130.   # 初始化
  131.   alias dust_initialize initialize
  132.   def initialize(viewport=Viewport.new(0, 0, 640, 480))
  133.     dust_initialize(viewport)
  134.     self.zoom_x = 1.0
  135.     self.zoom_y = 1.0
  136.     self.x      = 0
  137.     self.y      = 0
  138.     self.ox     = 0
  139.     self.oy     = 0
  140.   end
  141.   # X放大率
  142.   alias dust_zoom_x= zoom_x=
  143.   def zoom_x=(zoom_x_o)
  144.     zoom_x_o *= $zoom
  145.     self.dust_zoom_x=(zoom_x_o)
  146.   end
  147.   # Y放大率
  148.   alias dust_zoom_y= zoom_y=
  149.   def zoom_y=(zoom_y_o)
  150.     zoom_y_o *= $zoom
  151.     self.dust_zoom_y=(zoom_y_o)
  152.   end
  153.   # X
  154.   alias dust_x= x=
  155.   def x=(x_o)
  156.     x_o *= $zoom
  157.     self.dust_x= x_o
  158.   end
  159.   # Y
  160.   alias dust_y= y=
  161.   def y=(y_o)
  162.     y_o *= $zoom
  163.     self.dust_y= y_o
  164.   end
  165.   # oX
  166.   alias dust_ox= ox=
  167.   def ox=(ox_o)
  168.     ox_o *= $zoom
  169.     self.dust_ox= ox_o
  170.   end
  171.   # oY
  172.   alias dust_oy= oy=
  173.   def oy=(oy_o)
  174.     oy_o *= $zoom
  175.     self.dust_oy= oy_o
  176.   end
  177. end
复制代码
第二个的第一行是放大率,这个脚本只能用一次
另外 Window_Selectable 中,所有的 32 改为 32 * $zoom
最后就是地图了,你知道怎么改吧....我就不改了,当然...放大率小于1.0时,不用改地图了,
大于1.0时才改(其实我不会放大地图,用stretch_blt之后,画面好壮观,马赛克....)
当然,很多bug(放大率小于1.0时,字被擦掉。。。)
附:工程    PS 按F12有惊喜
Project1.rar (189.16 KB, 下载次数: 236)

点评

真是辛苦了=。=  发表于 2011-3-13 22:11
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复

使用道具 举报

Lv6.析梦学徒

梦石
0
星屑
56096
在线时间
269 小时
注册时间
2010-6-16
帖子
982
8
 楼主| 发表于 2011-3-13 13:50:44 | 只看该作者
回复 幻想乡茶农 的帖子

给个句子吧- -
◇◆舒克君赛高◆◇
回复

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

7
发表于 2011-3-13 13:42:54 | 只看该作者
幻想乡茶农 发表于 2011-3-13 13:37
人物用zoom_x,zoom_y
元件用stretch_blt

= = 一次性改画面显示的全部东西啊……

点评

不是这个意思吗0. 0  发表于 2011-3-13 13:44
回复

使用道具 举报

Lv1.梦旅人

青山绿水长留生

梦石
0
星屑
50
在线时间
369 小时
注册时间
2010-12-17
帖子
442
6
发表于 2011-3-13 13:37:55 | 只看该作者
人物用zoom_x,zoom_y
元件用stretch_blt

点评

我就是想说挺费力……  发表于 2011-3-13 13:47
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42414
在线时间
7603 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

5
发表于 2011-3-13 08:03:17 | 只看该作者
不知道viewport有没有zoom_xy属性

点评

只知道Graphics没有……  发表于 2011-3-13 12:41
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1641
在线时间
2205 小时
注册时间
2010-6-27
帖子
1299
4
发表于 2011-3-13 07:47:45 | 只看该作者
截取整个画面(可以用截图脚本),rect框住一部分,再将他的精灵zoom_x, zoom_y 扩大……嗯大概就这样

点评

还需要动态的……?  发表于 2011-3-13 13:13
截下来的图片是不会随时刷新的。也就是说不切换底图就无法显示下一个截图  发表于 2011-3-13 12:21

于是我也广告下…
回复

使用道具 举报

Lv6.析梦学徒

梦石
0
星屑
56096
在线时间
269 小时
注册时间
2010-6-16
帖子
982
3
 楼主| 发表于 2011-3-12 21:46:47 | 只看该作者
回复 沙漠点灰 的帖子

你这是完完全全的路过啊= =
◇◆舒克君赛高◆◇
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
2
发表于 2011-3-12 19:32:55 | 只看该作者
1.打开Windows7自带的放大镜
2.系统=>修改分辨率=>改小一点
3.所有精灵同时 zoom_x = XXXX  zoom_y = XXXX
4.不想吐槽了....

点评

= = 这样……………………太搞笑了吧……………………  发表于 2011-3-12 19:43
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 12:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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