设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
123
返回列表 发新帖
楼主: 八云紫
打印 上一主题 下一主题

[RMVX发布] 新手教程--从0开始学RGSS2(2013-09-21 修复索引地址)

  [复制链接]

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

21
 楼主| 发表于 2010-12-23 00:18:37 | 显示全部楼层
本帖最后由 八云紫 于 2011-1-9 21:12 编辑

Window 窗口

    其实这个教程想了好久, 不知道该怎么写. 于是就照搬 F1 了, 只是更加进一步说明一下. 或者给点例子什么的.

    Window 窗口类
    游戏窗口的类。在内部由多重的精灵所组成。

    类方法
        Window.new([viewport])
        生成一个窗口物件。必要时指定一个显示端口(Viewport 显示端口类)。

       方法
       ★ dispose
       释放窗口。若窗口已释放则什么都不做。

       ★ disposed?
       当窗口已释放则返回 true。

       ★ update
       刷新光标的闪烁和暂停标记的动画。原则上每一画格调用一次。
       除非有使用光标或者是暂停标记, 其他的情况下, 没有必要调用这个方法. 起不到任何作用.

       属性
       ★ windowskin
       引用作为窗口外观的位图(Bitmap 位图类)。
       只能够使用 VX 的窗口外观。(RGSS2)
       VX 所使用的窗口素材与 XP 相比有很大的不同, 这个看素材就知道了.(其实是没有安装 XP , 也不好细说, 以后增加吧. 或者去看看有没有人写过这个~)
     
       ★ contents
       引用作为窗口内容的位图(Bitmap点阵图类)
       默认的 contents  的初始值其实是这个的:
  1. contents = Bitmap.new(0, 0, 1, 1)
复制代码
这个值分别在 Window_Base 和 Window_Selectable 的 create_contents 方法里被重新赋值.


       ★ viewport (RGSS2)
       引用与窗口关联的显示端口(Viewport显示端口类)。
       这里要非常的注意一个问题, Window 类里使用的viewport 其实就是在初始化的时候指定的那个. 如果之前的那个 viewport 被修改的话, 这里也会被修改.
  1. v = Viewport.new(0, 0, 100, 100)
  2. w = Window.new(v)
  3. p w.viewport.rect
  4. v.rect.x = 10
  5. p w.viewport.rect
复制代码


       ★ cursor_rect
       游标的矩形(Rect矩形类)以相对坐标 (-16, -16) 设置窗口的左上角。
       这里注意一下, 真实的测试效果和 F1 的说明不一致, 不知道是不是我的测试出问题了.
  1. w = Window.new()
  2. p w.cursor_rect
复制代码
得到的结果是 (0, 0, 0, 0) . 不是F1 里的 -16, -16.


       ★ active
       光标闪烁的状态。true 表示闪烁。

       ★ visible
       窗口可见的状态。true 表示可见。

       ★ pause
       暂停标记可见的状态。true 表示可见。

       ★ x
       窗口的 X 坐标。
      
       ★ y        
       窗口的 Y 坐标。

       ★ width
       窗口的宽度。

       ★ height
       窗口的高度。

       ★ z
       窗口的 Z 坐标。数值愈大的平面愈靠近玩家。Z 坐标相同的,最后生成的对象则会最靠近玩家。
       窗口背景和内容的 Z 坐标在 RGSS2 中不能使用不同的 Z 坐标。(RGSS2)

       ★ ox
       窗口内容的 X 坐标。滚动窗口时修改此数值。

       ★ oy
       窗口内容的 Y 坐标。滚动窗口时修改此数值。
       以上两个属性和 Sprite 的同名属性作用一样. 在不移动窗口位置的情况下, 仅仅是移动窗口的内容. 这个可以理解成 当角色在地图上行走的时候, 地图需要适应性的滚动, 但是 RM 的窗口的位置依旧不变一样.

       ★ opacity
       窗口的不透明度(0~255)。超出此范围的数值会自动修正。
       opacity 针对的是整个Window

       ★ back_opacity
       窗口背景的不透明度(0~255)。超出此范围的数值会自动修正。

       ★ contents_opacity
       窗口内容的不透明度(0~255)。超出此范围的数值会自动修正。

       ★ openness (RGSS2)
       窗口的开启程度(0~255)。超出此范围的数值会自动修正。
       将此数值从 0(完全关闭)至 255(完全开启)之间变换,可以产生窗口打开和关闭的动画效果。 openness 若低于 255,则不会显示其内容。默认值 255。
       Window 的内容只有在 openness  等于 255 的时候才能显示出来.

点评

额, 好吧, 笔误~~~  发表于 2011-1-9 21:11
★ windowskin 引用作为窗口外观的位图(Bitma 位图类)。  发表于 2011-1-9 21:09
Window_Message 里有用到. 对话的暂停的时候可以用的说~~  发表于 2010-12-23 09:21
怎么从来都没见过pause 0.0  发表于 2010-12-23 09:17

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

22
 楼主| 发表于 2010-12-23 21:09:43 | 显示全部楼层
本帖最后由 八云紫 于 2010-12-23 22:18 编辑

Game 类应用<< 技能书脚本>>
  ★ 要实现的功能
  名字是 << 技能书脚本>> , 那么, 脚本的功能就是使用一个物品(技能书), 让被使用的角色可以学习到物品里指定的技能.

  ★ 初期问题
  1. 既然是物品, 那么就存在一个方法来实现这个物品的使用.
  2. 既然是技能书, 那么就应该有一个对应关系, 就是 物品 => 技能 . 也就说什么物品可以学习到什么技能.
  3. 物品可以使用, 那么技能也应该需要学习.
  4. 需要知道这个物品时给谁使用.

  ★ 初期运行步骤构思
  1. 使用物品
  2. 从使用的物品中取得某个资料
  3. 将这个资料通过某种方式转换成技能资料
  4. 获得被使用者的资料
  5. 让这个使用者学习到这个技能.

  ★ 初期资料收集
  1. 找到能实现 使用物品 的方法.
   于是全局搜索 "使用物品". 找到一些满足条件的.

    我们一个个来排除:
     ● Sound: 这个一定不是了. 看名字就知道是处理声音的.
     ● Game_Battler: 计算的方法, 也不是.
     ● Scene_Item 和 Scene_Skill : 看起来好像就是这里, 点进去一看, 其实是场景跳转什么的.
     ● Scene_Battle : 有两处. 我们想来看看第一个.
  1. when 2  # 使用物品
  2.       execute_action_item
复制代码
可能性很高. 于是继续查找 execute_action_item 这个方法.
  1. #--------------------------------------------------------------------------
  2.   # ● 执行战斗行动:使用物品
  3.   #--------------------------------------------------------------------------
  4.   def execute_action_item
  5.     item = @active_battler.action.item
  6.     text = sprintf(Vocab::UseItem, @active_battler.name, item.name)
  7.     @message_window.add_instant_text(text)
  8.     targets = @active_battler.action.make_targets
  9.     display_animation(targets, item.animation_id)
  10.     $game_party.consume_item(item)
  11.     $game_temp.common_event_id = item.common_event_id
  12.     for target in targets
  13.       target.item_effect(@active_battler, item)
  14.       display_action_effects(target, item)
  15.     end
  16.   end
复制代码
于是就找到了. 就是那个 target.item_effect(@active_battler, item). item_effect就是实现使用物品的方法.

  使用同样的方法可以查找到学习技能的方法: learn_skill.
  
  ★ 开始修改脚本
  1. 我们先从 item_effect 入手. 因为需要修改默认脚本的方法, 所以 alias 的作用很重要.
  1. alias old_item_2_skill_item_effect item_effect
复制代码
2. 然后写一个 item_effect 方法.
  1. def item_effect(user, item)
  2.     old_item_2_skill_item_effect(user, item)
  3.     item_id = item.id
  4.     skill_id = Item2Skill::Item_to_Skill[item_id]
  5.     return if skill_id == nil
  6.     skill_id.each do |id|
  7.       user.learn_skill(id)
  8.     end
  9.   end
复制代码
这里可以将 old_item_2_skill_item_effect 理解成旧的 item_effect. 调用 old_item_2_skill_item_effect 也就是调用 旧的 item_effect. 所以参数是一样的.
    3. 主要到  Item2Skill 这个模块了吗? 它的作用就是将 物品和技能联系在一样. 于是可以这么定义  Item2Skill 模块.
  1. module Item2Skill
  2.   Item_to_Skill = {
  3.     21 => [2],
  4.   }
  5. end
复制代码
第一个 21 是物品的ID号, 后面的 2 是要学习的技能ID. 使用数组的理由是可以添加多个技能ID.

    ★ 测试
    测试就不说了. 有错误改就是了.
  

点评

话说这个能纯事件吧……  发表于 2013-3-29 22:33
丫头,我辈拜服,再造之恩,回来再报  发表于 2010-12-23 21:20

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

23
 楼主| 发表于 2011-1-9 20:52:55 | 显示全部楼层
本帖最后由 八云紫 于 2011-1-10 17:33 编辑

Color 色彩 和 Tone 色调

       Color 色彩
       说到颜色, 需要从我们的眼睛说起.
       人的视觉系统有3类与颜色相关的锥细胞. 我们就是使用这三类的锥细胞对颜色做出反应的. 这个就是三基色的理论基础. 这样就可以让计算机的颜色表示方法减少到3总颜色值. 于是, 两种颜色的三基色值相同的话, 他们在视觉上就是等价可互换的.
       另外一个颜色系统. 可以区分成两类, 加色法和减色法.
       加色法是指使用三基色相加来获取颜色. 我们 VX 里的颜色系统就是使用加色法的. 加色法中的三基色分别是: 红色, 绿色, 蓝色. 我们可以将这三个颜色值按照一定的比例投影到黑色的屏幕上获取颜色.
       减色法与加色法相反. 它是从白色的光中去除某些颜色来获取最终的颜色的. 减色法在 打印机, 绘图仪等工具上使用. 减色法里的三基色分别是: 青色, 品红色, 黄色.

       回到 VX . VX 的颜色使用的加色法. 于是得到三基色 RGB . 于是我们就可以用这个来取得我们需要的颜色, 比如品红:
  1. magenta = Color.new(255, 0, 255)
复制代码
单纯的使用 RGB 的话, 有的场合时不能达到要求的. 于是我们就引入 四色系统(RGBA) . 前三个 RGB 和前面说的一样. A 是指 α(alpha)通道. 也就是透明度(正确叫法是 不透明度, 透明度是咱习惯叫法). 例如我们需要一个半透明的品红:
  1. magenta = Color.new(255, 0, 255, 128)
复制代码
Tone 色调
        Tone 类和 Color 类很类似. 只是用的地方有点区别就是了. Tone 类里相对于 Color 的 alpha 的位置, 是灰度值, 也就是指纯白、纯黑以及两者中的一系列从黑到白的过渡色。
        Tone 类用来指定精灵(Sprite) 和 Viewport 的整体颜色倾向.
     

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

24
 楼主| 发表于 2011-1-9 21:04:40 | 显示全部楼层
回复 一箭烂YiJL 的帖子

减色法的三基色换成 RGB 的值, 可以很容易的看出猫腻:
品红 Magenta (255,     0, 255)
黄    Yellow     (255, 255,     0)
青    Cyan      (0,     255, 255)

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

25
 楼主| 发表于 2011-1-9 21:54:18 | 显示全部楼层
本帖最后由 八云紫 于 2011-1-9 22:02 编辑

回复 一箭烂YiJL 的帖子

Tone 和 color 只能说是类似而不能等同

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

26
 楼主| 发表于 2011-1-10 15:40:50 | 显示全部楼层
征求一些简单,有代表性一样的小脚本请求,咱是想写一些范例什么的。

请大家帮忙想想的说。意见采纳奖励500分~~~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

27
 楼主| 发表于 2011-1-10 21:57:56 | 显示全部楼层
回复 david50407 的帖子

Bitmap 无从下手的说~~~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
263
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

28
 楼主| 发表于 2013-9-21 19:51:27 | 显示全部楼层
修复了下由于网站的原因导致的索引失效的问题.

恩? 正则表达式? 好吃么?

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-13 12:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表