| 赞 | 0  | 
 
| VIP | 8 | 
 
| 好人卡 | 27 | 
 
| 积分 | 66 | 
 
| 经验 | 41413 | 
 
| 最后登录 | 2012-10-21 | 
 
| 在线时间 | 833 小时 | 
 
 
 
 
 
Lv4.逐梦者 弓箭手?剑兰 
	- 梦石
 - 0 
 
        - 星屑
 - 6559 
 
        - 在线时间
 - 833 小时
 
        - 注册时间
 - 2010-11-17
 
        - 帖子
 - 1140
 
 
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
 本帖最后由 一箭烂YiJL 于 2011-4-25 17:20 编辑  
 
若想从头学习的同学点此: 
第一课、新手教程——基础(YiJL脚本请从此课开始) 
 
课序号:6 
作者:一箭烂YiJL 
出版社:VX教程出版社 
售价:完全免费 
VX教程出版社的其它教程 
 
 
上一课: 
新手教程——细说数组与哈希 
 
 
序: 
这一课是提供两种用于Window和Scene参考的图案显示方法。 
先著名,这课是理论与实战并存的课。 
 
 
正式开始: 
无语。 
 
 
A.理论部分: 
 
Scene: 
- @Bitmap = Sprite.new           # 先让ModelBitmap成为精灵类
 
 - @Bitmap.bitmap = Bitmap.new("Graphics/Pictures/a.png") # 在这个精灵类加建bitmap,后边的是路径
 
 - @Bitmap.x = 1  # X坐标
 
 - @Bitmap.y = 1  # Y坐标
 
 - @Bitmap.z = 99 # Z坐标
 
 
  复制代码 先说明一下,bitmap位图类必须依靠Sprite精灵类显示。 
注意: 
Z坐标超过零时会覆盖地图。 
超过或等于100时会覆盖一般的window。 
所谓的z坐标就是面上和面下的覆盖坐标,立坐标。 
记得要在terminate这函数里要有:@Bitmap.dispose 
@Bitmap.dispose是消除当前创立的图片。 
 
 
Window: 
window则简单得多: 
- # Rect是矩形类  X  Y  宽   高
 
 - rect = Rect.new(0, 0, 999, 999)
 
 - bitmap = Cache.load_bitmap("Graphics/Pictures/", "图片名称")
 
 - self.contents.blt(272, 156, bitmap, rect)
 
 - #                 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里创建一个函数: 
- def draw_actor_body(actor, x, y)
 
 -   rect = Rect.new(0, 0, 999, 999)
 
 -   if actor.id == 1
 
 -     bitmap = Cache.load_bitmap("Graphics/Pictures/", "半身图1")
 
 -     self.contents.blt(x, y, bitmap, rect)
 
 -   elsif actor.id == 2   # 如此类推
 
 -     bitmap = Cache.load_bitmap("Graphics/Pictures/", "半身图2")
 
 -     self.contents.blt(x, y, bitmap, rect)
 
 -   else   # 为了防止人物没有半身图发生错误
 
 -     bitmap = Cache.load_bitmap("Graphics/Pictures/", "空白图的名称")
 
 -     self.contents.blt(x, y, bitmap, rect)
 
 -   end
 
 - end
 
 
  复制代码 然后在refresh这函数里加进: 
- draw_actor_body(@actor, 272, 156)
 
 - #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这几个变量。 
在函数里以新的名字应用。 
 
看不明白上面的话请看下面的解说: 
- model_function(50)
 
 - def model_function(value)
 
 -   p value    # => 50
 
 - end
 
 - # 最终得出窗口数目50
 
 
  复制代码 再看看这一个: 
- @vx = 35
 
 - model_function(@vx)
 
 - def model_function(abc)
 
 -   p abc    # => 35
 
 - end
 
 - # 最终得出窗口数目35
 
 
  复制代码 看完上面的两个例范明白了吗? 
(不明白再看几次!) 
 
window的最后,这样加进图片就能显示出来了。 
 
 
二、Scene: 
不说那么多,因为是用@status_window = Window_Status.new(@actor) 
这方法让Window接收,那Scene的@actor就像等于Window的actor(这就是参数的原理。) 
Scene     Window 
@actor = actor 
@actor.id = actor.id 
同样原理的方法,不过在start这函数里加进: 
- @NewBitmap = Sprite.new
 
 - if @actor.id == 1
 
 -   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/半身图1.png")
 
 - elsifs   # 如此类推
 
 -   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/半身图2.png")
 
 - else
 
 -   @NewBitmap.bitmap = Bitmap.new("Graphics/Pictures/空白图.png")
 
 - end
 
 - @NewBitmap.x = 272
 
 - @NewBitmap.y = 156
 
 - @NewBitmap.z = 100
 
 
  复制代码 不过有听过第一课的同学就会知道场景里会有update和diapose两个重点, 
而因为Scene在离开时需要消除物件,同样的,@NewBitmap也需要消除, 
我们要在terminate这函数里插入,terminate这函数是在场景结束时所做的动作, 
在terminate里插进: 
- @NewBitmap.dispose  # 正式名字是释放
 
 
  复制代码 至于不用update是因为图案没有需要用到update的地方。 
最后完成了。 
 
总结,我们学习了: 
1.两种参考式的Window与Scene显示图案的方法。 
2.bitmap类要靠Sprite类显示。 
3.大概的了解参数应用。 
 
 
 
好了,这节课上完了,谢谢大家。 
 
下一课: 
新手教程——简单测试法x2 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |