如何用易语言制作游戏修改器? 20

前几天看过一个教程,但是作者省略了截取游戏内存的过程,我想要一个非常详细的视频教程。... 前几天看过一个教程,但是作者省略了截取游戏内存的过程,我想要一个非常详细的视频教程。 展开
 我来答
o0诸葛廷栋
2007-09-19 · TA获得超过2766个赞
知道小有建树答主
回答量:651
采纳率:0%
帮助的人:755万
展开全部
写这篇文章是因为从小喜欢游戏,一直以来,学习编程的过程中一直喜欢
游戏方面的东东.我想和我一样的人,大概还有很多吧?

## 这里将要讨论的不是什么高深的游戏原理.而只是在易语言中如何
画出游戏画面.因为懂的不多,请高手指正.

主要内容 : 1:如何画出图像.
2:如何消除闪烁.
3:如何设计角色结构.
4:如何进行半透明混合
5:如何进行高级图像处理

**********************************************************************
(一):

首先,如何画出图像?
太简单了,用画板.

图片号=载入图片("图片文件名")
画板1.画图片(图片号)

**其次,画动画

也很简单: 首先载入多个图片,其图片号存入 图片号数组[N]中.

计次循环首(图片数,计次变量)

画板1.画图片(图片号数组[计次变量])

计次循环尾

******* 你现在大概看到了他的坏处,太闪烁了.

我们可以有两个办法.

1: 画板1.禁止重画()
画板1.画图片()
画板1.充许重画()

2: 再放一个 画板2

先在画板2上面画出我们想画的图像.再把画板2 复制到 画板1 上去.

## 实际上, 我们将要采用的就是方法 2.
你可以试一下,两个画板复制 的速度是 画图片 的多少倍.我想
大概有 10 倍左右.

********************************************

上面的试验 如果 每一次画 只画一个图片上去,那么你看不出有什么不同.

但实际操作中,每一帧画面都是由许多 小图片 所组成的.

比如,一个飞机游戏. 敌机有十多架,再加上満天的子弹,都要我们一个一个的画
上去,如果直接在 窗口主画板 上画,必然会出现闪烁. 所以我们要设两个
画板, 主画板 和 副画板. 先在副画板上 把要画的飞机和子弹 一个 一个的
画上去, 再用一个
副画板.复制(,,,,主画板,,,)
把他们一下子复制到主画板上去.

## 这里,我再加一句,敌机和子弹 也是图片,如果直接用 画图片() 画到副画板
上,会消耗时间. 所以, 还要再加一个画板
材料画板
那么是不是 有多少敌机图片就要加多少画板呢?

不可以.

这里就要 设计一下 数据的结构了.

设一个 结构名为 [ 原型 ]

它有如下 成员:
1:x
2:y
3:宽度
4:高度
5:停留时间

载入图片时,可以将所有要用到的图片 集合到一张图片上,载入此图片到材料画板

然后 设一个 数组变量
物体原型[N] 数据类型 原型

程序运行前将 材料画板上的各个 要画的物体 在材料画板上的 左顶点,长度,
宽度,依次 赋值 给 物体原型[N]数组的各个元素.

这样,在程序中使用起来,就方便了.

材料画板.复制(,,物体原型[N].宽度,物体原型[N].高度,副画板,物体原型[N].x,物体原型[N].y,)

实际上,我们将来还要再来一个 结构 [ 实物体 ]

他的成员为:
1:x
2:y
3:原型 数据类型 原型
4:层次 (指示其在多个物体时的遮挡层次)
5:是否碰撞检测
6:前进方向
7:所去目标坐标
8:被碰撞时的处理方法

到时候真正用到的将 是这个实物体.

说了这么多,很无聊.实际上,相当于我们构建一个 易语言 中的可视控件.

比如 图片框1.x=100,图片框1.y=200 就可以将它移动到 100,200 处.
我们就是在模仿它的原理.

## 为什么 不直接 用可视控件 来做呢?? 就是因为 速度.

************************************************

上面讨论了 一下 游戏中的结构,实际上你可以自已任意的设计.只要你觉得方便就可以.
所以我也不多说了.主要还是讲讲图像方面.

## 如何 画半透明合成 的图像?

这个又叫 alpha 混合. 是很多大型游戏中 必被用到的.在API 中有一个函数可以供我
们使用. AlphaBlend()

---------------------------------------
Dll命令:半透明混和
返回值类型:逻辑型
Dll库文件名:msimg32.dll
在Dll库中的命令名:AlphaBlend
参数:hdc1
参数:x
参数:y
参数:宽度
参数:高度
参数:hdc2
参数:x2
参数:y2
参数:宽度2
参数:高度2
参数:复制方式 数据类型:整数型
----------------------------------------

实际上它的使用方法和 画板的 复制方法差不多,只是多了两个参数.

其中的参数 hdc1 和 hdc2 是源画板和目标画板的设备句柄. 要用下面这个API 取得.

--------------------------------------
Dll命令:getdc
返回值类型:整数型
Dll库文件名:user32.dll
在Dll库中的命令名:GetDC
参数:窗口句柄
--------------------------------------

具体使用方法如下:
------------------------------------
子程序:__启动窗口_创建完毕
hdc1 = getdc (画板1.取窗口句柄 ())
hdc2 = getdc (画板2.取窗口句柄 ())
------------------------------------
------------------------------------
子程序:_按钮4_被单击

alphafunc (hdc1, 0, 0, 200, 200, hdc2, 0, 0, 200, 200, 混合度 × 50)
------------------------------------

说明: 上面的 混合度=求次方(2,16) ,后面所跟的 50 是混合度,从(0~255).

之所以这样是因为 这个参数是一个 四字节的结构指针.

上面的程序是可以运行的,当然你的画板2 上要先画上图片,或者先设好了底图.
实际上,不光 画板 可以 取出dc ,任何窗口对像都有dc, 所以你可以把 按钮控件(
或者其它任何控件) 复制到画板上,或者任何地方.

当然,用完了dc,还要安全释放.

在 _启动窗口_将被销毁 中加入以下命令.

释放dc(_启动窗口.取窗口句柄(),hdc1)
释放dc(_启动窗口.取窗口句柄(),hdc2)

该命令的 定义如下:

------------------------------------
Dll命令:释放dc
Dll库文件名:user32.dll
在Dll库中的命令名:ReleaseDC
参数:窗口句柄
参数:hdc
------------------------------------

*********************************************************************************

## 如何进行 高级图形处理?

说明: 请你看清了, 是高级而不是高速.因为我至今还没有学会高速处理图像的方法.
这里所说的,将是最简易的方法.如果你知道,请回一贴,我十分感激.

先打个比方, 有些游戏 一进的进候,屏幕慢慢变黑或变白.有些时候,又会慢慢变成红

色(多半是死亡时).就像是一层 透明彩色纸 挡住了一样.

这是如何实现的呢?

先定义一个字节集 zz

然后
zz=画板1.取图片()

此时, zz数组中就存有了 画板1 上的所有点的颜色值.它的格式是这样的.

前54个元素 是格式说明(我也不知道,猜的)

从 第 55 个元素起,一直到最后,是图像各个点的数据.

说明如下: 假若 画板1 左下角 处有一个 红色点 .则.
zz[55]=0 蓝色值
zz[56]=0 绿色值
zz[57]=255 红色值

知道了这些,就可以用我们自已的方法来处理图像了.

----------------------------------------------------

子程序:_按钮1_被单击

局部容器:zz 数据类型:字节集
局部容器:计次 数据类型:字节集

zz = 画板1.取图片 (, )

计次=55

计次循环首( 画板1.宽度 * 画板1 .高度, )

zz[计次]=255

计次=计次+3

计次循环尾

画板1.底图 = zz

----------------------------------------------------

上面 我们把所有 的蓝色都改为 255 (最大值),整个画板上的图像都像蒙了一层
蓝色透明纸一样.我们的愿望实现了......

最后不得不说的是:这种方法处理起来很慢,主要时间就浪费在 画板.取图片() 和
画板1.底图= zz 上面了.

这种办法最简单.但最不高效.在我这里测试了一下,
当画板大小为 400 * 200 时

上面的 程序执行时间大约是0.4--0.5 秒左右.也就是说:每秒只能画两帧图像.

适当的调大颜色变化值,每帧图像的 像素颜色变化值 调大到 10 左右时,
效果看起来还差不多,可以实现淡入淡出效果了.

有了这种方法,还可以进行各种处理,如 滤镜效果.浮雕效果.真正半透明合成 等等.
(上面介绍的Alphablend () API 并不是真正的 alpha 混合,而只是固定混合)

「知无不言.言无不尽.百人誉之不加密.百人毁之不加疏.」-- 诸葛廷栋
菅水景欣德
2019-04-25 · TA获得超过3554个赞
知道大有可为答主
回答量:3056
采纳率:27%
帮助的人:151万
展开全部
游戏修改器本质就是修改内存
核心的操作就是改写内存数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
潇潇蓝龙
2012-12-08 · TA获得超过123个赞
知道小有建树答主
回答量:325
采纳率:0%
帮助的人:157万
展开全部
你不如去网上下载独立团写挂的教程,看了你就知道怎么写修改器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式