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

Project1

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

[已经解决] [已解决]脚本里面如何显示文章,提示此类物品满了。

[复制链接]

Lv5.捕梦者

梦石
0
星屑
37849
在线时间
5427 小时
注册时间
2006-11-10
帖子
6549
1
发表于 2020-9-28 12:01:16 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2020-9-28 12:05 编辑

没事别想着折腾对话窗口, 咱以前不是和你说了,它属于中BOSS级别的,要调用它可没那么简单,笑

只要显示个文字窗口而已, 直接写就好啦

栗子:
  #--------------------------------------------------------------------------
  # ● 增加物品 (减少)
  #     item_id : 物品 ID
  #     n       : 个数
  #--------------------------------------------------------------------------
  def gain_item(item_id, n)
    # 更新 hash 的个数数据
    if item_id > 0
      max("#{$data_items[item_id].name}已满")if item_number(item_id) + n >= 10
      @items[item_id] = [[item_number(item_id) + n, 0].max,10].min
    end
  end
  
  def max(str)
    a = Window_Base.new(220,208,200,64)
    a.contents = Bitmap.new(168,32)
    a.contents.draw_text(0,0,168,32,str,1)
    w = 510
    loop do
      a.opacity = w
      a.contents_opacity = w
      w -= 12
      if w <= 0
        a.dispose
        break
      end
      Graphics.update
    end
  end

点评

哈哈,按照这个思路,整合下各个物品、武器、防具 设置不同上限,做出对应提示。  发表于 2020-9-28 16:06

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
miantouchi + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37849
在线时间
5427 小时
注册时间
2006-11-10
帖子
6549
2
发表于 2020-9-29 11:51:45 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2020-9-29 12:03 编辑

1,因为我是用单独刷新窗口的方式, 调用max后就自己循环刷新40帧左右, 导致原本应该瞬间执行完毕的gain_item产生了时间差,它下面的Window.refresh延后执行自然你就看到黑底了,笑

解决方法, 让它和主main一起刷新即可, 具体方法以前有让你实验过(说明窗口UPDATE的时候,用全局变量实现跨scene刷新), 自己思考下吧

2,用你最后一张图的方法就可以了呗,事件处理最绿色了, 不过判定要改成 持有数 + 获得数 < 上限 才符合逻辑
至于想省事可以对list下手, 笑, 给你个栗子吧

  1. class Interpreter
  2.   def 塞得下?
  3.     a = false
  4.     for i in @list
  5.       if i.code == 126
  6.         value = operate_value(i.parameters[1],i.parameters[2],i.parameters[3])
  7.         a |= ($game_party.item_number(i.parameters[0]) + value > 10)
  8.         next
  9.       end
  10.       if i.code == 127
  11.         value = operate_value(i.parameters[1],i.parameters[2],i.parameters[3])
  12.         a |= ($game_party.weapon_number(i.parameters[0]) + value > 10)
  13.         next
  14.       end
  15.       if i.code == 128
  16.         value = operate_value(i.parameters[1],i.parameters[2],i.parameters[3])
  17.         a |= ($game_party.armor_number(i.parameters[0]) + value > 10)
  18.         next
  19.       end
  20.     end
  21.     return !a
  22.   end
  23. end
复制代码


把这个脚本插到 Interpreter 类下面main 上面

然后去  条件分歧-脚本:塞得下?    就可以得到你要的判断了, 且支持复数道具/武器/防具的判断

PS:没测试哦

点评

这句的意思就是 循环整个事件的内容,找到有"增减道具,增减武器,增减防具"的命令,就判断该道具是否上限,如果有一个增加超过上限,这个判断就返回false   发表于 2020-10-1 23:59
a |b是位或运算,解释起来很麻烦,笑,知道效果就行了,这里意思就是,左右都为false,返回false,左右有一个是true就返回true  发表于 2020-10-1 23:55
全局变量实现跨scence,我在什么时候问的都忘了。。。  发表于 2020-10-1 20:01
用你的代码效果达到了,对了 a |= ,这个代码什么意义,能介绍下你这个代码大体是什么意思吗? 另外说明窗口UPDATE这个我有点忘了。  发表于 2020-10-1 19:59
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37849
在线时间
5427 小时
注册时间
2006-11-10
帖子
6549
3
发表于 2020-10-2 00:14:45 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2020-10-2 00:22 编辑

用全局变量来实现刷新,简单做法就是这样

$www.update if $www != nil

把这句塞到所有 scene 类的主UPDATE里

然后写个带自动释放的窗口

class Win_popup < Window_Base
  def initialize(str)
    super(220,208,200,64)
    self.contents = Bitmap.new(168,32)
    self.contents.draw_text(0,0,168,32,str,1)
    @w = 510
  end
  def update
    self.opacity = @w
    self.contents_opacity = @w
    @w -= 12
    if @w <= 0
      $www.dispose
      $www = nil

    end
  end
end

然后,在需要的地方给全局变量赋值  $www = Win_popup.new("天下无敌")  就行了, 因为你所有scene里都有它的 update 所以不管哪里调用都一样可以继续刷新, 就不存在卡进程的问题咯


像这样, 经过三个scene都一样继续刷新

点评

美工,代码都会无敌了  发表于 2020-10-2 18:16
_(:з」∠)_  发表于 2020-10-2 12:01
菜刀家电脑里,坑太大,他还没做完XD  发表于 2020-10-2 10:03
@89444640 那么...在那里可以下载来玩?  发表于 2020-10-2 09:42
舰娘战棋同人,全角色350个大阵容,超小容量100M以下,全角色立绘,包括角色好感度,港区建设,舰船改造,舰船升级,弹窗小广告……  发表于 2020-10-2 08:26
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-4 19:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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