查看: 4426|回复: 6

[已经解决] 求问怎么设置饥饿度以及吃东西可以恢复饱食度这样?

[复制链接]
梦石
0
星屑
50
在线时间
27 小时
注册时间
2012-3-28
回帖
11
发表于 2014-12-16 18:32:33 | 显示全部楼层 |阅读模式

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

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

×
不用多余的脚本,单纯用系统来设置要怎么做呢?
还有口渴,疲劳这些状态,不要一直用事件,而是随着时间的流逝自己会有感觉这样……ACE能做到这样的事么?

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2014-12-16 21:06:59 | 显示全部楼层
不用脚本不用事件你想怎么做……通过冥想吗…

先形式的说一下,没有RM做不到的2D游戏效果,伪3D也可以达成,但是建议不要做折翼的天使。

生存类型的数据使用默认的hp、mp、tp就可以达到大部分效果。
如果还需要更复杂的生存属性需要再用几个变量来运转,如果是单一角色的游戏做起来会不那么复杂。
如果是多角色建议你自学脚本。
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2014-12-16 22:05:44 | 显示全部楼层
本帖最后由 tseyik 于 2014-12-16 22:14 编辑

関数1on状態表示
関数2on満腹度有效
変数2表示角色(1=角色1)
変数3満腹度操作満腹度
変数4満腹度最大値
測試事件
Image001.png

満腹度脚本[pre lang="ruby" line="1"]#----------------------------------------------------------------------------
#マップにウインドウ表示
#----------------------------------------------------------------------------

module MARU_MAP_WINDOW
  
  #★設定項目
  
  SWITCH = 1 #マップウインドウ表示に使用するスイッチ番号
             #該当スイッチONで表示、OFFで非表示
            
  MANPUKU = 2 #「満腹度」減少を有効にするスイッチ
              #このスイッチがOFFの時、満腹度及びHP(満腹度が0の時)は
              #減少しない。
              
  WINDOW = true  #ウインドウスキンを自作のモノにするかどうか
                  #「true」…自作ウインドウ
                  #「false」…デフォルトウインドウ
                  #trueにする場合、「system」フォルダに
                  #該当ウインドウを入れる事。
                  
                  
  #WINDOWをtrueにした場合の設定項目------------------------------------------
              
  W_NAME = [
  "backwin",  #自作ウインドウのファイル名(「system」フォルダを参照する)
  "backwin2",  #コンマ(,)で区切れば項目数を増やせます。
  "Actor1"
  ]
  
  W_NAME_V = 5 #自作ウインドウ画像変更に使う変数番号
               #この変数が0の時、W_NAME一番目の項目のファイル名を読みこみ、
               #1の時、W_NAME二番目の項目のファイルを読み込みます。
               #項目数を増やせば、3や4も指定出来ます。
               #(項目数-1)以上の数字は入れない事!エラーで強制終了します。
  
  W_X       = 6 #自作ウインドウ画像のX座標
  W_Y       = 7 #自作ウインドウ画像のY座標
  W_WSIZE   = 8 #自作ウインドウ画像の幅を決める変数番号
  W_HSIZE   = 9 #自作ウインドウ画像の高さを決める変数番号
  
                #自作ウインドウ描画スペースは544×96ピクセル。
                #画像の引き延ばし等は出来ません。
  
  OPACITY = 200       #自作ウインドウの透明度(0で透明、255で不透明)
  
  #---------------------------------------------------------------------------
  
  ACTOR  = 2 #ステータスを表示するアクターIDを参照する変数の番号
             #変数が0の時はアクターID1番のステータスを表示
            
  NAME   =  "満腹度"     #満腹度(仮)の名前
  VALUE  =  3            #満腹度(仮)の値を操作する変数の番号
  MVALUE =  4            #満腹度(仮)の値の最大値とする変数の番号
  STEP   =  10           #満腹度(仮)を1減らす歩数
  DAMEGE =  10           #満腹度(仮)が0の時、一歩毎に受けるHPダメージ
                        
  
  #★設定終わり

end



#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  マップ画面の処理を行うクラスです。
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 全ウィンドウの作成
  #--------------------------------------------------------------------------
  alias ma__create_all_windows create_all_windows
  def create_all_windows
    ma__create_all_windows #既存のウインドウ作成
    create_mapwin_window   #「マップウインドウ作成」メソッドへ
  end
  #--------------------------------------------------------------------------
  # ● マップウインドウの作成
  #--------------------------------------------------------------------------
  def create_mapwin_window
    @map_window = Window_Mapwin.new #マップウインドウを作る
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias ma_update update
  def update
    ma_update  #既存のアップデート
    @map_window.update #マップウインドウのアップデート
  end
end

#==============================================================================
# ■ Window_Mapwin
#------------------------------------------------------------------------------
#  マップに表示するウィンドウです。
#==============================================================================

class Window_Mapwin < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(win_adjust1,win_adjust1,Graphics.width+win_adjust2,fitting_height(3)+win_adjust2)
    if $game_switches[MARU_MAP_WINDOW::SWITCH] == false
      self.visible = false
    else
      self.visible = true
    end
    if $game_variables[MARU_MAP_WINDOW::ACTOR] != 0
      @actorsta = $game_actors[$game_variables[MARU_MAP_WINDOW::ACTOR]]
    else
      @actorsta = $game_actors[1]
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    return 140
  end
  #--------------------------------------------------------------------------
  # ● ウインドウの更新
  #--------------------------------------------------------------------------
  def update
    super
    if $game_switches[MARU_MAP_WINDOW::SWITCH] == false
      self.visible = false
      return
    else
      self.visible = true
    end
    if $game_variables[MARU_MAP_WINDOW::ACTOR] != 0
      @actorsta = $game_actors[$game_variables[MARU_MAP_WINDOW::ACTOR]]
    else
      @actorsta = $game_actors[1]
    end
    #値のチェック。描画時の値と違っていたらリフレッシュする。
    actors = @actorsta.id
    hpp = @actorsta.hp
    mpp = @actorsta.mp
    mhpp = @actorsta.mhp
    mmpp = @actorsta.mmp
    gold   = $game_party.gold
    mname = $game_map.display_name
    expp = @actorsta.exp
    value = $game_variables[MARU_MAP_WINDOW::VALUE]
    mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
    if MARU_MAP_WINDOW::WINDOW
     skin = $game_variables[MARU_MAP_WINDOW::W_NAME_V]
     x = $game_variables[MARU_MAP_WINDOW::W_X]
     y = $game_variables[MARU_MAP_WINDOW::W_Y]
     width = $game_variables[MARU_MAP_WINDOW::W_WSIZE]
     height = $game_variables[MARU_MAP_WINDOW::W_HSIZE]
     if actors != @lastactor or gold != @last_g or mname != @last_name or
       value != @last_value or mvalue != @last_mvalue or hpp != @last_hp or
       mpp != @last_mp or mhpp != @last_mhp or mmpp != @last_mmp or
       expp != @last_exp or skin != @last_skin or x != @last_x or
       y != @last_y or width != @last_width or height != @last_height
      refresh
     end
    else
     if actors != @lastactor or gold != @last_g or mname != @last_name or
       value != @last_value or mvalue != @last_mvalue or hpp != @last_hp or
       mpp != @last_mp or mhpp != @last_mhp or mmpp != @last_mmp or
       expp != @last_exp
      refresh
     end
    end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    if MARU_MAP_WINDOW::WINDOW
      self.opacity = 0
      bitmap = Cache.system(MARU_MAP_WINDOW::W_NAME[$game_variables[MARU_MAP_WINDOW::W_NAME_V]])
      rect = Rect.new(0,0,$game_variables[MARU_MAP_WINDOW::W_WSIZE],$game_variables[MARU_MAP_WINDOW::W_HSIZE])
      contents.blt($game_variables[MARU_MAP_WINDOW::W_X],$game_variables[MARU_MAP_WINDOW::W_Y], bitmap, rect,MARU_MAP_WINDOW::OPACITY)
      bitmap.dispose
    end
    #名前・ステータス描写
    draw_actor_name(@actorsta,win_adjust3,win_adjust3,96)
    draw_actor_level(@actorsta,win_adjust3,24+win_adjust3)
    draw_actor_hp(@actorsta, 96+win_adjust3, win_adjust3)
    draw_actor_mp(@actorsta, 96+win_adjust3, 24+win_adjust3)
    #マップ情報描写
    change_color(system_color)
    draw_text(230+win_adjust3,win_adjust3,165,line_height, "現在地")
    change_color(normal_color)
    draw_text(230+win_adjust3,24+win_adjust3,165,line_height, $game_map.display_name)
    #経験値描写
    draw_actor_next_exp(@actorsta, 395+win_adjust3, win_adjust3,120)
    s_next = sprintf("Next")
    change_color(system_color)
    draw_text(395+win_adjust3, win_adjust3, 140, line_height, s_next)
    change_color(normal_color)
    #所持金描写
    draw_currency_value($game_party.gold, Vocab::currency_unit, 395+win_adjust3, 24+win_adjust3, 120)
    #おまけ描写
    o_text = MARU_MAP_WINDOW::NAME
    value = $game_variables[MARU_MAP_WINDOW::VALUE]
    mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
    draw_actor_hara_gauge(win_adjust3, 48+win_adjust3,220)
    change_color(system_color)
    draw_text(win_adjust3, 48+win_adjust3, 140, line_height, o_text)
    change_color(normal_color)
    draw_text(win_adjust3, 48+win_adjust3, 220, line_height, value.to_s + "/" + mvalue.to_s, 2)
   
    #描画時点での各値の取得
    @lastactor = @actorsta.id
    @last_hp = @actorsta.hp
    @last_mhp = @actorsta.mhp
    @last_mp = @actorsta.mp
    @last_mmp = @actorsta.mmp
    @last_g = $game_party.gold
    @last_name = $game_map.display_name
    @last_exp = @actorsta.exp
    @last_value = $game_variables[MARU_MAP_WINDOW::VALUE]
    @last_mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
    if MARU_MAP_WINDOW::WINDOW
     @last_skin = $game_variables[MARU_MAP_WINDOW::W_NAME_V]
     @last_x = $game_variables[MARU_MAP_WINDOW::W_X]
     @last_y = $game_variables[MARU_MAP_WINDOW::W_Y]
     @last_width = $game_variables[MARU_MAP_WINDOW::W_WSIZE]
     @last_height = $game_variables[MARU_MAP_WINDOW::W_HSIZE]
    end
  end
  #--------------------------------------------------------------------------
  # ● 満腹度 の割合を取得
  #--------------------------------------------------------------------------
  def hara_rate
    $game_variables[MARU_MAP_WINDOW::MVALUE] > 0 ? $game_variables[MARU_MAP_WINDOW::VALUE].to_f / $game_variables[MARU_MAP_WINDOW::MVALUE] : 0
  end
  #--------------------------------------------------------------------------
  # ○ 満腹度 ゲージの描画
  #     actor : アクター
  #     x, y  : 描画先 X, Y 座標
  #     width : 幅
  #--------------------------------------------------------------------------
  def draw_actor_hara_gauge(x, y, width = 120)
    draw_gauge(KMS_GenericGauge::TP_IMAGE,
      x, y, width, hara_rate,
      KMS_GenericGauge::TP_OFFSET,
      KMS_GenericGauge::TP_LENGTH,
      KMS_GenericGauge::TP_SLOPE
    )
  end
  #--------------------------------------------------------------------------
  # ● ウインドウ位置調整その1
  #--------------------------------------------------------------------------
  def win_adjust1
    MARU_MAP_WINDOW::WINDOW ? -12 : 0
  end
  #--------------------------------------------------------------------------
  # ● ウインドウ位置調整その2
  #--------------------------------------------------------------------------
  def win_adjust2
    MARU_MAP_WINDOW::WINDOW ? 24 : 0
  end
  #--------------------------------------------------------------------------
  # ● ウインドウ位置調整その3
  #--------------------------------------------------------------------------
  def win_adjust3
    MARU_MAP_WINDOW::WINDOW ? 12 : 0
  end
end
  
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
# スのインスタンスは $game_party で参照されます。
#==============================================================================

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias hara_initialize initialize
  def initialize
    hara_initialize
    @haraheri = MARU_MAP_WINDOW::STEP
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーが 1 歩動いたときの処理
  #--------------------------------------------------------------------------
  alias hara_on_player_walk on_player_walk
  def on_player_walk
    hara_on_player_walk
    manpuku
  end
  #--------------------------------------------------------------------------
  # ● 満腹度の処理
  #--------------------------------------------------------------------------
  def manpuku
    if $game_player.normal_walk?
      update_haraheri_steps if $game_switches[MARU_MAP_WINDOW::MANPUKU]
      update_haraheri_damege if $game_switches[MARU_MAP_WINDOW::MANPUKU]
    end
  end
  #--------------------------------------------------------------------------
  # ● 満腹度の歩数カウントを更新
  #--------------------------------------------------------------------------
  def update_haraheri_steps
    @haraheri -= 1 if @haraheri > 0
    if @haraheri == 0
      $game_variables[MARU_MAP_WINDOW::VALUE] -= 1 if $game_variables[MARU_MAP_WINDOW::VALUE] > 0
      @haraheri = MARU_MAP_WINDOW::STEP
    end
  end
  #--------------------------------------------------------------------------
  # ● 満腹度が0の時のダメージ更新
  #--------------------------------------------------------------------------
  def update_haraheri_damege
    if $game_variables[MARU_MAP_WINDOW::VALUE] == 0
    all_members.size.times{|i| $game_party.members.hp -= MARU_MAP_WINDOW::DAMEGE}
    end
  end
end[/pre]

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
27 小时
注册时间
2012-3-28
回帖
11
 楼主| 发表于 2014-12-17 13:10:01 | 显示全部楼层
本帖最后由 前田敦子推 于 2014-12-17 13:12 编辑
三途亚梦 发表于 2014-12-16 21:06
不用脚本不用事件你想怎么做……通过冥想吗…

先形式的说一下,没有RM做不到的2D游戏效果,伪3D ...


可能是我没说清楚……我就是不想用脚本,然后每次需要她口渴的时候一直不停用事件而已。如果

用系统默认的HP ,MP之类达到饥饿和疲劳效果的具体要怎么操作呢?因为我只需要主角一个人这样的状态就好了,所以简单一点的就好。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
27 小时
注册时间
2012-3-28
回帖
11
 楼主| 发表于 2014-12-17 13:15:12 | 显示全部楼层
tseyik 发表于 2014-12-16 22:05
関数1on状態表示
関数2on満腹度有效
変数2表示角色(1=角色1)

大人,我看不大明白……
回复

使用道具 举报

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2014-12-17 13:51:46 | 显示全部楼层
前田敦子推 发表于 2014-12-17 13:10
可能是我没说清楚……我就是不想用脚本,然后每次需要她口渴的时候一直不停用事件而已。如果

用系统默认 ...

想要用事件做的话因为需要事件进行并行处理,会对游戏的运行造成负担。
如果你坚持想使用事件我在这先简单的告诉你思路。

设置一个并行处理的公共事件。
通过 等待 XX帧 为它设置处理间隔,
事件内容写扣除角色1是hp、mp、tp之类的数值,并在扣除之后对这些数值进行检测,

也就是将这些数值赋值给变量再进行“分歧条件”。
如果分歧条件满足就给角色附加“口渴”“饥饿”“疲劳”之类的状态。

思路就是这样的,实现起来很简单。

另外回复的时候请善用楼层左下角的“点评”。

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
27 小时
注册时间
2012-3-28
回帖
11
 楼主| 发表于 2014-12-17 17:54:48 | 显示全部楼层
三途亚梦 发表于 2014-12-17 13:51
想要用事件做的话因为需要事件进行并行处理,会对游戏的运行造成负担。
如果你坚持想使用事件我在这先简 ...

谢谢,我发现了一个简单的方法,把HP和MP的名字改成饥饿值和疲劳值,然后在角色特性那里添加能力比如体力值再生和魔力值再生,再把数值设定成负数的话也能达到我要的效果。
PS:我本来想用点评的来着,可是字数容量不够……

点评

点评是提醒你以后能使用就使用不用太纠结。  发表于 2014-12-17 19:31
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部