Project1

标题: 新手教程——参数与显示图片_(6) [打印本页]

作者: 一箭烂YiJL    时间: 2010-12-14 20:45
标题: 新手教程——参数与显示图片_(6)
本帖最后由 一箭烂YiJL 于 2011-4-25 17:20 编辑

若想从头学习的同学点此:
第一课、新手教程——基础(YiJL脚本请从此课开始)

课序号:6
作者:一箭烂YiJL
出版社:VX教程出版社
售价:完全免费
VX教程出版社的其它教程


上一课:
新手教程——细说数组与哈希


序:
这一课是提供两种用于Window和Scene参考的图案显示方法。
先著名,这课是理论与实战并存的课。


正式开始:
无语。


A.理论部分:

Scene:

  1. @Bitmap = Sprite.new           # 先让ModelBitmap成为精灵类
  2. @Bitmap.bitmap = Bitmap.new("Graphics/Pictures/a.png") # 在这个精灵类加建bitmap,后边的是路径
  3. @Bitmap.x = 1  # X坐标
  4. @Bitmap.y = 1  # Y坐标
  5. @Bitmap.z = 99 # Z坐标
复制代码
先说明一下,bitmap位图类必须依靠Sprite精灵类显示。
注意:
Z坐标超过零时会覆盖地图。
超过或等于100时会覆盖一般的window。

所谓的z坐标就是面上和面下的覆盖坐标,立坐标。
记得要在terminate这函数里要有:@Bitmap.dispose
@Bitmap.dispose是消除当前创立的图片。


Window:
window则简单得多:

  1. # Rect是矩形类  X  Y  宽   高
  2. rect = Rect.new(0, 0, 999, 999)
  3. bitmap = Cache.load_bitmap("Graphics/Pictures/", "图片名称")
  4. self.contents.blt(272, 156, bitmap, rect)
  5. #                 X    Y    图案    上面创建的矩形类
复制代码
self.contents是window类已经建立的一个可显示bitmap。
矩形类是用于割出图片的矩形一部分,
所谓的XY是定点割切,详细资料看雪流星前辈的教程:
点此进入
总之XY为零,宽和高必须大于你图片的宽度和高度
Scene和Window的方法是不能混淆的。


B.实战:
相信也有些人会想在状态里除了大头像外还有半身图。
不多说了,请看下图:

上图有多重特效,主要说半身图。

做到出现半身图这种效果可以从window或者Scene下手脚,
不过window出来的效果会被window的框盖住,
场景效果则会盖过整个window。
window:Window_Status  scene:Scene_Status

一、Window:
首先显示半身是要判定现在显示着的角色编号。
你会看到Window_Status的initialize有一个参数actor。
actor这个参数不是角色的编号,(应该是整个角色的资料)。
而我们需要判断的是actor.id,actor.id只是actor的其中一个变数。
总之在Window_Status里创建一个函数:

  1. def draw_actor_body(actor, x, y)
  2.   rect = Rect.new(0, 0, 999, 999)
  3.   if actor.id == 1
  4.     bitmap = Cache.load_bitmap("Graphics/Pictures/", "半身图1")
  5.     self.contents.blt(x, y, bitmap, rect)
  6.   elsif actor.id == 2   # 如此类推
  7.     bitmap = Cache.load_bitmap("Graphics/Pictures/", "半身图2")
  8.     self.contents.blt(x, y, bitmap, rect)
  9.   else   # 为了防止人物没有半身图发生错误
  10.     bitmap = Cache.load_bitmap("Graphics/Pictures/", "空白图的名称")
  11.     self.contents.blt(x, y, bitmap, rect)
  12.   end
  13. end
复制代码
然后在refresh这函数里加进:

  1. draw_actor_body(@actor, 272, 156)
  2. #draw_actor_body是调用"draw_actor_body"那个函数的句子,而上面则已经创建了这个函数。
复制代码
在这一课里我顺便要说一说参数。
参数是函数或类后边"()"括号里的数字,里面的数字可以是变量或数字(组)
调用时的例子:draw_actor_body(@actor, 272, 156)
接收的方法:def draw_actor_body(actor, x, y)
参数的接收是位置对位置,而这种方法的用途是:
让当前函数得到这些参数,成为本函数里可用的变量。(中心句)
接收后的参数会改变变量名字,就是从@actor, 272, 156变成actor, x, y这几个变量。
在函数里以新的名字应用。

看不明白上面的话请看下面的解说:

  1. model_function(50)
  2. def model_function(value)
  3.   p value    # => 50
  4. end
  5. # 最终得出窗口数目50
复制代码
再看看这一个:

  1. @vx = 35
  2. model_function(@vx)
  3. def model_function(abc)
  4.   p abc    # => 35
  5. end
  6. # 最终得出窗口数目35
复制代码
看完上面的两个例范明白了吗?
(不明白再看几次!)

window的最后,这样加进图片就能显示出来了。


二、Scene:
不说那么多,因为是用@status_window = Window_Status.new(@actor)
这方法让Window接收,那Scene的@actor就像等于Window的actor(这就是参数的原理。)
Scene     Window
@actor = actor
@actor.id = actor.id
同样原理的方法,不过在start这函数里加进:

  1. @NewBitmap = Sprite.new
  2. if @actor.id == 1
  3.   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/半身图1.png")
  4. elsifs   # 如此类推
  5.   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/半身图2.png")
  6. else
  7.   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/空白图.png")
  8. end
  9. @NewBitmap.x = 272
  10. @NewBitmap.y = 156
  11. @NewBitmap.z = 100
复制代码
不过有听过第一课的同学就会知道场景里会有update和diapose两个重点,
而因为Scene在离开时需要消除物件,同样的,@NewBitmap也需要消除,
我们要在terminate这函数里插入,terminate这函数是在场景结束时所做的动作,
在terminate里插进:

  1. @NewBitmap.dispose  # 正式名字是释放
复制代码
至于不用update是因为图案没有需要用到update的地方。
最后完成了。

总结,我们学习了:
1.两种参考式的Window与Scene显示图案的方法。
2.bitmap类要靠Sprite类显示。
3.大概的了解参数应用。



好了,这节课上完了,谢谢大家。

下一课:
新手教程——简单测试法x2

作者: cangyu2004    时间: 2010-12-17 07:54

作者: ykoben    时间: 2012-1-7 11:01
本帖最后由 ykoben 于 2012-1-7 11:02 编辑

@一箭烂YiJL
  1. @NewBitmap = Sprite.new
  2. if @actor.id == 1
  3.   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/半身图1.png")
  4. elsifs   # 如此类推
  5.   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/半身图2.png")
  6. else
  7.   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/空白图.png")
  8. end
  9. @NewBitmap.x = 272
  10. @NewBitmap.y = 156
  11. @NewBitmap.z = 100
复制代码

大神,里面的第四排   如此类推   那句在运行时候出错了~
我的学习之旅卡住了~求解答啊~
作者: chd114    时间: 2012-6-23 16:15
本帖最后由 chd114 于 2012-7-3 12:14 编辑

@一箭烂YiJL在指定的格式的事件上现实呢(如事件名称开头为“靶子”的事件上才显示)?
如果是在一个时间上显示3*3个事件大小的  图片呢?








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