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

Project1

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

[通用发布] 启动画面(弹出窗口,RGE最适合)

[复制链接]

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5519
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
跳转到指定楼层
1
发表于 2011-10-10 19:58:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 一箭烂YiJL 于 2011-10-12 22:03 编辑

0.序
这个是我的"伪 3D Map"在 v0.4 阶段的东西,如果认为不适合在这里发布,版主请移至 RGE 专区。
主要功能:弹出一个启动画面窗口(无框边位图,透明度)
支援格式:bmp,而且不能透明背景(VX/XP 可以先加载至 Bitmap 类,再存为 bmp 或者制作 hBitmap 结构)
(RGE 最适合使用)

1.开始
图(伪3D Map):

经过序的介绍后,就要说如何应用。专门给脚本加载过长的游戏使用。
RGE:在 main RGE.init (生成主窗口)的游戏,在最前放进脚本页。
VX/XP:先要给 Game.exe 去掉 ShowWindow(反汇编),然后在最前放进脚本页,以及自己在 main 调用ShowWindow。ps2:XP 请有心人帮助弄范例(而且尤其关注 XP 编码(转换))。
ps3:请放置 Splash.bmp!
在每一个加载阶段也可以切换窗口文字(内容),例如脚本页:
Splash (启动画面脚本)
操作:Splash.redraw("正在就加载精灵类")

▼ Sprite
。。。。。。(精灵类父类)
操作:Splash.redraw("正在就加载游戏物件")

▼ 游戏物件
。。。。。。(游戏物件)
操作:Splash.release(结束启动画面)
mian


2.脚本

  1. #==============================================================================
  2. # ■ Splash by YiJL
  3. #------------------------------------------------------------------------------
  4. #  启动画面。
  5. #   
  6. #   - Splash.init
  7. #     初始化
  8. #
  9. #   - Splash.redraw(str)
  10. #     改变显示文字
  11. #
  12. #   - Splash.release
  13. #     释放窗口
  14. #
  15. #==============================================================================

  16. module Splash
  17.   #--------------------------------------------------------------------------
  18.   # ● Win32API
  19.   #--------------------------------------------------------------------------
  20.   M2W = Win32API.new("kernel32", "MultiByteToWideChar",  "ilpipi" , "i")
  21.   CreateWindowEx = Win32API.new("user32", "CreateWindowExW", "lpplllllllll", "l")
  22.   ShowWindow = Win32API.new("user32", "ShowWindow", "ll", "l")
  23.   LoadImage = Win32API.new("user32", "LoadImageW", "lpllll", "l")
  24.   GetCurrentProcess = Win32API.new("kernel32", "GetCurrentProcess", "v", "l")
  25.   SelectObject = Win32API.new("gdi32", "SelectObject", "ll", "l")
  26.   DeleteObject = Win32API.new("gdi32", "DeleteObject", "l", "l")
  27.   GetDC = Win32API.new("user32", "GetDC", "l", "l")
  28.   ReleaseDC = Win32API.new("user32", "ReleaseDC", "ll", "l")
  29.   DestroyWindow = Win32API.new("user32", "DestroyWindow", "l", "l")
  30.   GetSystemMetrics = Win32API.new("user32", "GetSystemMetrics", "l", "l")
  31.   TextOut = Win32API.new("gdi32", "TextOutW", "lllpl", "l")
  32.   CreatePatternBrush = Win32API.new("gdi32", "CreatePatternBrush", "l", "l")
  33.   CreateFont = Win32API.new("gdi32", "CreateFontW", "lllllllllllllp", "l")
  34.   FillRect = Win32API.new("user32", "FillRect", "lpl", "l")
  35.   SetBkMode = Win32API.new("gdi32", "SetBkMode", "ll", "l")
  36.   Sleep = Win32API.new("kernel32", "Sleep", "l", "v")
  37.   SetLWndAttri = Win32API.new("user32", "SetLayeredWindowAttributes", "llll", "l")
  38.   PeekMessage = Win32API.new("user32", "PeekMessageW", "pllll", "l")
  39.   #--------------------------------------------------------------------------
  40.   # ● 常量
  41.   #--------------------------------------------------------------------------
  42.   BMPW = 600                 # 位图长度
  43.   BMPH = 360                 # 位图高度
  44.   BMPP = "Splash.bmp"        # 位图路径
  45.   FONT = "Microsoft YaHei"   # 显示字体
  46.   WAIT = 1                   # 等待时间(s)
  47.   TXTX = 30                  # 字体显示 x 坐标
  48.   TXTY = 210                 # 字体显示 y 坐标
  49.   FNTS = 24                  # 字体大小
  50.   #--------------------------------------------------------------------------
  51.   # ● 初始化
  52.   #--------------------------------------------------------------------------
  53.   def self.init
  54.     if @hSplashWnd.nil?
  55.       hInstance = GetCurrentProcess.call
  56.       @hSplashWnd = CreateWindowEx.call(0x80000, wchar("#32771"), wchar("Splash"),
  57.       0x80000000, (GetSystemMetrics.call(0) - BMPW) / 2,
  58.       (GetSystemMetrics.call(1) - BMPH) / 2, BMPW, BMPH, 0, 0, hInstance, 0)
  59.       ShowWindow.call(@hSplashWnd, 1)
  60.       SetLWndAttri.call(@hSplashWnd, 0, 220, 2)
  61.       hDC = GetDC.call(@hSplashWnd)
  62.       @hBitmap = LoadImage.call(hInstance, wchar(BMPP), 0, BMPW, BMPH, 0x10)
  63.       @hFont = CreateFont.call(FNTS, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, wchar(FONT))
  64.       @hBrush = CreatePatternBrush.call(@hBitmap)
  65.       FillRect.call(hDC, [0, 0, BMPW, BMPH].pack("l*"), @hBrush)
  66.       SetBkMode.call(hDC, 1)
  67.       SelectObject.call(hDC, @hFont)
  68.       str = " "
  69.       TextOut.call(hDC, TXTX, TXTY, wchar(str), str.split(//u).size)
  70.       ReleaseDC.call(@hSplashWnd, hDC)
  71.       msg = " " * 28
  72.       time = Time.now
  73.       while Time.now - time < WAIT
  74.         # 防止无响应
  75.         PeekMessage.call(msg, @hSplashWnd, 0, 0, 0)
  76.         Sleep.call(500)
  77.       end
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 重画
  82.   #--------------------------------------------------------------------------
  83.   def self.redraw(str)
  84.     unless @hSplashWnd.nil?
  85.       hDC = GetDC.call(@hSplashWnd)
  86.       FillRect.call(hDC, [0, 0, BMPW, BMPH].pack("l*"), @hBrush)
  87.       SetBkMode.call(hDC, 1)
  88.       SelectObject.call(hDC, @hFont)
  89.       TextOut.call(hDC, TXTX, TXTY, wchar(str), str.split(//u).size)
  90.       ReleaseDC.call(@hSplashWnd, hDC)
  91.       msg = " " * 28
  92.       time = Time.now
  93.       while Time.now - time < WAIT
  94.         # 防止无响应
  95.         PeekMessage.call(msg, @hSplashWnd, 0, 0, 0)
  96.         Sleep.call(500)
  97.       end
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 释放
  102.   #--------------------------------------------------------------------------
  103.   def self.release
  104.     unless @hSplashWnd.nil?
  105.       DeleteObject.call(@hFont)
  106.       DeleteObject.call(@hBitmap)
  107.       DeleteObject.call(@hBrush)
  108.       DestroyWindow.call(@hSplashWnd)
  109.       hSplashWnd = nil
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● unicode 编码
  114.   #--------------------------------------------------------------------------
  115.   def self.wchar(str)
  116.     length = M2W.call(65001, 0, str, -1, 0, 0) << 1
  117.     buffer = " " * length
  118.     M2W.call(65001, 0, str, -1, buffer, length)
  119.     return buffer
  120.   end
  121. end

  122. Splash.init
复制代码
3.范例
VX: 启动画面.zip (948.11 KB, 下载次数: 2152) 感谢月夜神音的编辑支援
XP:waiting for 有心人中。。

评分

参与人数 2星屑 +104 收起 理由
zenkl + 14 技术帝
月夜神音 + 90 剑兰前辈V5~~

查看全部评分

Lv1.梦旅人

骑士不死于徒手<

梦石
0
星屑
114
在线时间
535 小时
注册时间
2010-5-20
帖子
602

贵宾

2
发表于 2011-10-10 21:45:04 | 只看该作者
各种V5~抢占沙发

评分

参与人数 1星屑 +2 收起 理由
一箭烂YiJL + 2 怀疑某人马甲来着。

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

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

开拓者贵宾

3
发表于 2011-10-11 00:03:48 | 只看该作者
看到那陀api才刚学的我表示蛋疼。

点评

从外星鸡变种成章鱼之后,就丢弃了研究 API 了么?- - fux2 应该很早就研究的说。  发表于 2011-10-11 20:02
API不就是新建了一个窗口吗 - -  发表于 2011-10-11 00:41
api至今不会用 = = b  发表于 2011-10-11 00:20
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
491
在线时间
339 小时
注册时间
2010-12-15
帖子
926

开拓者

4
发表于 2011-10-11 00:40:43 | 只看该作者
Fake...
Fake / Stray Night...........
Unlicensed bread works...

点评

what do you speak?  发表于 2011-10-12 18:31
................我 Fake Stray.....  发表于 2011-10-11 12:43

评分

参与人数 1星屑 +2 收起 理由
月夜神音 + 2 Fake……Unlicensed bread works…………我.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1071 小时
注册时间
2011-5-12
帖子
2317

贵宾

5
发表于 2011-10-11 05:41:18 | 只看该作者
本帖最后由 月夜神音 于 2011-10-18 18:21 编辑

剑兰前辈回来了吗~~!前辈的东西不能不支持~~
VX范例: 启动画面VX.rar (836.06 KB, 下载次数: 111)

点评

因为连帖了,所以不知道有没有收到 9 楼的通知。特此通知  发表于 2011-10-12 21:38
在 main 之前 Splash.release 了吗?(我没有了VX了。)  发表于 2011-10-12 20:38
感谢支持。Kernel 可以使用紫苏的获取句柄,或者高手紫的配合 dll 的句柄。  发表于 2011-10-11 19:59
找我请找芙蕾娅
顺带一提,完全看得懂我头像请捡起你自己的节操哟(自重
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1185
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

6
发表于 2011-10-11 12:56:00 | 只看该作者
JUI套件啊啊啊啊啊啊啊………………

点评

我没有最新版啊?  发表于 2011-10-13 17:07
JUI是各种GUI控件的集合。  发表于 2011-10-12 23:12
JUI 不是那个“鼠标控件”么?最新版?= =什么最新版?- -  发表于 2011-10-12 20:39
你都有最新版了,我还瞎倒腾什么呢?  发表于 2011-10-11 23:36
不知道怎么样呢- -?  发表于 2011-10-11 19:59

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv1.梦旅人

骑士不死于徒手<

梦石
0
星屑
114
在线时间
535 小时
注册时间
2010-5-20
帖子
602

贵宾

7
发表于 2011-10-11 22:54:13 | 只看该作者
其实这个账号哦不是马甲呢
回复 支持 反对

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
728
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

8
发表于 2011-10-11 23:01:07 | 只看该作者
求验证:
这个脚本能不能解决WIN7打开RM游戏假死的问题
(就是说把假死的那段换成这个加载图……)

点评

我的Win7运行RM一样正常  发表于 2011-10-13 09:13
我的 Win7 运行 RM 游戏正常- -  发表于 2011-10-12 21:07
回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5519
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
9
 楼主| 发表于 2011-10-12 20:49:08 | 只看该作者
本帖最后由 一箭烂YiJL 于 2011-10-12 21:53 编辑
各种压力的猫君 发表于 2011-10-11 23:01
求验证:
这个脚本能不能解决WIN7打开RM游戏假死的问题
(就是说把假死的那段换成这个加载图……) ...

Win7 有关?
不了解什么状况。

RM 游戏假死是指:

1.XP 10s bug?
紫苏有帖子解决。一般脚本中 XP 应该要加 Graphics.update。

2.VX 加载过慢假死?
外加用那些 API 封装好的 dll,在反遍汇删 ShowWindow 的同一个地方,调用之。
并且要在 main 之前 ShowWindow 。

回复 月夜神音 的帖子
非常感谢提供范例!你所说的问题就是忘了 Splash.release。
现在并且会显示加载项目,我会在主楼放置 VX 的范例。
(VX 有 RTPSETUP.exe。)

点评

win7 系统坑爹的 Directsound = = 不管是 XP VX 启动一律假死  发表于 2011-10-12 20:54
回复 支持 反对

使用道具 举报

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

10
发表于 2011-10-14 20:06:49 | 只看该作者
翻着手册勉强看懂了一点点- -……
API的DC是我永远的伤……

点评

哦,我是说我不会做,不是不想做- -|  发表于 2011-10-16 10:14
真心不会- -。  发表于 2011-10-16 10:13
因为yangff的回帖无视掉了蛐蛐的回帖= =...(3DMap 我想做 TileS 部分(不规则2层+3层对照表),最近有点力不从心,可以帮我做TileS么?- -)  发表于 2011-10-15 10:05
某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 00:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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