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

Project1

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

[原创发布] 给我们的游戏加点料--图片窗体

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
66 小时
注册时间
2011-5-25
帖子
73
跳转到指定楼层
1
发表于 2011-8-30 16:23:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 shoed 于 2011-8-30 22:25 编辑

我们见过的窗体一般是一个四四方方的,很有规矩的。
现在网游以及很多软件的窗口外观都不是规规矩矩的,让人感觉很有个性,
如果我们也能将RMXP中的窗口做成富有个性的外观,那不是一件很有趣的事吗,
其实这个窗体就是--图片窗体,可能大家还不太明白我说的是什么,那先上张图吧:

这是一款网游的登陆界面


这种窗体看上去多有趣啊,因此本人也仿造这个窗口,给我们的RMXP的窗口也加点料吧
这是我做好的效果图:

注意到上面的3个数字吗
你可以用鼠标试着点点,本人改变的是scene_title

主要的核心脚本:

  1. #--------------------------------------------------------------------------

  2. # ● 特效窗体
  3. # 制作者  小飞侠_shoed

  4. #---------------------------------------------------------------------------
  5. module Screen
  6.   #背景图,与窗口的大小相同
  7.   MASK_WIDTH = 459
  8.   MASK_HEIGHT = 329
  9.   
  10.   IMAGE_BITMAP = 0
  11.   LR_LOADFROMFILE = 0x0010
  12.   LR_CREATEDIBSECTION = 0x2000
  13.   VBBLACK = 0x0
  14.   VBWHITE = 0xffffff
  15.   RGN_AND = 1
  16.   RGN_OR = 2
  17.   RGN_XOR = 3
  18.   
  19.   GWL_STYLE      = (-16)             #窗口样式
  20.   GWL_WNDPROC    = (-4)
  21.   WS_POPUP       = 0x80000000   #弹出式窗口
  22.   WS_MAXIMIZEBOX = 0x00010000
  23.   WS_MINIMIZEBOX = 0x00020000
  24.   WS_CAPTION     = 0x00C00000
  25.   WS_BORDER      = 0x00800000
  26.   WS_DLGFRAME    = 0x00400000
  27.   
  28.   WM_SYSCOMMAND = 0x0112
  29.   SC_MINIMIZE = 0xF020
  30.   WM_CLOSE = 0x0010
  31.   
  32.   @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l'
  33.   @findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l'
  34.   @getWindowRect=Win32API.new 'user32', 'GetWindowRect', %w(l p), 'l'
  35.   @loadImage=Win32API.new 'user32', 'LoadImageA', %w(l p l l l l), 'l'
  36.   
  37.   
  38.   @createCompatibleDC=Win32API.new 'gdi32', 'CreateCompatibleDC', %w(l), 'l'
  39.   
  40.   #@createCompatibleBitmap=Win32API.new 'gdi32', 'CreateCompatibleBitmap', %w(l l l), 'l'
  41.   #@stretchBlt=Win32API.new 'gdi32', 'StretchBlt', %w(l l l l l l l l l l l), 'l'

  42.   @selectObject=Win32API.new 'gdi32', 'SelectObject', %w(l l), 'l'
  43.   @getPixel=Win32API.new 'gdi32', 'GetPixel', %w(l l l), 'l'
  44.   
  45.   @createRectRgn=Win32API.new 'gdi32', 'CreateRectRgn', %w(l l l l), 'l'
  46.   @setWindowRgn=Win32API.new 'user32', 'SetWindowRgn', %w(l l i), 'l'
  47.   @combineRgn=Win32API.new 'gdi32', 'CombineRgn', %w(l l l l), 'l'
  48.   
  49.   @deleteDC=Win32API.new 'gdi32', 'DeleteDC', %w(l), 'l'
  50.   @deleteObject=Win32API.new 'gdi32', 'DeleteObject', %w(l), 'l'

  51.   @getWindowLong=Win32API.new 'user32', 'GetWindowLongA', %w(l l), 'l'
  52.   @setWindowLong=Win32API.new 'user32', 'SetWindowLongA', %w(l l l), 'l'
  53.   @moveWindow=Win32API.new 'user32', 'MoveWindow', %w(l l l l l l), 'l'

  54.   #@defWindowProc=Win32API.new 'user32', 'DefWindowProcA', %w(l l l l), 'l'
  55.   #@callWindowProc=Win32API.new 'user32', 'CallWindowProcA', %w(l l l l l), 'l'
  56.   
  57.   @getCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
  58.   @screenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
  59.   @getKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
  60.   
  61.   @sendMessage = Win32API.new("user32", "SendMessageA", 'l l l l', 'l')
  62.   
  63.   module_function
  64.   
  65.   def shape_window
  66.     @hwnd=handel
  67.    
  68.     #原始窗口
  69.     rect=" "*16
  70.     @getWindowRect.call(@hwnd,rect)
  71.     left,top,right,bottom=rect.unpack("llll")
  72.     @x=left
  73.     @y=top
  74.     @width=right-left
  75.     @height=bottom-top
  76.    
  77.    
  78.     lStyle = @getWindowLong.call(@hwnd, GWL_STYLE)
  79.     lStyle = lStyle & ~WS_CAPTION
  80.    
  81.     #@setWindowLong.call(@hwnd, GWL_WNDPROC, WindowProc)
  82.     @setWindowLong.call(@hwnd, GWL_STYLE, lStyle)
  83.    
  84.    
  85.     @moveWindow.call(@hwnd, @x,@y,MASK_WIDTH,MASK_HEIGHT,1);
  86.    
  87.    
  88.     hBitmap = @loadImage.call(0, ".\\Graphics\\Pictures\\window.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
  89.     backDC = @createCompatibleDC.call(0)
  90.     @selectObject.call(backDC, hBitmap)
  91.    
  92.     hRgn  = @createRectRgn.call(0, 0, MASK_WIDTH, MASK_HEIGHT)
  93.    
  94.     for j in 0...MASK_HEIGHT
  95.       for i in 0...MASK_WIDTH
  96.         #主要是加快程序的速度,图片不是白色的大概区域
  97.         if j>=80 and j<=300 and i>=15 and i<=400
  98.           next
  99.         end
  100.         tcolor = @getPixel.call(backDC, i, j)
  101.         if tcolor==VBWHITE then
  102.           hTempRgn = @createRectRgn.call(i, j, i + 1, j + 1)
  103.           @combineRgn.call(hRgn,hRgn,hTempRgn,RGN_XOR)
  104.           @deleteObject.call(hTempRgn)
  105.         end
  106.       end
  107.     end
  108.    
  109.     @setWindowRgn.call(@hwnd, hRgn, 1)
  110.    
  111.     @deleteObject.call(hBitmap)
  112.     @deleteDC.call(backDC)
  113.     #@deleteObject.call(hRgn)
  114.    
  115.   end

  116.   def recovery_window
  117.     lStyle = @getWindowLong.call(@hwnd, GWL_STYLE)
  118.     lStyle = lStyle | WS_CAPTION
  119.     @setWindowLong.call(@hwnd, GWL_STYLE, lStyle)
  120.     @moveWindow.call(@hwnd, @x,@y,@width,@height,1);
  121.   end

  122.   def get_mouse_pos
  123.    point_var = [0, 0].pack('ll')
  124.    if @getCursorPos.call(point_var) != 0
  125.      if @screenToClient.call(@hwnd, point_var) != 0
  126.        x, y = point_var.unpack('ll')
  127.        if (x < 0) or (x > 10000) then x = 0 end
  128.        if (y < 0) or (y > 10000) then y = 0 end
  129.        if x > 640 then x = 640 end
  130.        if y > 480 then y = 480 end
  131.        return x, y
  132.      else
  133.        return 0, 0
  134.      end
  135.    else
  136.      return 0, 0
  137.    end
  138. end

  139.   def mouse_press?
  140.     left_down = @getKeyState.call(0x01)
  141.     return left_down[7]
  142.   end
  143.   
  144.   def min_window
  145.     @sendMessage.call(@hwnd,WM_SYSCOMMAND,SC_MINIMIZE,0)
  146.   end
  147.   
  148.   def close_window
  149.     @sendMessage.call(@hwnd,WM_CLOSE,0,0)
  150.   end
  151.   
  152.    # find the game window...
  153.   def handel
  154.     game_name = "\0" * 256
  155.     @readini.call('Game','Title','',game_name,255,".\\Game.ini")
  156.     game_name.delete!("\0")
  157.     return @findwindow.call('RGSS Player',game_name)
  158.   end
  159.   
  160.   #def WindowProc
  161.   #
  162.   #end

  163. end

复制代码


我的图片都存在pictures中

工程:
特效窗体外观.rar (545.85 KB, 下载次数: 1129)

评分

参与人数 1星屑 +40 收起 理由
px.凤翔九天 + 40 支持~

查看全部评分

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

2
发表于 2011-8-30 17:00:21 | 只看该作者
why not use Transparent Key of Layered Windows?
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

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

贵宾

3
发表于 2011-8-30 17:07:18 | 只看该作者
本帖最后由 忧雪の伤 于 2011-8-30 17:07 编辑

Dll 请用常量。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

神仙

梦石
0
星屑
69
在线时间
596 小时
注册时间
2007-5-14
帖子
1289
4
发表于 2011-8-30 17:40:04 | 只看该作者
最坑爹的东西……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
127 小时
注册时间
2009-12-19
帖子
417
5
发表于 2011-8-30 17:58:04 | 只看该作者
感觉不咋地
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
43 小时
注册时间
2011-7-29
帖子
78
6
发表于 2011-8-30 18:09:10 | 只看该作者
比较适合华丽的那种游戏吧…
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

7
发表于 2011-8-30 18:12:03 | 只看该作者
我被震惊了= = 好猎奇的东西
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5354
在线时间
453 小时
注册时间
2011-2-11
帖子
1108
8
发表于 2011-8-30 19:11:00 | 只看该作者
LZ你不会去游戏skin文件夹里拿么 = =
这图不论抠的怎么样,大小不合适。

点评

╮(╯_╰)╭ +65535  发表于 2011-8-31 01:08
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
53 小时
注册时间
2011-7-2
帖子
235
9
发表于 2011-8-30 21:22:20 | 只看该作者
誒 只有XP沒VX 可惜啊
Skin Box 最大的素材发布
Welcome to join use~

http://crossroadoffice.web-198.com/ 我们建设中的官方网站
回复 支持 反对

使用道具 举报

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

10
发表于 2011-8-30 22:25:05 | 只看该作者
恩?貌似有点意思的东西啊~路过收藏~

点评

扔球 吼吼  发表于 2011-8-31 07:45

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 05:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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