网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月18日漏签0天
vb吧 关注:156,091贴子:1,166,235
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 62回复贴,共2页
  • ,跳到 页  
<<返回vb吧
>0< 加载中...

【游戏教程】为美好的世界献上RPG开发教程—画出一个萌妹子(一)

  • 只看楼主
  • 收藏

  • 回复
  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

一楼送度娘~


  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先我们还是需要一些基础的工具
编写的软件(IDE):vb 6.0迷你版
一些需要的模块:Basic_GDIplus.bas
一些你觉得好看的图片~就OK了
学习目标
基础的VB知识和GDIplus 绘图知识


2025-08-18 00:07:16
广告
不感兴趣
开通SVIP免广告
  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先我们写这个RPG游戏其实就是一个GDIplus绘图简单应用
那么我们首先就要知道什么是GDI?!
其实在计算机的早期时代,硬软件并没有完全统一,这可就苦了编程员们啊!
你可以想象是你要写一份报告,给你的班长看,可你的班长是日本人啊,他只看得懂日语啊!你于是辛辛苦苦的写一份日本语版,然后班长告诉你找班主任;
但是啊!你的班主任是英国人,他只看得懂英语啊!然后万般无奈的你只好又去写一份英语版,然后你的班主任告诉你:去找年级组长;
可气的是啊!年级组长是德国人!你又要写一份德语版,最后你的年级组长对已经气喘吁吁的你说:请交给校长处理……
这个时候你也差不多与世长辞了~
而当时的计算机的硬件就差不多就是这个样子,尤其像什么显示器,打印机这些的!他们在程序中的使用方法都不一样,各有千秋。
没错当时编程员就要根据每一种显示器的情况重新编写一个程序……Orz
于是在那个悲剧的时代windows出现一个划时代的东西:GDI!
GDI(Graphics Device Interface)就是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
还是举上面的例子~
最后的你并没有放弃,因为你找到了金山词霸,你只考虑用自己的语言写就行了,翻译什么靠别人就行了~
而这个GDI就是起到这个“翻译”的目的!
程序上你要画图片可以直接“画”在GDI提供一个“画板”(接口)上,剩下的事情就可以不用去管了,他会自动显示的,这样可以节约很多时间了,不仅如此这里转换对象不仅限于显示器,包括打印机,一切可以显示的东西。
而这里有细心的小伙伴就会发现:我们要学的是GDIplus,与GDI有什么关系?
其实plus就是“+”,GDIplus就是GDI+,也就是GDI的优化版。比起GDI有更多功能!而且GDIplus自windows XP开始就自带有,普遍率还是相当的高!二来关于VB and GDIplus的资料也相当多,所以我们还是使用GDIplus(PS:最重要的原因我是菜鸟……Orz)
说了这么我们来实战一下吧~
首先第一步,我们需要将GDIplus初始化,嗯相当于汽车启动的点火吧(装傻.jpg),如果不初始化的话,你将无法使用GDIplus!
我们新建一个名为 M_Basic_GDIplus.bas的模块,(M_是指模块的前缀)模块就相当于一个代码块,这里我们引用GDIplus的初始化API,这里对API不怎么理解童鞋可以理解为VB一种调用windows的功能的一种代码形式吧,举个例子啊:你就是去借你爸爸的工具(注意这里工具你是自身没有的(vb自身没有的功能)!而这里“爸爸的工具”是指windows的功能)。
这个就是GDIplus的初始化API——GdiplusStartup

要注意的是GdiplusStartupInput,GpStatus都是自定义的类型

还有个地方要吐槽的是:在任何模块中Public(公用)声明的任何API,类型,变量,函数……都可以在整个程序中可以使用的!
所以就有人将API声明这些的全部放在模块中,但是我个人我觉得这样不是很好,因为增加模块之间粘稠性,少一个模块这个程序就用不起了,对于小程序还好说,但是大型程序就惨了了,如果觉得麻烦就当我说多了吧!
那么我们声明好了这个初始化代码之后,我们要怎么应用他了?
这个还挺麻烦的……Orz
我们先建一个名为InitGDIPlusTo(专门初始化GDIplus)函数吧


  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
那么我们声明好了这个初始化代码之后,我们要怎么应用他了?
这个还挺麻烦的……Orz
我们先建一个名为InitGDIPlusTo(专门初始化GDIplus)函数吧

首先我们首先建一个GdiplusStartupInput类型的uInput的变量,他的属性GdiplusVersion(GDIplus版本号?!)赋值1,最后引用我们之前声明API——GdiplusStartup。
这里你就好奇token是什么,其实他就是来装我们什么这个GDIplus的“身份证”(标记),之后我们还要根据这个“身份证”把这个GDI给销毁了~
要注意的是ByRef在函数参数递值时,传的不是一个值,而是一个地址!所以我们在这个函数中修改这个Token是要改变外部的那个变量的值的!才能起到“装上”数据的作用!


  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
说老实话,初始化GDIplus的代码真的是莫名其妙的……Orz
最后我们使用某个东西之后,我们要物归原主!就像吃完饭之后要洗碗一样(你不洗我也没有办法……Orz)因为他会占用我们的东西,所以我们要处理好他!
同样的GDIplus也是占用了我们的计算机资源,所以我们也要把他销毁掉,来释放资源。
GDIplus的销毁也是一个API——GdiplusShutdown

这个API的使用就相当简单了~
Call GdiplusShutdown(Token)
注意的Token就是那个我们声明GDIplus的“身份证”,我们就可以通过这个身份证找到他并销毁他!


  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最后,我们终于建立好了GDIplus,我们就可以使用GDIplus代码绘图了~
但是你可不要开心的太早~GDIplus绘图还是挺麻烦的!
首先他需要获得窗口的“样子”(hDC)创建一个“画板”(GDIplus的绘图接口),
载入图片(GdipLoadImageFromFile)之后在画板上“画图”(GdipDrawImageRect)
才能在窗口上画图……Orz


  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
获得窗口的“样子”创建画板,GDIplus的所有的绘图只能在画板上才能画的出!
——GdipCreateFromHDC

删除“画板”API——GdipDeleteGraphics

载入图片的API——GdipLoadImageFromFile

删除我们载入图片的API——GdipDisposeImage

绘制图片的API

最好加上获得图片长与宽的API

以上我们写的所有的代码都在M_Basic_GDIplus.bas里,因为之后我们要引用他~
其实大家也可以不用打上面的代码搜索一下VB GDIplus模块就可以找到现成的代码,我觉得大部分的GDIplus教程都没有把GDI是什么说清楚,所以多跟大家牢骚两句……Orz


  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
然后我们就是使用我们刚刚写的代码来绘图吧~

在Form_Load(启动窗口)时,来初始化我们的GDIplus
在Form_Unload(卸载窗口,关闭窗口)时,将我们的GDIplus给销毁了
一定要注意的是GDIplus身份证一定要全局变量来装哦,不然就找不到GDIplus了!
这里我们可以在窗口启动时对窗口进行设置

注意!使用GDIpus时一定要将窗口的ScaleMode设置为vbPixels,这个作用便是调整vb窗口内部的单位!因为GDIplus的绘图单位是默认为Pixels(像素),而vb却是Twips(缇),单位不一样,绘图导致绘图的差异的……
举个例子吧:你去找工作!你的老板说一个月6000,你乐开花为他辛苦干了一个月,然后给你的是日元……你是不是有种操狗的心都有了……Orz
同样的这里的缇是像素的15倍欸!如果不修改ScaleMode我们甚至根本看不到我们绘制的图片!


2025-08-18 00:01:16
广告
不感兴趣
开通SVIP免广告
  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最后我们在Form_Paint(窗口重绘,窗口改变样子)时,加入下面的代码
*题外话:其实可以设置窗口AutoRedraw= True,然后再通过Refresh方法刷新界面,就可以在Form_Load写入GDIplus绘图代码,但是我觉得不利于新手理解于是就用这个办法了

这里可能大家对GdipDrawImageRectRect的使用还不是很了解,就重点说明一下
GdipDrawImageRectRect _
(GDIplus画板,载入的图片,
图片离窗口最左上角的X轴的位置,图片离窗口最左上角的Y轴的位置
图片的宽,图片的高
原图片的截取的位置X, 原图片的截取的位置Y
截取的宽,截取的高
采用的单位【比如像素】
)

因为vb的默认坐标轴是在软件的标题栏下面的窗口内容的左上角为原点(当然是可以改这个原点位置,不过不方便所以不过多说明了)
所以我们的图片位置也要这么考虑!
还有个问题就是:GdipDrawImageRectRect最重要的功能其实截取图片!这个功能很重要!
我们以后的人物行走动态效果就全靠个这个了……Orz
看看这篇文章的长度我知道我不能再写了……
如果大家还是有什么不懂得可以来私聊我~


  • 卵石之美
  • API
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
等有人回我再发程序源码……Orz


  • 只会VB
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有用!收藏了!


  • oshi001
  • 钩子编程
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好东西


  • TERA_ARISU
  • 数据库
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
码呢


  • 女神的思维
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
唉,存在感低的感人


星座王
点亮12星座印记,去领取
活动截止:2100-01-01
去徽章馆》
2025-08-17 23:55:16
广告
不感兴趣
开通SVIP免广告
  • 命幽
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
卵 你来了 一来就是教程 教我前端吧 还有hta 有资源吗


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 62回复贴,共2页
  • ,跳到 页  
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示