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

Project1

 找回密码
 注册会员
搜索
楼主: david_ng223
打印 上一主题 下一主题

[結帖]我開始學腳本啦~~求大神們指點~~

[复制链接]
david_ng223 该用户已被删除
71
 楼主| 发表于 2014-2-7 21:09:39 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

72
发表于 2014-2-7 21:35:41 | 只看该作者
david_ng223 发表于 2014-2-7 21:09
#--------------------------------------------------------------------------
  # ● 绘制敌人名称
...

为什么你要找draw_enemy_name啊  Window_Base里有这方法吗…………

如果你需要一个可以选择的列表,那么最好使用<Window_Selectable【可选择的窗口】
如果不是  Window_Base就可以了
需要了解的:
窗体类的update方法 一般是每一帧都调用一次 特殊情况以后再了解 【更新 update
refresh方法 一般用于描绘文字图像之类的 因为描绘比较耗费时间 所以只有当内容改变的时候才应该调用 (内容是否改变在update里判定) 【刷新 refresh

所以 你可以这样
  1. def refresh
  2.   super
  3.   draw_pokedex_icon
  4.   draw_pokedex_text
  5. end
复制代码

点评

draw_enemy_name即是我的draw_pokedex_text  发表于 2014-2-7 21:38
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
73
 楼主| 发表于 2014-2-7 22:01:31 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

74
发表于 2014-2-7 22:14:13 | 只看该作者
david_ng223 发表于 2014-2-7 22:01
啊啊啊啊啊, ,為什麼只是1個icon和7只英文字都要這麼多步驟的..........
表示用了下面的代碼仍 ...

那么这样
RUBY 代码复制
  1. def initialize(x,y,width,height)
  2.   super(x,y,width,height)
  3.   refresh
  4. end
  5.  
  6. def refresh
  7.   contents.clear
  8.   draw_pokedex_icon
  9.   draw_pokedex_text
  10. end
因为父类没有调用refresh 自然什么都没有
另外
RUBY 代码复制
  1. draw_icon(POKEDEX_ICON, 0, 0, enabled)
后面的enabled是个没有值的变量  不要用它 因为会描绘成半透明
直接这样
RUBY 代码复制
  1. draw_icon(POKEDEX_ICON, 0, 0)

点评

迟早得懂,晚懂不如早懂,并且blt比那些draw_icon方便得多  发表于 2014-2-8 10:21

评分

参与人数 1星屑 +7 收起 理由
kuerlulu + 7 继续围观大触【忍不住评分了肿么办!!.

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
75
 楼主| 发表于 2014-2-7 22:58:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

76
发表于 2014-2-8 09:30:36 | 只看该作者
david_ng223 发表于 2014-2-7 22:01
啊啊啊啊啊, ,為什麼只是1個icon和7只英文字都要這麼多步驟的..........
表示用了下面的代碼仍 ...

我觉得,这东西没必要刷新(因为不会变)
干脆就在initialize画完就好了

另外我觉得你还需要更好的理解Ruby。这里写方法并不是要模仿其他类的方法,而是要真正自己写。

RUBY 代码复制
  1. class Window_Pokedex < Window_Base
  2.   include Dream::Pokedex
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化
  5.   #--------------------------------------------------------------------------
  6.   def initialize(x, y, width, height)  # 这是在新建窗口的时候要做的事情
  7.     super   # 用相同的参数调用父类方法
  8.     draw_pokedex_icon   # 新建窗口的时候就画上图标
  9.     draw_pokedex_text   # 新建窗口的时候就画上文字
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 繪制图鉴圖標
  13.   #     enabled : 有效的標志。false 的時候使用半透明效果繪制
  14.   #--------------------------------------------------------------------------
  15.   def draw_pokedex_icon
  16.     draw_icon(POKEDEX_ICON, 0, 0, enabled)
  17.   end  
  18.   #--------------------------------------------------------------------------
  19.   # ● 绘制图鉴名称
  20.   #--------------------------------------------------------------------------
  21.   def draw_pokedex_text
  22.     draw_text(0, 0, 136, 52, POKEDEX_VOCAB)
  23.   end
  24. end


如果内容需要变化的话,就要调用refresh方法重绘内容(refresh只是一个名字,没有实际意义,但一般都用这方法。另外update这个名字是有实际意义的)
举个栗子
RUBY 代码复制
  1. class Window_Something
  2.   def refresh  # 刷新
  3.     contents.clear
  4.     draw_contents  # 这个按照自己的写
  5.   end
  6.  
  7.   def update # 这个方法在场景里会自动每帧调用一次
  8.     super
  9.     refresh if need_refresh?  # need_refresh 是个需要自己写的条件
  10.   end
  11. end


或者
RUBY 代码复制
  1. class Window_Something
  2.   def refresh  # 刷新
  3.     contents.clear
  4.     draw_contents  # 这个按照自己的写
  5.   end
  6.  
  7.   def change_contents
  8.     something is changed
  9.     refresh
  10.   end
  11. end

点评

凡是描绘一类的我都喜欢放在refresh 然后根据情况不同在不同的地方调用 上面就是在init里调用的  发表于 2014-2-8 09:34
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
77
发表于 2014-2-8 10:13:05 | 只看该作者
理解有困难的话,就直接用draw_text和blt之类的来画,没必要继承Window_Base的那些逗方法,如果需要包装一些固定的功能自己写几个方法也行
绘图过程放在refresh,在update里判定是否需要refresh,initialize里面根据需要来决定是否refresh,Window_Selectable一般都不refresh的,Window_Base往往是要的
Window系列的类继承时要小心,进行必要的super就可以了,Window_Base的update基本上就是不需要继承的,而Window_Selectable的update因为包括了按键判定就是需要继承的,如果继承了不必要的东西可能会出现一些难以觉察的错误
Window类要多写多熟悉,对于理解类的使用有帮助【以后理解了Sprite就可以把Window扔掉了【PIA
另外窗口分得很多,或者占满屏幕这样并不美观,建议好好设计一下,做成浮动窗口就更好了

点评

浮动窗口是什么來的??有木有截图可以給我看看~~  发表于 2014-2-8 11:48
你觉得新人会懂blt…………  发表于 2014-2-8 10:14
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

78
发表于 2014-2-8 11:41:12 | 只看该作者
我尝试着看了一下 因为不知道你想要怎样的实现 所以简略的改了一下
真的很简略 主要是时间不够了
Project1.rar (1.91 MB, 下载次数: 44)
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
79
 楼主| 发表于 2014-2-8 13:54:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

80
发表于 2014-2-8 15:26:30 | 只看该作者
david_ng223 发表于 2014-2-8 13:54
為什麼我明明將顯示行數返回了5,可是遊戲中仍然會是11行的??

class Window_Category < Window_Command

正常情况下 visible_line_number的调用者是window_height 你这里覆盖了调用者 所以没有调用

而且 这个显示行数的原理是 调整窗口高度 把下面的遮起来
所以 只要窗口足够高  就能够显示指定行数

除非你的窗口刚好够显示五行 否则他就会铺满窗口
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 15:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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