RUBY语言怎么判断指定目录是否存在

RUBY语言怎么判断指定目录是否存在,第1张

ruby中判断目录是否存在:

File.directory?(argu)

ruby文件 *** 作:使用File类的静态方法,或者File类的实例对象

File类的静态方法

File::atime(filename)

返回指定文件的最后访问时间

1.创建文件夹

Dir.new %%1

Dir::mkdir #不指定目录全名称时,缺省为工作目录

Dir::chdir() 改变当前脚本工作目录

FileUtils.mkdir 'test'

file = File.new("cmd.txt")

file.each do |line|

puts line if line =~ /target/

end

2.创建文件

改变当前根目录

Dir.chdir("/home/guy/sandbox/tmp") 

 

Dir.chroot("/home/guy/sandbox")

Dir.new %%1

#Dir::rmdir #不指定目录全名称时,缺省为工作目录

3.删除文件

改变当前根目录

Dir.chdir("/home/guy/sandbox/tmp") 

Dir.chroot("/home/guy/sandbox")

Dir.new %%1

#Dir::rmdir #不指定目录全名称时,缺省为工作目录

4.删除文件夹

#require 'fileutils' 

FileUtils.rm_r(%%1)

5.删除一个文件下夹所有的文件夹

Dir::chdir

Dir::pwd属性或者Dir.getwd()

#改变当前脚本工作目录

6.清空文件夹

Dir::chdir %%1 改变当前脚本工作目录

Dir::rmdir #不指定目录全名称时,缺省为工作目录

Dir.new %%1

#require 'ftools'

FileUtils.mkdir 'test'

file = File.new(%%1) #"cmd.txt"

file.each do |line|

puts line if line =~ /target/

end

7.读取文件

#require 'ftools'

File.open(%%1).readlines #'文件名'

#require 'ftools'

arr = IO.readlines(%%1) #"myfile"

lines = arr.size

#puts "myfile has #{lines} lines in it."

#longest = arr.collect {|x| x.length}.max

#puts "The longest line in it has #{longest} characters."

8.写入文件

f=open(%%1,"w")

f.puts(%%2)

9.写入随机文件

#require 'ftools'

file = File.open(%%1,"w") 

file.seek(5) 

str = file.gets # "fghi"

#require 'ftools'

File.open('文件名')

File.open("cmd.txt","r") do |file|

while line=file.gets

puts line

end

end

puts

file=File.new("cmd.txt","r")

file.each_line do |line|

puts line

end

IO.foreach("cmd.txt") do |line|

puts line if line =~ /target/

puts line if line !~ /target/

end

###

Dir#pos

返回当前子文件指针

Dir#pos=

设置子文件指针

Dir#rewind

设置子文件指针到起始位置

Dir#seek

设置子文件指针

Dir#tell

获取当前指针

10.读取文件属性

#文件中是否有内容,(返回false为有内容,返回true为空)

File.new('文件名').stat.zero?

#文件大小

File.size?('文件名')

flag1 = FileTest::zero?("file1")

flag2 = FileTest::size?("file2")

size1 = File.size("file1")

size2 = File.stat("file2").size

###

File::atime(filename)

返回指定文件的最后访问时间

11.写入属性

12.枚举一个文件夹中的所有文件夹

#require 'ftools'

puts Dir.glob('**/*').each { | file | file.downcase }

#要区分目录和普通文件我们这样使用

file1 = File.new("/tmp")

file2 = File.new("/tmp/myfile")

test1 = file1.directory? # true

test2 = file1.file? # false

test3 = file2.directory? # false

test4 = file2.file? # true

###

遍历目录

Dir.foreach(%%1) { |entry| puts entry}

13.复制文件夹

require "fileutils"

FileUtils.cp %%1,%%2

14.复制一个目录下所有的文件夹到另一个文件夹下

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x])

end

15.移动文件夹

#require 'FileUtils'

FileUtils.mv %%1,%%2

16.移动一个目录下所有的文件夹到另一个目录下

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x])

end

17.以一个文件夹的框架在另一个目录创建文件夹和空文件

#########################

//文件是否存在

File.exist?('文件名')

flag = FileTest::exist?("LochNessMonster")

flag = FileTest::exists?("UFO")

#########################

require 'rubygems'

require 'ruby-debug'

require "find"

module Cz_dirtools

def mkdirs_to(tar,src=Dir.getwd)

#debugger

if tar.class==NilClass then

puts "PLZ input target directory name..."

return

elsif !FileTest.directory?(tar)#如果tar不是一个目录

puts ("Creating #{File.expand_path(tar)}")

Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录

end

src=if FileTest.directory?(src) then

src#如果src是一个目录名,则返回自身

else

File.dirname(src)#如果src为一个文件名,则返回该文件所在目录

end

#Dir.foreach可以复制目标路径第一层目录结构而不复制子目录

#~ Dir.foreach(src) do |dir|

#~ if FileTest.directory?(dir) &&dir!=tar &&dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"."

#~ #puts dir

#~ begin

#~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}")

#~ rescue#如果该目录已存在则直接跳过否则创建该目录

#~ end

#~ end

#~ end

#Find.find可以复制目标路径的完整目录结构,包括子目录

dirs=Array.new

Find.find(src) do |dir|

unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"."

dirs<<dir

end

end

#puts dirs

dirs.each do |dir|

begin

Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}")

rescue#如果该目录已存在则直接跳过否则创建该目录

end

end

end

end

require 'rubygems'

require 'ruby-debug'

require "find"

module Cz_dirtools

def mkdirs_to(tar,src=Dir.getwd)

#debugger

if tar.class==NilClass then

puts "PLZ input target directory name..."

return

elsif !FileTest.directory?(tar)#如果tar不是一个目录

puts ("Creating #{File.expand_path(tar)}")

Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录

end

src=if FileTest.directory?(src) then

src#如果src是一个目录名,则返回自身

else

File.dirname(src)#如果src为一个文件名,则返回该文件所在目录

end

#Dir.foreach可以复制目标路径第一层目录结构而不复制子目录

#~ Dir.foreach(src) do |dir|

#~ if FileTest.directory?(dir) &&dir!=tar &&dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"."

#~ #puts dir

#~ begin

#~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}")

#~ rescue#如果该目录已存在则直接跳过否则创建该目录

#~ end

#~ end

#~ end

#Find.find可以复制目标路径的完整目录结构,包括子目录

dirs=Array.new

Find.find(src) do |dir|

unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"."

dirs<<dir

end

end

#puts dirs

dirs.each do |dir|

begin

Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}")

rescue#如果该目录已存在则直接跳过否则创建该目录

end

end

end

end

18.复制文件

#require 'FileUtils'

FileUtils.cp %%1, %%2

19.复制一个目录下所有的文件到另一个目录

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x])

end

20.提取扩展名

21.提取文件名

%%2 = File.basename(%%1)

22.提取文件路径

%%2 = File.dirname(%%1)

23.替换扩展名

24.追加路径

25.移动文件

26.移动一个文件夹下所有文件到另一个目录

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x])

end

27.指定目录下搜索文件

#require "find" 

 

def findfiles(dir, name) 

 list = [] 

 Find.find(dir) do |path| 

Find.prune if [".",".."].include? path 

case name 

 when String 

list << path if File.basename(path) == name 

 when Regexp 

list << path if File.basename(path) =~ name 

else 

 raise ArgumentError 

end 

 end 

 list 

end 

 

findfiles %%1,%%2 #"/home/hal", "toc.txt"

28.打开对话框

29.文件分割

逐字节对文件进行遍历

可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法:

file = File.new("myfile") 

e_count = 0 

file.each_byte do |byte| 

 e_count += 1 if byte == ?e 

end

30.文件合并

逐字节对文件进行遍历

可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法:

file = File.new("myfile") 

e_count = 0 

file.each_byte do |byte| 

 e_count += 1 if byte == ?e 

end

31.文件简单加密

32.文件简单解密

33.读取ini文件属性

34.合并一个文件下所有的文件

35.写入ini文件属性

36.获得当前路径

File.dirname($0)

37.读取XML数据库

38.写入XML数据库

39.ZIP压缩文件

#require 'rubygems'

#require 'zip/zipfilesystem'

Zip::ZipFile.open(%%1, Zip::ZipFile::CREATE) do |zip| #'zipfile.zip'

zip.file.open('file1', 'w') { |f| f <<'This is file 1.' }

zip.dir.mkdir('sub_dir')

zip.file.open('sub_dir/file2', 'w') { |f| f <<'This is file 2.' }

end

40.ZIP解压缩

41.获得应用程序完整路径

42.ZIP压缩文件夹

#require 'rubygems'

#require 'zip/zipfilesystem'

def compress

Zip::ZipFile.open 'zipfile.zip', Zip::ZipFile::CREATE do |zip|

add_file_to_zip('dir', zip)

end

end

def add_file_to_zip(file_path, zip)

if File.directory?(file_path)

Dir.foreach(file_path) do |sub_file_name|

add_file_to_zip("#{file_path}/#{sub_file_name}", zip) unless sub_file_name == '.' or sub_file_name == '..'

end

else

zip.add(file_path, file_path)

end

end

add_file_to_zip %%1,%%2

43.递归删除目录下的文件

#require 'ftools'

file_path = String.new

file_path="D:"

if File.directory? file_path

Dir.foreach(file_path) do |file|

if file!="." and file!=".."

puts "File:"+file

end

end

end

44.验证DTD

45.Schema 验证

46.Grep

#!/usr/bin/env ruby

# Grep with full regexp-functionality via ruby

if ARGV.shift == "-p"

pattern = Regexp.new(ARGV.shift)

else

puts "Please give me a pattern with the '-p' option"

exit

end

ARGV.each do |filename|

File.open(filename) do |file|

file.each do |line|

puts "#{filename} #{file.lineno.to_s}: #{line}" if

pattern.match(line)

end

end

end

Using it via: rgrep -p '/delete /i' *.php does not match anything, but

this

#!/usr/bin/env ruby

# Grep with full regexp-functionality via ruby

if ARGV.shift == "-p"

pattern = Regexp.new(ARGV.shift)

else

puts "Please give me a pattern with the '-p' option"

exit

end

ARGV.each do |filename|

File.open(filename) do |file|

file.each do |line|

puts "#{filename} #{file.lineno.to_s}: #{line}" if /delete

/i.match(line)

end

end

end

47.直接创建多级目录

#require "fileutils"

FileUtils.makedirs(%%1)

48.批量重命名

49.文本查找替换 ReplaceText

50.文件关联

51. *** 作Excel文件

52.设置JDK环境变量

53.选择文件夹对话框

54.删除空文件夹

55.发送数据到剪贴板

56.从剪贴板中取数据

57.获取文件路径的父路径

58.创建快捷方式 CreateShortCut

59.d出快捷菜单

60.文件夹复制到整合 *** 作

61.文件夹移动到整合 *** 作

62.目录下所有文件夹复制到整合 *** 作

63.目录下所有文件夹移动到整合 *** 作

64.目录下所有文件复制到整合 *** 作

65.目录下所有文件移动到整合 *** 作

66.对目标压缩文件解压缩到指定文件夹

67.创建目录副本整合 *** 作

68.打开网页

69.删除空文件夹整合 *** 作

70.获取磁盘所有分区后再把光驱盘符去除(用"\0"代替),把结果放在数组allfenqu[] 中,数组中每个元素代表一个分区盘符,不包括 :\\ 这样的路径,allfenqu[]数组开始时存放的是所有盘符。

当我用这样的代码测试结果是正确的,光驱盘符会被去掉:

CString root//root代表盘符路径

for(i=0i<20i++) //0-20代表最大的盘符数

{

root.Format("%c:\\",allfenqu[i])

if(GetDriveType(root)==5)

allfenqu[i]='\0'

}

但我用这样的代码时结果却无法去掉光驱盘符,allfenqu[]中还是会包含光驱盘符:

CString root

for(i=0i<20i++)

{

root=allfenqu[i]+":\\"

if(GetDriveType(root)==5)

allfenqu[i]='\0'

}

我靠,你这个问题太难回答了,给你描述一遍还不如自己做一个呢。

给你贴一个百度贴吧的教程吧,有功夫问问题不如自己研究研究。

rpg maker xp制作教程

" 地图 ''

原野、迷宫、城市街道和建筑物内部等主角移动的舞台称为地图。

游戏是由很多地图构成的,名个地图间可以随着事件的处理来回移动。例如主角在接触建筑物的入口后,画面就会消失,而转移到建筑物内部的另一个地图里。因此通过这样的衔接方式便能将整个地图联系在一起。

地图元件和图块

地图看起来就像一整张图画,然而实际上和拼图玩具的小块一样是由许多小部件组合而成的。构成地图的最小部件称为地图元件。地图元件可以设定各种不同的属性,比如人物能否通行等。

表现特定的场所就需要一组整理在一起的许多地图元件,并设定各种不同的属性,这就称为图块。各个地图可以选择使用不同的图块,然后用该图块中的地图元件组合配置成一张地图。在图块中,还可以设定战斗时显示的背景(战斗背景)图形,遭遇敌人时会自动使用该背景。

地图的制作

新地图的制作和多个地图的管理,是在主窗口左下方的地图树状目录里进行。

首先,在地图树状目录里选择一个地图名称,按下鼠标右键,出现选单后选择「新建地图」,便会开启制作地图窗口,设定好地图名称、图块、地图大小、遇敌率等必要信息后按下「确定」,就完成了新地图的制作。各项的具体意义请参照帮助提示。

地图设定完毕,最初选择的地图下方就会建立一个新的子地图,而上方的地图就叫母地图。这和 Windows 文件夹的目录结构相同。这个结构并不直接影响游戏的运行,比如城市的建筑物内部地图作成该城市整体地图的子地图,这样对多个地图的管理就会更加容易。地图可以通过鼠标直接拖曳 &移动选项中的上下移动来改变目录结构。

地图是由 3 层各种各样不同的地图元件配置而成的。可以向各层任意配置各种地图元件,一般来说第 1 层是地面,第 2 层是栅栏和建筑物,第 3 层是窗户和烟囱,按照这个标准,地图就能顺利制作完成。

地图编辑时层的选择,是在主菜单「模式」中设定的。而且,在「视图」菜单中还可以更改「暗淡显示其它层」,和显示「当前及下一层」还是「全部层」等设定。

地图元件的配置

编辑地图时打算在地图上配置的地图元件,必须从主窗口左边的地图元件面板中选择。在地图元件面板中选择一个地图元件,也可以同时选择多个地图元件。选择了地图元件,就可以用绘图工具在右侧的绘图区域自由配置了。

配置地图元件的绘图工具,可以在主菜单「绘图」中选择。各个绘图工具的功能如下。

铅笔

是最常用的绘图工具。在绘图区域上进行点选和拖曳可将目前选取的地图元件配置到地图上。

四边形

籍由拖曳对角线形成一个四边形,将目前选取的地图元件填满该四边形区域。

椭圆

籍由拖曳对角线形成一个四边形缩起的圆形,将目前选取的地图元件填满该区域。

填充

在点选处的上下左右连续相同的地图元件全部置换为目前选取的地图元件。

选择

为地图的剪切和复制等选取一个编辑范围。这种情况下点击鼠标右键会显示一个d出菜单,就可以进行该范围的剪切和复制等 *** 作。另外,选取范围的复制等 *** 作包括全部三层的所有对像。

绘图工具为「选择」以外的其它工具时,在绘图区域某处点击鼠标右键,地图元件面板中白线框选的地图元件就会自动切换为该处所配置的地图元件。这个功能称为吸管。使用吸管功能会省略从地图元件面板中选择地图元件的步骤,将大大提升作业效率。

自动地图元件

地图元件面板中最上面的一排地图元件叫做自动地图元件,是种特殊的地图元件。自动地图元件是一类有很多式样的地图元件,实际排列中会依照边界自动调节。

一边按「Shift」键一边配置自动地图元件和使用吸管时,这个功能会暂时失效。

而且,在地图元件面板上双击自动地图元件,就会出现「自动展开元件」对话框,可以直接选择边界调整的式

作者:mwtt2007-8-8 17:33 回复此发言

--------------------------------------------------------------------------------

2 回复:rpg maker xp制作教程

事件

向村民打听情报,有条件才能打开的宝箱等游戏中发生的一切事情称为事件。

游戏如何进行全部都由事件来管理,比如「主角从城市出口移动到草原地图」的处理就是使用的事件,作为一个游戏,建立事件是必需的。

事件的种类

事件共分为「地图事件」、「战斗事件」、「公共事件」三种。一般所说的独立事件,基本上指的是地图事件。

地图事件

就是在地图画面上运行的事件。包括场所的移动,人物的对话等。在主菜单「模式」菜单中选择「事件」,于地图编辑区域上双击(点右键选择「新建事件」亦可)就可新建一个地图事件。建立大量的地图事件会加大 CPU 的负荷,通常一个地图内事件数少于 100 会比较好。

战斗事件

就是在战斗画面中运行的事件。比如「敌人在 HP 值达到规定值以下时变身」的处理就是使用的战斗事件。在数据库「队伍」页中设定。

公共事件

可以从地图事件和战斗事件中调用,为特殊情况的处理,是通用的事件。在数据库「公共事件」页中设定。

事件页

在地图事件中,一个事件能设立多个不同内容的处理。这种设定的单位称为事件页。

各事件页内容的出现条件分为开关、变量、独立开关三种类型(开关总共是二个)。满足指定条件的事件页有多个的话,会执行号码最大的事件页的内容。

开关

整个游戏中,开关总会保持 ON/OFF 的数据。例如管理「接受了消灭怪物的委托」或「打倒了BOSS」的信息。

变量

整个游戏中,变量都会保持任意整数(最大 8 位)的数据。例如管理「主角的声望」或「收集世界中分散的物品,移交给委托者的件数」的信息。

独立开关

是引发个体事件的特殊开关。不会给其它事件造成影响,仅为该事件使用。例如管理「打开了宝箱」的信息。

战斗事件也有事件页,但是具体方法和地图事件不同。具体请参照战斗事件的设定。

公共事件没有事件页。如果自动执行事件的话,可以指定一个条件开关。

事件开始条件

已定义事件页的「执行内容」,实际开始执行的条件称为事件开始条件。

决定键

在主角与事件接触的状态下,按下决定键(C 按钮)时事件开始执行。当主角与事件之间即使有柜台属性的地图元件也可以。向村民问话或调查宝箱等基本事件会使用这种方式。

与主角接触

增加了「决定键」的条件,当主角以方向按钮向事件接触时也能开始执行事件。如果主角与事件能重叠的话,那么重叠时开始执行事件。场所移动事件会使用这种方式。

与事件接触

增加了「与主角接触」的条件,当事件移动到与主角接触时也能开始执行事件。比如怪物在地图上来回移动,接触到主角时触发战斗的事件会使用这种方式。

自动执行

事件立即自动执行。事件页的出现条件满足的情况下事件会反复执行,需要适当转换开关和独立开关,必须控制事件的出现条件。比如移动到特定地图发生强制事件时会使用这种方式。

并行处理

在事件出现期间,周期性的执行事件内容。并行处理的事件与通常的性质有所不同,在其他事件执行的同时并行执行该事件,使用时必须要格外注意。比如监视计时器的事件,一定时间制造雷电闪光画面的事件会使用这种方式。即使完全没有使用这种事件开始条件也不会影响游戏的制作,所以没有必要勉强记住使用方法。

公共事件的情况和地图事件不同,其没有实体的存在,开始条件只有由其它事件调用执行的「无」、「自动执行」和「并行处理」三种。但是无论是哪种开始条件,由并行处理事件调用执行和并行处理功能一样,要格外注意。并行处理中执行通常事件时,不要直接调用执行公共事件,最好经由开关控制的自动执行事件调用执行。

并行处理事件会加大 CPU 的负荷。特别是执行开关和变量的 *** 作时,条件的变化会加强对事件出现还是消失的判定,地图存在事件页的量和处理时间成正比。这样,不推荐经常执行大量的并行处理事件。

战斗事件的设定

发生战斗中的事件称为战斗事件。

战斗事件和地图事件一样有事件页。经常按号码顺序检查事件页,有满足条件的事件页就立即执行。

战斗事件的出现条件为回合数、敌人的 HP、角色的 HP 和开关这四种,可指定多个。各个设定的具体内容请参照帮助提示。

执行内容

在游戏中产生某个变化的命令称为事件指令。

实际中事件的执行内容是由登录于事件执行列表中的事件指令来定义的,执行时从上到下依次执行。事件指令有「显示文章」、「场所移动」、「战斗处理」等各种不同的指令,变化丰富多种多样共计有 90 种之多。

执行内容的编辑方法种类事件都是共同的。插入事件指令,以下列顺序进行。

双击列表中有「◆」符号的项目。

会开启「事件指令」对话框。在这里选择欲使用的事件指令,按下标有该事件指令名称的按钮。如果不明白指令的意思可以调用帮助提示,就能看到各种指令的简单说明。

除一部分指令外,将会开启事件指令设定对话框。完成必要的设定后按下「确定」。

在该双击项目的位置就会插入一个事件指令。

在事件指令列表中,选择一个事件指令点击右键会出现d出菜单,应用此菜单能进行复制粘贴等 *** 作。按下「Shift」键不放的话,就可以同时选择多个事件指令一起进行 *** 作。

文章的显示

在游戏画面上显示信息就要用到事件指令「显示文章」。这是个常用的指令,在全部事件指令中使用得最多。

在文章中可以使用以下的控制码。

\V[n]

显示第 n 号变量中的值(n 为数字)。

\N[n]

显示第 n 号角色的名称(n 为数字)。

\C[n]

之后的文字用第 n 号的颜色显示。 0 1 2 3 4 5 6 7

\G

开启所持金钱窗口。

\\

显示文字“\”。

输入文章时按「F2」键,就可预览实际游戏中显示的信息窗口。

作者:mwtt2007-8-8 17:33 回复此发言

--------------------------------------------------------------------------------

3 回复:rpg maker xp制作教程

数据库

游戏中使用的各种数据集合在一起称为数据库。

数据库的内容

编辑数据库的内容,在主菜单「工具」菜单中选择「数据库」。在对话框的分页中进行切换,就可以编辑下列各种不同种类的数据。

角色 在游戏中被玩家 *** 作的人物角色的数据。

职业 装备的武器、防具和能够学习的特技等,决定角色特征的数据。

特技 主要是消耗 SP 发动特别的效果,是技能和魔法等的数据。

物品 回复剂和事件物品等,除装备以外的物品的数据。

武器 具有攻击力等属性的武器的数据。作为物品的一种来使用。

防具 具有物理防御和魔法防御等属性的防具的数据。作为物品的一种来使用。

敌人 触发战斗和事件战斗的与主角敌对的敌人角色的数据。

队伍 敌人的组合。是游戏中实际出现的形态。

状态 对角色的能力和行动造成各种各样的影响,是健康情况和状态的数据。

动画 武器和特技的视觉效果等使用的动画的数据。

图块 设定绘制地图时所用图块的地图元件的数据。

公共事件 在整个游戏中通用的各种可调用事件的数据。

系统 初期同伴、属性、SE 和用语等各种各样的数据。

这些数据在游戏中基本不重复使用。比如角色中有「初期等级」设定项,然而实际角色在游戏中会成长,等级也会不断上升,从而会使用另外的数据。

编辑数据项目

除外「系统」,各分页的画面都是左右分开,左侧为数据项目的 ID(管理号)和名称目录,右侧显示为该数据项目的内容。编辑数据项目,单击左侧目录选择,再编辑右侧显示的各设定项目。各设定项目的具体意思请参照帮助提示。

数据库窗口中按「F4」、「F5」键,就能在各个数据项目中上下选择。在有很多数据要设定特定项目的情况下,使用该 *** 作能大大提高工作效率。

在数据项目目录中点击右键会出现d出菜单,可以进行复制和粘贴等 *** 作。在这里选择「批量复制」,会出现指定批量复制项目数的对话框,设定一个要复制的项目数。这将会在从其它工程中转移数据的情况下使用。

更改最大值

要更改数据项目的数量,点击目录下面的「更改最大值」按钮。会显示更改最大值对话框,设定一个从 1 到 999 的数值。

增加最大值会增加游戏运行时必需的内存容量,数据的读写速度也会变慢。最好不要无意义的增加最大值。

如果减少了最大值,那么超过这个数量的项目会被全部删除。

作者:mwtt2007-8-8 17:34 回复此发言

--------------------------------------------------------------------------------

4 回复:rpg maker xp制作教程

脚本

--------------------------------------------------------------------------------

掌管游戏运行的简单程序语言称为脚本。

与一般把「显示文章」这样的指令称为脚本的情况不同,RPGXP 把在事件指令之上,更接近程序概念的指令称为脚本。所有事件指令其实不是程序,只有脚本系统解读后才能运行。

脚本的编辑,是针对游戏系统的高级用户提供的功能,难度很高。如果只是制作普通游戏,就没有必要了解。最初的脚本系统完全可以制作不错的游戏,最好只在对默认脚本感到不满意的时候再进行编辑。

Ruby 是什么

脚本语言是一种独特的简单语言,RPGXP 采用的是 Ruby 脚本语言。Ruby 的官方网页是 http://www.ruby-lang.org/ 。

Ruby 是松本行弘先生开发的免费软件,描述大规模的游戏也能保持良好性能。是善长文本处理的语言,照原样会加大游戏开发的难度。因此,对游戏开发用途的 Ruby 语言进行了特殊化,这就是 RGSS(Ruby Game Scripting System),中文意思就是 Ruby 游戏脚本系统。详细内容请参照 RGSS 参考。

另外,把 Ruby 标记为 ruby 是充许的,但是不能标记为 RUBY、ルビー或るびー(这两个日语的发音同 Ruby)。

脚本编辑器

在主菜单「工具」菜单中选择「脚本编辑器」。会出现脚本编辑器对话框。

运行像 RPG 这类大规模的游戏需要非常多的脚本程序,所以把全部脚本程序分为多个适当的单位来管理是很重要的。RPGXP 把这个单位称为组。脚本编辑器左侧显示的就是组列表。

脚本编辑器,和数据库有相似的设计便于 *** 作。同数据库一样按「F4」、「F5」键,就能在各个组中上下选择。这里还增加了一个「F6」键,可以取光标当前位置的单词复制为该脚本组的名称。

组的 *** 作

在组名称上点右键会出现d出菜单。选择「插入」,就会在所选组前面添加一个新的空白组。同样,选择「剪切」和「复制」 *** 作,就能更改组的顺序。

和数据库不同,组不是以 ID 来管理的。而是按照各组在列表中的顺序,从上到下依次运行。游戏开始脚本是列表最下面的“Main”,各种定义完成后实际游戏的运行是从该组开始的。

编辑 *** 作

在右侧文本编辑窗口中点右键,会出现一个d出菜单如右图。就能进行「剪切」、「复制」、「查找」、「替换」等基本的编辑 *** 作。

文本编辑中还可使用 Ctrl+F 和 Ctrl+G 等快捷键。

如果使用「查找」在编辑的组中没有找到目标,而想对全部脚本组进行文本搜索时,可以在组的d出菜单中选择「查找」。快捷键是 Ctrl+Shift+F。

脚本的使用方法

脚本除了能在脚本编辑器中直接编辑以外还有以下三种使用方法。

在事件指令「脚本」中使用。

在事件指令「条件分歧」的条件中使用。

作为「移动路线」内的指令使用。

比如「调用加入了独立脚本的事件指令」的情况就能使用到脚本。这样或许能设计出各种各样有趣的使用方法。

作者:mwtt2007-8-8 17:34 回复此发言

--------------------------------------------------------------------------------

5 回复:rpg maker xp制作教程

素材规格

--------------------------------------------------------------------------------

RPGXP 可以使用其本身初始的图片和声音素材文件。

在主菜单「工具」菜单中选择「媒体库」,会出现媒体库对话框,可以进行各种素材的导入与导出。向游戏文件夹里直接复制文件也可以,媒体库中还有图片预览功能,对素材不熟悉的话可以使用。

图片素材

可以使用 PNG 文件和 JPG 文件。如果是 PNG 文件则必须为 32 位元色彩(Alpha Channel)。

角色(Graphics/Characters)

收录地图上显示的角色图片的文件夹。

一个角色使用一个文件。尺寸任意,以 4 个方向(下、左、右、上)×4 个步行样式合计 16 个样式的规定顺序排列。位图宽高的各 1/4 就作为该角色的尺寸。

战斗者(Graphics/Battlers)

收录战斗画面中显示的角色图片的文件夹。

尺寸任意,但注意最好不要超过 640×320 的战斗画面。而且使用高 40 以下的图片会损害显示出来的清晰度。

动画(Graphics/Animations)

收录主要在战斗画面中显示效果的动画图片的文件夹。

一个个固定大小 192×192 的图片 5 张横向排列为一组,如有必要还可以纵向延长,即成为一整个动画文件。文件的尺寸大小无限制,但因为显示动画速度的关系,最好不要用太大的图片。

图块(Graphics/Tilesets)

收录构成地图的地图元件的文件夹。

一个个固定大小 32×32 的元件图片 8 张横向排列为一组,如有必要还可以纵向延长,即成为一整个图块文件。文件的尺寸大小无限制,但因为显示地图速度的关系,最好不要用太大的图片。

自动地图元件(Graphics/Autotiles)

收录边界自动生成的特殊地图元件的文件夹。

具体请参照自动地图元件说明。

远景(Graphics/Panoramas)

收录地图远处显示的图片(远景)的文件夹。

尺%B

作者:mwtt2007-8-8 17:34 回复此发言

--------------------------------------------------------------------------------

6 回复:rpg maker xp制作教程

战斗计算式

--------------------------------------------------------------------------------

RPGXP 默认的战斗系统,采用以下的计算式。

攻击方角色表示为 A,被攻击方角色以 B 表示。

第一命中率判定

普通攻击

第一命中率 = A 当前状态下的命中率 %

技能攻击

攻击力 F 为 1 以上(物理攻击)

第一命中率 = 技能的命中率 × A 当前状态下的命中率 % ÷ 100

攻击力 F 为 0(物理攻击以外)

第一命中率 = 技能的命中率

使用物品

第一命中率 = 物品的命中率

A 在正常状态下的命中率为 100。

必杀机率判定

普通攻击

必杀率 = 4 × A 的灵巧 ÷ B 的速度

技能攻击

必杀率 = 0

使用物品

必杀率 = 0

必杀率即奋力一击(通常会使敌方常受到较大的损伤)发生的机率,如果必杀率为 4 则表示每 4 个回合就出现一次奋力一击。

伤害计算

普通攻击

威力 = A 的攻击力 - (B 的物理防御 ÷ 2)

放大率 = 20 + A 的力量

分散度 = 15

威力的最小值:0

技能攻击

技能的威力值为正数

威力 = 技能的威力

+ (A 的攻击力 × 技能的攻击力 F ÷ 100)

- (B 的物理防御 × 技能的物理防御 F ÷ 200)

- (B 的魔法防御 × 技能的魔法防御 F ÷ 200)

威力的最小值:0

技能的威力值为负数

威力 = 技能的威力

放大率 = 20

+ (A 的力量 × 技能的力量 F ÷ 100)

+ (A 的灵巧 × 技能的灵巧 F ÷ 100)

+ (A 的速度 × 技能的速度 F ÷ 100)

+ (A 的魔力 × 技能的魔力 F ÷ 100)

分散度 = 技能的分散度

使用物品

HP 回复量为负数

威力 = - HP 回复量

- (B 的物理防御 × 物品的物理防御 F ÷ 20)

- (B 的魔法防御 × 物品的魔法防御 F ÷ 20)

威力的最小值:0

HP 回复量为正数

威力 = - HP 回复量

放大率 = 20

分散度 = 物品的分散度

伤害 = 威力 × 放大率 ÷ 20 × 属性修正 × 必杀修正 × 防御修正 ( ± 分散度 %)

属性修正:有攻击属性时,在 B 的属性有效度中选择最弱的进行修正,修正值如下。

A:200%,B:150%,C:100%,D:50%,E:0%,F:-100%

另外,攻击属性符合 B 防具的防御属性的,伤害减半,修正值为 1/2。

有多个相同防御属性的,减半效果要叠加。

必杀修正:伤害值为正数,奋力一击发动时修正值为 2。

防御修正:伤害值为正数,B 防御时修正值为 1/2。

第二命中率判定

伤害值为正数

B 为正常状态

回避力 = 8 × B 的速度 ÷ A 的灵巧 + B 的回避修正

普通攻击

第二命中率 = 100 - 回避力

技能攻击

第二命中率 = 100 -(回避力 × 技能的回避 F ÷ 100)

使用物品

第二命中率 = 100

B 附加有「不能回避攻击」状态

第二命中率 = 100

伤害值为负数(回复)

第二命中率 = 100

逃跑成功率

逃跑成功率 =50 × 角色的速度平均值 ÷ 敌人的速度平均值

作者:mwtt2007-8-8 17:34 回复此发言

--------------------------------------------------------------------------------

7 回复:rpg maker xp制作教程

脚本入门

--------------------------------------------------------------------------------

在主菜单「工具」菜单中选择「脚本编辑器」,出现的那些英文字排列就是脚本。这个是 RPGXP 的关键部分,是掌管游戏实际运行的程序语言。虽然是简单的程序语言,但初学者要学习的话却是得花费大量的时间。首先得了解脚本是如何运作的,推荐先从基础学起。

这个「脚本入门」,是为已经学习 RGPXP 基本使用方法的人编写的。可以不具备计算机程序语言基础知识,但最低要对 RPGXP 的功能有一定程度的了解。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11717139.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存