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

Project1

 找回密码
 注册会员
搜索
查看: 2253|回复: 4
打印 上一主题 下一主题

[已经解决] draw_text被成功执行缺没有显示?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1165
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

跳转到指定楼层
1
发表于 2010-7-6 13:13:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 DeathKing 于 2010-7-6 17:18 编辑

之前:




直接上工程,帖子里说不清,群里经过了一番激烈的讨论,否定了是坐标的问题

请测试时直接按ESC呼出菜单-》技能,然后上下左右。

SkillNeadItem.rar (236.78 KB, 下载次数: 52)




感谢大家帮我解决,这个问题在我刚刚发布没多久就已经被IamI解决了,貌似和创建的Bitmap有关系?
解决方法:self.visible = true的下方添加create_contents,重建位图?

认可本答案的150分本来应该给IamI,但是我觉得大家说得都有理,对我也很有启示,所以就用150积分转账给II,然后给【旅】、【yangff】、【紫苏】各50分,在这里谢谢大家了{:nm_4:} 。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1515
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

2
发表于 2010-7-6 14:25:38 | 只看该作者
  1.     @sprite = Sprite.new
  2.     @sprite.bitmap = Bitmap.new(200,200)
  3.     @sprite.bitmap.draw_text(0,0,300,300,"~~~~~~~~~~~")
复制代码
这是第一个用的~发现一切正常。于是改了一下,
  1.     @sprite = Sprite.new
  2.     @sprite.bitmap = self.contents#Bitmap.new(200,200)
  3.     @sprite.bitmap.draw_text(0,0,300,300,"~~~~~~~~~~~")
复制代码
发现有文字了~~不过是@sprite的。~~于是想了想,应该是self的属性问题~~于是乎——
self.contents_opacity = 255 ~~

评分

参与人数 1星屑 +100 收起 理由
DeathKing + 100 具体情况看主楼

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

3
发表于 2010-7-6 14:30:13 | 只看该作者
  1. #===============================================================================
  2. # ■ 技能消耗物品
  3. #    Skill Need Item
  4. #-------------------------------------------------------------------------------
  5. #    设定一些值,当拥有制定物品的制定个数及以上时才可发动特技。发动特技会
  6. #    消耗掉这些物品。
  7. #
  8. #    在技能的“注释”中如下书写:
  9. #        <need_item 物品id,对应数量 物品id,对应数量 …… >
  10. #        <need_item 1,1 2,2 3,3>
  11. #-------------------------------------------------------------------------------
  12. #    项目主管: DeathKing
  13. #    更新作者: DeathKing
  14. #    许可协议: FSL
  15. #    项目分类: VX \ 系统加强
  16. #    衍生关系:
  17. #    项目版本: 1.1.0
  18. #    建立日期: 2010年05月29日
  19. #    最后更新: 2010年07月05日
  20. #    引用网址:
  21. #-------------------------------------------------------------------------------
  22. #    - 1.1.0 (2010.06.07)
  23. #      * 改变了设置方法;
  24. #
  25. #    - 1.0.0 (2010.05.29)
  26. #      * 初始版本完成;
  27. #===============================================================================
  28. $fscript = {} if $fscript == nil
  29. $fscript["SkillNeedItem"] = [1,1,0]


  30. #-------------------------------------------------------------------------------
  31. # ▼ 通用配置模块
  32. #-------------------------------------------------------------------------------
  33. module FSL
  34.   module Conf
  35.     module SNItem
  36.       WINDOW_X = 272 # X  544 / 2
  37.       WINDOW_Y = 112 # Y  56  * 2
  38.       WINDOW_W = 274 # 宽
  39.       WINDOW_H = 640 # 高
  40.       
  41.       TEXT_NEED   = "需要:"
  42.       TEXT_NEED_X = WINDOW_X - 104
  43.       
  44.       TEXT_ITEM_NUM_X = WINDOW_X - 52
  45.       
  46.       BACK_OPACITY = 200
  47.       
  48.     end
  49.   end
  50. end


  51. #==============================================================================
  52. # ■ Window_SNItem
  53. #------------------------------------------------------------------------------
  54. #  需要的物品的窗口。
  55. #==============================================================================

  56. class Window_SNItem < Window_Base
  57.   
  58.   include FSL::Conf::SNItem
  59.   

  60.   #--------------------------------------------------------------------------
  61.   # ● 初始化对像
  62.   #     x      : 窗口 X 座标
  63.   #     y      : 窗口 Y 座标
  64.   #     width  : 窗口宽度
  65.   #     height : 窗口高度
  66.   #--------------------------------------------------------------------------
  67.   def initialize(skill,index = 0,y=WINDOW_Y)
  68.     skill_can_use(skill)
  69.     if @need_item==nil
  70.       begin
  71.         dispose
  72.       rescue
  73.         
  74.       end
  75.       return
  76.     end
  77.     super(index % 2 == 0 ? WINDOW_X : 0, y, WINDOW_W, @need_item.size * 24 + 32)
  78.     #self.back_opacity = BACK_OPACITY
  79.     self.visible = false
  80.     refresh(skill,index)
  81.   end

  82.   def skill_can_use(skill)
  83.     # 如果传递过来的skill为空
  84.     return false if skill == nil
  85.     # 读取need_item项的参数
  86.     @need_item = skill.read_note["need_item"]
  87.     # need_item参数为空的话返回true
  88.     return true if @need_item == nil
  89.     # 重新生成参数列表
  90.     @need_item_clone = []
  91.     @need_item.each do |e|
  92.       @need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
  93.     end
  94.     @need_item = @need_item_clone
  95.     # 遍历
  96.     @need_item.each_index do |i|
  97.       # 生成物品id
  98.       item_id  = @need_item[i][0]
  99.       # 生成物品数量
  100.       item_num = @need_item[i][1]
  101.       # 是否拥有物品,是的话返回物品的索引,不是的话返回nil
  102.       item_exist = $game_party.items.index($data_items[item_id])
  103.       # 不存在就返回false
  104.       return false if item_exist == nil
  105.       # 返回物品
  106.       test_item = $game_party.items[item_exist]
  107.       # 返回是否可用
  108.       return $game_party.item_number(test_item) <= item_num
  109.     end
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 判定技能可否使用(需要的物品是否满足)
  113.   #     skill  : 技能
  114.   #--------------------------------------------------------------------------
  115.   def self.skill_can_use?(skill)
  116.     # 如果传递过来的skill为空
  117.     return false if skill == nil
  118.     # 读取need_item项的参数
  119.     @need_item = skill.read_note["need_item"]
  120.     # need_item参数为空的话返回true
  121.     return true if @need_item == nil
  122.     # 重新生成参数列表
  123.     @need_item_clone = []
  124.     @need_item.each do |e|
  125.       @need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
  126.     end
  127.     @need_item = @need_item_clone
  128.     # 遍历
  129.     @need_item.each_index do |i|
  130.       # 生成物品id
  131.       item_id  = @need_item[i][0]
  132.       # 生成物品数量
  133.       item_num = @need_item[i][1]
  134.       # 是否拥有物品,是的话返回物品的索引,不是的话返回nil
  135.       item_exist = $game_party.items.index($data_items[item_id])
  136.       # 不存在就返回false
  137.       return false if item_exist == nil
  138.       # 返回物品
  139.       test_item = $game_party.items[item_exist]
  140.       # 返回是否可用
  141.       return $game_party.item_number(test_item) <= item_num
  142.     end
  143.         end
  144.   #--------------------------------------------------------------------------
  145.   # ● 刷新窗口
  146.   #     skill  : 技能
  147.   #     index  : 技能在技能窗口的索引,用来判定本
  148.   #              窗口应该显示在左边还是右边
  149.   #--------------------------------------------------------------------------
  150.   def refresh( skill, index = 0)

  151.     # 清除之前产生的位图
  152.     #
  153.     self.contents.clear
  154.     # 如果skill为空就返回false
  155.     return false if skill == nil
  156.    
  157.     # 先让需要窗口不可见
  158.     self.visible = false
  159.     # 读取参数

  160.     #need_item = skill.read_note["need_item"]
  161.     # 如果参数不是个数组就将需要窗口隐藏并返回false
  162.     return false unless @need_item.is_a? Array
  163. =begin
  164.     # 重新生成参数列表
  165.     need_item_clone = []
  166.     need_item.each do |e|
  167.             need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
  168.     end
  169.     #p need_item_clone
  170.     need_item = need_item_clone
  171.     # 如果参数列表为空就返回
  172.     return false unless need_item.size >= 1
  173.     #create_contents
  174.     # 判定索引以决定窗口位置
  175.     self.x = index % 2 == 0 ? WINDOW_X : 0
  176.     # 改变窗口大小
  177.     self.height = need_item.size * 24 + 32
  178. =end
  179.     #create_contents
  180.     # 将窗口置为可见
  181.     self.visible = true
  182.     self.z=999999
  183.     # 遍历参数列表
  184.     @need_item.each_index do |i|
  185.             # 生成物品id
  186.       item_id  = @need_item[i][0]
  187.       # 生成物品数量
  188.       item_num = @need_item[i][1]
  189.       # 生成物品
  190.       item = $data_items[item_id]
  191.       # 判定物品是否足够
  192.       enabled = $game_party.item_number(item) >= item_num ? true : false
  193.       #enabled=true
  194.       # 绘制文字
  195.       #p item
  196.       draw_item_name(item, 0, 24 * i, enabled)
  197.   
  198.       self.contents.font.color.alpha = enabled ? 255 : 128
  199.       self.contents.draw_text(TEXT_NEED_X, 24 * i, 96, 24, TEXT_NEED) #
  200.       self.contents.draw_text(TEXT_ITEM_NUM_X,  WLH * i, 32, 24, item_num) #
  201.       #p item
  202.       #p TEXT_NEED_X,TEXT_NEED
  203.       #p item,item_num,item_id
  204.       
  205.     # 结束参数遍历
  206.     end

  207.    
  208.     #self.visible = true
  209.    
  210.    # self.contents.clear
  211.    # p "Son of"
  212.    # self.contents.draw_text(0,0,128,32,"HELLO")
  213.    
  214.   # 结束方法定义
  215.   end
  216. end

  217. #==============================================================================
  218. # ■ Game_Actor
  219. #------------------------------------------------------------------------------
  220. #  处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
  221. # Game_Party 类请参考 ($game_party) 。
  222. #==============================================================================

  223. class Game_Actor
  224.   #--------------------------------------------------------------------------
  225.   # ● 可用技能判断
  226.   #     skill : 技能
  227.   #--------------------------------------------------------------------------
  228.   def skill_can_use?(skill)
  229.     return false unless Window_SNItem.skill_can_use?(skill)
  230.     return false unless skill_learn?(skill)
  231.     return super
  232.   end
  233. end

  234. #==============================================================================
  235. # ■ Scene_Skill
  236. #------------------------------------------------------------------------------
  237. #  处理特技画面的类。
  238. #==============================================================================

  239. class Scene_Skill < Scene_Base

  240.   alias snitem_initialize initialize
  241.   alias snitem_terminate  terminate
  242.   alias snitem_update     update

  243.   #--------------------------------------------------------------------------
  244.   # ● 初始化对像
  245.   #     actor_index : 角色位置
  246.   #--------------------------------------------------------------------------
  247.   def initialize( actor_index = 0, equip_index = 0 )
  248.     snitem_initialize
  249. #    @snitem_window = Window_SNItem.new
  250.     #@os=@skill_window.skill
  251.     #@ow=@skill_window.index
  252. #    @snitem_window.refresh( @skill_window.skill, @skill_window.index )
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 结束处理
  256.   #--------------------------------------------------------------------------
  257.   def terminate
  258.     snitem_terminate
  259.     @snitem_window.dispose
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 更新画面
  263.   #--------------------------------------------------------------------------
  264.   def update
  265.     snitem_update
  266.     if (@os!=@skill_window.skill) or (@ow!=@skill_window.index)
  267.       begin
  268.         @snitem_window.dispose
  269.       rescue
  270.         #这个,偷懒
  271.       end
  272.       @snitem_window= Window_SNItem.new(@skill_window.skill, @skill_window.index)
  273.       
  274.       #@snitem_window.refresh( @skill_window.skill, @skill_window.index )
  275.       @os=@skill_window.skill
  276.       @ow=@skill_window.index
  277.     end
  278.   end
  279.    
  280. end

  281. #==============================================================================
  282. # ■ Scene_Battle
  283. #------------------------------------------------------------------------------
  284. #  处理战斗画面的类。
  285. #=============================================================================

  286. class Scene_Battle < Scene_Base
  287.   
  288.   alias snitem_update_skill_selection update_skill_selection
  289.   alias snitem_start_skill_selection  start_skill_selection
  290.   alias snitem_end_skill_selection    end_skill_selection
  291.   
  292.   #--------------------------------------------------------------------------
  293.   # ● 开始技能选择
  294.   #--------------------------------------------------------------------------
  295.   def start_skill_selection
  296.     snitem_start_skill_selection
  297.     # 创建需要道具窗口,并把y坐标上移
  298.    # @snitem_window = Window_SNItem.new(270,56)
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● 结束技能选择
  302.   #--------------------------------------------------------------------------
  303.   def end_skill_selection
  304.     if @skill_window != nil
  305.       @snitem_window.dispose
  306.       @snitem_window = nil
  307.     end
  308.     snitem_end_skill_selection
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● 更新技能选择
  312.   #--------------------------------------------------------------------------
  313.   def update_skill_selection

  314.     # 调用原方法内容
  315.     snitem_update_skill_selection
  316.     # 刷新技能 这个在下面拜托…
  317.     if (@os!=@skill_window.skill) or (@ow!=@skill_window.index)
  318.       begin
  319.         @snitem_window.dispose
  320.       rescue
  321.         #这个,偷懒
  322.       end
  323.       @snitem_window= Window_SNItem.new(@skill_window.skill, @skill_window.index,55)
  324.       
  325.       #@snitem_window.refresh( @skill_window.skill, @skill_window.index )
  326.       @os=@skill_window.skill
  327.       @ow=@skill_window.index
  328.     end
  329.    
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 确认技能
  333.   #--------------------------------------------------------------------------
  334.   def determine_skill
  335.     @active_battler.action.set_skill(@skill.id)
  336.     @skill_window.active = false
  337.     if @skill.need_selection?
  338.       if @skill.for_opponent?
  339.         start_target_enemy_selection
  340.       else
  341.         start_target_actor_selection
  342.       end
  343.     else
  344.       end_skill_selection
  345.       next_actor
  346.     end
  347.   end
  348. end

复制代码

点评

真是诡异,一移动坐标就杯具,所以…  发表于 2010-7-6 14:30

评分

参与人数 1星屑 +100 收起 理由
DeathKing + 100 具体情况在主楼

查看全部评分

哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2010-7-6 15:38:27 | 只看该作者
确实很诡异,似乎只要是在窗口不可见的情况下改变了窗口属性,之后即便使窗口可见,其内容仍然不可见,除非在 visible = true 后再改变一下窗口的属性:
  1. w = Window_Base.new(100,100,132,132)
  2. w.visible = false
  3. w.contents.draw_text(0, 0, 100, 100, "test")
  4. w.z = 9999999
  5. w.width = 200
  6. w.visible = true
  7. #w.width = 200
复制代码
最后一行注释与否决定窗口是否可见
这个感觉应该是底层实现有问题,Window 应该是有独特的一套管理图像渲染的方法,和普通的 Sprite 不同。XP 似乎没这个问题

评分

参与人数 1星屑 +100 收起 理由
DeathKing + 100 具体情况在主楼

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
5
发表于 2010-7-6 16:02:28 | 只看该作者
经xp测试貌似没此问题,改用xp吧。
好歹当年也当过大魔王过,orz
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-7 07:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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