****************** 在易语言中写 [小游戏] *********************
## 首先说明:我没有 也不会 写游戏.也从来没有写过一个最简单的游戏.
写这篇文章是因为从小喜欢游戏,一直以来,学习编程的过程中一直喜欢 游戏方面的东东.我想和我一样的人,大概还有很多吧?
## 这里将要讨论的不是什么高深的游戏原理.而只是在易语言中如何 画出游戏画面.因为懂的不多,请高手指正.
主要内容 : 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 参数:宽度 本文章更多内容:1 - 2 - 3 - 下一页>> |