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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2020-9-27 18:41:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 miantouchi 于 2020-10-1 20:09 编辑

我想把每个物品、武器、防具、设置个物品携带上限。
例如设置上限为10个,当超出这个就会提示,背包满了类似这个字样。
于是我在gain_item里面加了个判断并且用$game_temp.message_text,但是没有什么反应
不知道怎么弄了
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 增加物品 (减少)
  3.   #     item_id : 物品 ID
  4.   #     n       : 个数
  5.   #--------------------------------------------------------------------------
  6.   def gain_item(item_id, n)
  7.     # 更新 hash 的个数数据
  8.     if item_id > 0
  9.       $game_temp.message_text = "背包已满!" if item_number(item_id) + n > 10
  10.       @items[item_id] = [[item_number(item_id) + n, 0].max, 10].min
  11.     end
  12.   end

Lv4.逐梦者

梦石
2
星屑
13088
在线时间
2273 小时
注册时间
2011-6-4
帖子
613
2
发表于 2020-9-27 20:19:14 | 只看该作者
想直接调出对话窗口显示背包已满的话,这样做是远远不够的,不如自己新写个窗口提示背包已满。

评分

参与人数 1+1 收起 理由
miantouchi + 1 塞糖

查看全部评分

BUG反馈请加QQ 529283039
水友群 917854767

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37789
在线时间
5398 小时
注册时间
2006-11-10
帖子
6546
3
发表于 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
星屑
33168
在线时间
10488 小时
注册时间
2009-3-15
帖子
4756
4
发表于 2020-9-28 13:03:17 | 只看该作者
用公共事件....

点评

要什么例子..你会脚本调用公共事件吧?  发表于 2020-9-28 16:15
有例子就好了  发表于 2020-9-28 16:05

评分

参与人数 1+1 收起 理由
miantouchi + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

5
 楼主| 发表于 2020-9-28 15:10:59 | 只看该作者
灯笼菜刀王 发表于 2020-9-28 12:01
没事别想着折腾对话窗口, 咱以前不是和你说了,它属于中BOSS级别的,要调用它可没那么简单,笑

只要显示个文 ...

不知道怎么回事还报错

mmexport1601276956831.png (27.17 KB, 下载次数: 5)

mmexport1601276956831.png

mmexport1601276959948.png (55.65 KB, 下载次数: 7)

mmexport1601276959948.png

点评

今天电脑犯病了,好用了!重新建个新工程,谢谢。  发表于 2020-9-28 16:03
我测试了没问题  发表于 2020-9-28 15:26
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

6
 楼主| 发表于 2020-9-28 22:47:50 | 只看该作者
本帖最后由 miantouchi 于 2020-9-28 22:50 编辑
灯笼菜刀王 发表于 2020-9-28 12:01
没事别想着折腾对话窗口, 咱以前不是和你说了,它属于中BOSS级别的,要调用它可没那么简单,笑

只要显示个文 ...


不过离目标效果还有2个问题
1。个是在商店买东西,如果出现此类物品买满了会,买东西窗口会出现黑底,等到满了提示完事后才恢复正常。

2。如果人物身上携带10个药水,上限也是10个,这时打开宝箱后提示满了,
,人物还可以再次获得,比如扔1瓶,或者角色用了1瓶,等玩家有空缺时候还可以继续获得。
类似下面gif动画那种效果。

我尝试用$game_party.item_number(编号),这样写,编号只能写死了,什么物品就改什么物品编号,
另外我这么做舍弃了你绘制的物品满了对话框,又用上了显示文章
不太会这个地方。


1.png (58.45 KB, 下载次数: 4)

1.png

2.png (89.64 KB, 下载次数: 5)

2.png

3.png (47.6 KB, 下载次数: 5)

3.png

1.gif (196.61 KB, 下载次数: 4)

1.gif

4.png (49.83 KB, 下载次数: 4)

4.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33168
在线时间
10488 小时
注册时间
2009-3-15
帖子
4756
7
发表于 2020-9-28 23:25:33 | 只看该作者
miantouchi 发表于 2020-9-28 22:47
不过离目标效果还有2个问题
1。个是在商店买东西,如果出现此类物品买满了会,买东西窗口会出现黑底,等 ...

你在脚本那写个获得宝箱物品满了就打开开关
到宝箱事件开关打开时显示已满,然后关掉开关...
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37789
在线时间
5398 小时
注册时间
2006-11-10
帖子
6546
8
发表于 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
星屑
37789
在线时间
5398 小时
注册时间
2006-11-10
帖子
6546
9
发表于 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-4-25 06:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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