Project1

标题: 如何用变量生成文件 [打印本页]

作者: 懒人    时间: 2008-5-23 02:28
标题: 如何用变量生成文件
就是比如当1号变量为5时,自动在外部生成一个txt文件(包含文件的内容)
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 3535    时间: 2008-5-23 02:54
if $game_variables[1] == 5
  f = File.open("x.txt", "a")
  f.write("文件的内容")
  f.close
end [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~ [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~ [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 懒人    时间: 2008-5-23 06:48

作者: 八云紫    时间: 2008-5-23 07:10
弱弱的问一下,怎么读取一个文件里的 变量A 呢?
作者: 禾西    时间: 2008-5-23 07:22
好像可以用 Marshal.load( ) 函數 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: tempac    时间: 2008-5-23 07:24
以下引用懒人于2008-5-22 22:48:59的发言:


沒有$game_variables?你用了什么腳本!?{/fd}
作者: 禾西    时间: 2008-5-23 07:27
很明顯把該段語句放在 Object 裏面...系統還沒有生成 $game_variables
作者: 懒人    时间: 2008-5-23 23:56
我只是把3535的脚本放到默认脚本main前面,好像不行
还有其它方法吗?
作者: Infrared    时间: 2008-5-24 01:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: 懒人    时间: 2008-5-24 04:39
以下引用Infrared于2008-5-23 17:09:51的发言:

game_variables腳本你刪了?


用的是新建工程的默认脚本
有game_variables
作者: 禾西    时间: 2008-5-24 05:41
讀取腳本先於開始遊戲及生成必要實例...你們都無留意到是第一行出錯咩?
作者: 精灵使者    时间: 2008-5-24 05:59
我想问问,可以不可以把某些变量或者开关自动输出,然后在下次开始的时候读入呢。
例如获得的物品等等可以作为图鉴什么的,可以下次进入游戏的时候欣赏……
作者: 禾西    时间: 2008-5-24 06:02
以下引用禾西于2008-5-22 23:22:13的发言:
好像可以用 Marshal.load( ) 函數

再一次純引。記錄腳本就是這樣操作的。把變量記下,下次讀取
作者: 禾西    时间: 2008-5-24 06:14
給個例子你們好了:
#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
#  处理存档画面的类。
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # ● 写入存档数据
  #     file : 写入用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  def write_save_data(file)
    # 生成描绘存档文件用的角色图形
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      characters.push([actor.character_name, actor.character_hue])
    end
    # 写入描绘存档文件用的角色数据
    Marshal.dump(characters, file)
    # 写入测量游戏时间用画面计数
    Marshal.dump(Graphics.frame_count, file)
    # 增加 1 次存档次数
    $game_system.save_count += 1
    # 保存魔法编号
    # (将编辑器保存的值以随机值替换)
    $game_system.magic_number = $data_system.magic_number
    # 写入各种游戏对像
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
# ----------------------------------

    Marshal.dump($data_weapons, file)
    Marshal.dump($data_armors, file)
    Marshal.dump($data_classes, file)

# ----------------------------------
  end
end
#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
#  处理读档画面的类。
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # ● 读取存档数据
  #     file : 读取用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    # 读取描绘存档文件用的角色数据
    characters = Marshal.load(file)
    # 读取测量游戏时间用画面计数
    Graphics.frame_count = Marshal.load(file)
    # 读取各种游戏对像
    $game_system        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables     = Marshal.load(file)
    $game_self_switches = Marshal.load(file)
    $game_screen        = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party         = Marshal.load(file)
    $game_troop         = Marshal.load(file)
    $game_map           = Marshal.load(file)
    $game_player        = Marshal.load(file)
# ----------------------------------

    $data_weapons       = Marshal.load(file)
    $data_armors        = Marshal.load(file)
    $data_classes       = Marshal.load(file)

# ----------------------------------
    # 魔法编号与保存时有差异的情况下
    # (加入编辑器的编辑过的数据)
    if $game_system.magic_number != $data_system.magic_number
      # 重新装载地图
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
    # 刷新同伴成员
    $game_party.refresh
  end
end

這個是是武器改造系統的存檔腳本,裏面增加了三個存儲變量,分別是$data_weapons,$data_armors,$data_classes。目的就是記錄新生成的裝備數據。同樣大家可以自己添加需要記錄的變量。但是爲了防止大量使用而引起衝突。變量最後還是寫在一些默認就會記錄的「實例類」裏面。
比如下面:
class Game_Party

  attr_reader   :pets_got                   # 是否擁有寵物
  attr_reader   :pets_met                   # 是否見過寵物

  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  alias old_method_initialize initialize
  def initialize
    old_method_initialize

    @pets_got = []
    @pets_met = []

  end
  #--------------------------------------------------------------------------
  # ● 加入寵物
  #     actor_id : 寵物 ID
  #--------------------------------------------------------------------------
  def got_pet(actor_id)
    @pets_got =@pets_got|[actor_id]
  end
  #--------------------------------------------------------------------------
  # ● 見過寵物
  #     actor_id : 寵物 ID
  #--------------------------------------------------------------------------
  def met_pet(actor_id)
    @pets_met =@pets_met|[actor_id]
  end
  #--------------------------------------------------------------------------
  # ● 加入同伴
  #     actor_id : 角色 ID
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
    # 获取角色
    actor = $game_actors[actor_id]
    # 同伴人数未满 5 人、本角色不在队伍中的情况下
    if @actors.size < 5 and not @actors.include?(actor)

#-------------------------#
      # 得到寵物          #
      got_pet(actor_id)   #
#-------------------------#

      # 添加角色
      if actor.id == $game_actors[387].id
        @actors.insert(0,actor)
      else
        @actors.push(actor)
      end
      # 还原主角
      $game_player.refresh
    end
  end
end

此腳本是天空之城的精靈圖鑒腳本,裏面伴隨class Game_Party(因爲系統默認需要記錄)生成了兩個儲存變量作爲圖鑒資料使用。在記錄的時候,會伴隨 $game_party 一齊記錄入存檔

|||連帖...我有罪... [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: Infrared    时间: 2008-5-24 06:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: 禾西    时间: 2008-5-24 06:18
你試試在main以前新建腳本,在空白處打上

if $game_variables != nil
p "拍飛禾西"
else
p "3535腦殘了"
end

看發生甚麽事(笑) [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: link006007    时间: 2008-5-24 06:27
数据库在Scene_Title的main
其余全局在 command_new_game或Scene_Load 中
而在main前直接插入非函数或类, 会被当成全局流程来运行
而此时上面两个都未执行 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: Infrared    时间: 2008-5-24 06:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: Stifling    时间: 2008-5-25 03:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: 懒人    时间: 2008-5-25 04:29
以下引用Stifling于2008-5-24 19:24:22的发言:

问一下,lz这个要来做什么功能,一定要在一开始运行Game.exe时生成?


做解迷类游戏,最好是要在一开始运行Game.exe时生成
先给你10分作为鼓励!
3天内未有更好答案认可3535




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1