Project1

标题: [已解决]加载动态人物战斗图位图的疑问。 [打印本页]

作者: miantouchi    时间: 2019-4-26 21:43
标题: [已解决]加载动态人物战斗图位图的疑问。
本帖最后由 miantouchi 于 2019-4-27 20:34 编辑

我看某侠的一节课程,这是源码没有问题
RUBY 代码复制
  1. bmp = RPG::Cache.battler(@battler_name, @battler_hue)#第一句
  2.       rect = Rect.new(0, 0, bmp.width / 4, bmp.height)#第二句
  3.       self.bitmap = Bitmap.new(bmp.width / 4, bmp.height)#第三句
  4.       self.bitmap.blt(0, 0, bmp, rect)
#第四句

我为了自己能理解这段代码我把这段代码除以4这块去掉了,来验证我自己的理解想法,结果
我自己把第三句改了下就不显示了
RUBY 代码复制
  1. self.bitmap = Bitmap.new(bmp.width, bmp.height)


这是什么原因呢?

我的理解,人物图片是528*162
第二句Rect截取人物的第一帧图片132宽*162高
第三句是加载空白的bitmap位图,尺寸是528*162
第四句在空白bitmap位图(528*162),上面绘制第一帧人物图片,
结果我没有发现人物图片没有显示。

1.png (68.2 KB, 下载次数: 17)

1.png

陈.png (20.71 KB, 下载次数: 16)

陈.png

3.png (478.41 KB, 下载次数: 14)

3.png

4.png (457.47 KB, 下载次数: 16)

4.png

作者: soulsaga    时间: 2019-4-26 22:21
本帖最后由 soulsaga 于 2019-4-26 22:41 编辑

这也挺奇怪的......
作者: 灯笼菜刀王    时间: 2019-4-26 22:59
本帖最后由 灯笼菜刀王 于 2019-4-26 23:11 编辑

你把这个角色换到第4位就可以看到他了

原因在于下面的 self.ox, 它的取值是图片宽度的一半


作者: 灯笼菜刀王    时间: 2019-4-27 16:59
本帖最后由 灯笼菜刀王 于 2019-4-27 17:05 编辑

blt(x,y,w,h) 这里的XY是什么意思?

嘛, 答案很容易吧, 就是描绘图片位置的坐标,  

那,你有没有想过, 这个坐标只是一个点, 而图片是一个面, 是根据图片的哪个点来作为位置标准的呢?

答案就是 ox, oy, 默认是0,0  也就是图片左上角的那个点

这里, 改变了ox = w / 2 , oy = h , 也就是说,基准点换成了 在图片宽度的一半, 全部高度(也就底边)的位置

你让rect绘制了4分之一的图片, 然而实际图片并没有被切成4分一, 所以 w / 2 的位置一样是那长长的图片的底部中心点, 显然的, 窗口并没有那么长来显示完整的半张图, 所以你的角色就显示到外太空去了
作者: guoxiaomi    时间: 2019-4-27 17:50
ox,oy这个设计看似很奇怪,联想到旋转就很自然了。ox,oy其实是指定了旋转的中心。

不过我也是第一次意识到blt的前两个参数是ox,oy




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1