如何用彝语制作游戏修改器?
游戏用品。我想有很多人和我一样吧?
# #我们这里要讨论的不是高深的博弈原理,只是它在彝语中是如何运作的。
画游戏画面。因为知道的不多,请指正。
主要内容:1:如何画一幅图像。
2.如何消除闪烁?
3.如何设计角色结构?
4.如何进行半透明混合
5.如何进行高级图像处理
**********************************************************************
(1):
一、如何画出一个形象?
太简单了。使用绘图板。
第一
图片编号=加载的图片(“图片文件名”)
画板1。画一张图(图号)
* *第二,画动画。
也很简单:首先加载多张图片,它们的图片编号存储在图片编号数组[N]中。
计数循环头(图片数量,计数变量)
画板1。画一张图片(图片编号数组[计数变量])
计数周期尾部
* * * * * *你现在大概看到了他不好的一面,太忽悠了。
我们可以有两种方式。
1:画板1。不要重画()
画板1。画一幅画()
画板1。允许重画()
2:放另一个画板2
首先在画板上画出我们想要画的图像。然后把画板2复制到画板1。
# #其实我们要采用的是方法二。
你可以试试,复制两个画板的速度是画图的多少倍。我认为
大概10次。
********************************************
如果你在上面的实验中一次只画一张图,你看不出有什么不同。
但实际上,每一帧都是由许多小图片组成的。
比如飞机游戏。敌机十多架,加上天上的子弹,都需要我们一架一架画。
往上走,如果直接在窗口的主画板上画,难免会闪烁。所以我们必须设置两个。
画板,主画板,辅助画板。首先在辅助画板上把飞机和子弹一个个画出来。
画出来用另一个。
辅助画板。复制(,,,主绘图板,,)
立刻把它们复制到主绘图板上。
# #这里我补充一下,敌机和子弹也是图片。如果直接用图在辅助画板上画出来()。
其实这需要时间。因此,我们需要添加另一个画板。
材料绘图板
那么有多少敌机图片就有必要加多少画板吗?
你不能。
这里有必要设计一下数据结构。
让一个结构被命名为[原型]
它有以下成员:
1:x
2:y
3:宽度
4:身高
5:停留时间
加载图片时,可以把所有要用的图片组装成一张图片,这张图片可以加载到材质画板中。
然后设置一个数组变量。
对象原型[N]数据类型原型
在程序运行之前,左侧顶点、长度,
宽度,依次赋给object prototype [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。
我们只是在模仿它的原理。
# #为什么不直接用视觉控制来实现呢?是因为速度。
************************************************
上面讨论了游戏的结构。其实你可以随意设计,只要方便你就行。
所以就不多说了。我主要说图像。
# #如何绘制半透明的合成图像?
这也称为阿尔法混合。很多大型游戏都要用到。API中有一个函数适合我。
儿童使用。AlphaBlend()
-
Dll命令:半透明混合
返回值类型:逻辑类型
Dll库文件名:msimg32.dll
Dll库中的命令名:AlphaBlend
参数:hdc1
参数:x
参数:y
参数:宽度
参数:高度
参数:hdc2
参数:x2
参数:y2
参数:宽度2
参数:高度2
参数:复制方法数据类型:整数
-
其实它的使用方法和画板的复制方法差不多,只是多了两个参数。
参数hdc1和hdc2是源画板和目标画板的设备句柄。
-
Dll命令:getdc
返回值类型:整数类型
Dll库文件名:user32.dll
Dll库中的命令名:GetDC
参数:窗口句柄
-
具体使用方法如下:
-
子程序:_ _开始窗口_已创建
Hdc1 = getdc(画板1。取窗口句柄())
Hdc2 = getdc(画板2。获取窗口句柄())
-
-
子程序:_ Button 4_ Click
Alpha func (HDC1,0,0,200,200,HDC2,0,0,200,200,混合度× 50)
-
说明:以上混合度=幂(2,16),后面50是混合度,从(0~255)。
这是因为该参数是一个四字节的结构指针。
上面的程序可以运行,当然你要先在画板2上画图,或者先设置好底图。
其实不仅画板可以拿出dc,任何窗口对象都有dc,所以可以把按钮控件(
或任何其他控件)到绘图板或任何地方。
当然,用完dc后,还得安全释放。
添加以下命令到_ Start window _将被销毁。
释放dc(_开始窗口。获取窗口句柄(),hdc1)
释放dc(_开始窗口。获取窗口句柄(),hdc2)
该命令定义如下:
-
Dll命令:释放dc
Dll库文件名:user32.dll
Dll库中的命令名:ReleaseDC
参数:窗口句柄
参数:hdc
-
*********************************************************************************
# #如何进行高级图形处理?
注:请看,是高级,不是高速,因为我还没学会高速处理图像。
这里说的会是最简单的方法。如果知道,请回复,非常感谢。
比如有些游戏进入,屏幕变成黑色或者白色。有时候,它会变红。
颜色(大多是死的时候)。就像被一层透明的彩纸挡住了一样。
这是如何实现的?
先定义一个字节集zz。
然后
Zz=画板1。拍照()
此时,画板1上所有点的颜色值都存储在zz数组中。其格式如下。
前54个元素是格式描述(我不知道,我猜的)
从第55个元素到最后,是图像中每个点的数据。
解释如下:如果画板左下角有一个红点1,那么。
Zz[55]=0蓝色值
Zz[56]=0绿色值
Zz[57]=255红色值
知道了这一点,我们就可以用自己的方式处理图像。
-
子程序:_ button 1_ clicked
本地容器:zz数据类型:字节集
本地容器:计数数据类型:字节集
Zz =画板1。拍照(,)
计数=55
计数循环头(画板1。宽度*画板1。身高,)
Zz[计数]=255
计数=计数+3
计数周期尾部
画板1。底图= ZZ
-
上面我们把所有的蓝色都改成了255(最大值),整个画板上的图像看起来就像一个图层。
蓝色透明纸。我们的愿望实现了。......
最后不得不说:这种方法处理起来很慢,主要时间都浪费在画板上了。拍照()和
画板1。底图=上面的zz。
这种方法最简单,但效率最低。我在这里测试过。
当画板的尺寸为400 * 200时
上述程序的执行时间约为0.4-0.5秒。也就是说,每秒只能画两幅图像。
适当增加颜色变化值,当每帧图像的像素颜色变化值增加到大约10时,
效果看起来差不多,可以实现淡入淡出效果。
用这种方法可以进行各种处理,如滤镜效果、浮雕效果、真半透明合成等。
(上面描述的Alphablend () API不是真正的alpha mix,而是固定的mix。)
“你什么都知道。你什么都可以说。一百个人的名誉是不加密的。百人灭不稀。”——诸葛廷栋