赞 | 0 |
VIP | 186 |
好人卡 | 0 |
积分 | 1 |
经验 | 5829 |
最后登录 | 2012-12-21 |
在线时间 | 83 小时 |
Lv1.梦旅人 龙皇
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 83 小时
- 注册时间
- 2007-8-8
- 帖子
- 2956
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
前言:
很久以前sizz123发过探索地图的教程(http://rpg.blue/web/htm/news903.htm)
我参考他数组的作法,透过数组是否有角色移动过的坐标,然后看看有没有重复的坐标,我就应用这些数据做出这样的成果。
★由於本系统对地图的制作要求很高,使用时请密切注意相关制作注意事项!
【恶魔城探索地图系统】地图绘制技巧图文教学:
http://rpg.blue/viewthread.php?tid=87441
■ RPG恶魔城探索地图V0.30版
适宜用户:
恶魔城RPG同人作品
使用效果:
"該张地图"有地图恶魔城探索的效果
使用注意事项:
地图的大小(高宽)设定时要按比例设定
探索地图格数大小是 宽:64格 ;高:48格
游戏基本地图单位大小是 宽:20 ;高:15
地图的大小(高宽)高宽设定范例 :
宽:40 => 20*2(倍)
高:30 => 15*2(倍)
宽:80 => 20*4(倍)
高:30 => 15*2(倍)
探索地图名字取決于"该地图ID***的名称"
查看探索地图时,要调用 $scene = Castlevania_Map.new
是否生成方格图片 由
SW_NUMBER = (true代表生成 / false代表不生成)
方便控制
控制角色位置点表现方式(true代表闪光动画/false代表红点)
SW_Animation = true
如果SW_Animation设为true,动画的ID編號在这里设置
ID_Animation = 102
MAX_BLOCK 设置全部地图之探索的总和最大格数(地图显示百分比使用)
SW_MAXBLOCK 控制是否生显示百分比 (true代表显示 / false代表不显示)
建议:
纪录点最好设置在地图通道的端側 (不要放在路叉口处),要不然看起来怪怪的= =。
通道与通道之间最好不要设置的太靠近
(X方向最好相差20格以上;Y方向最好相差15格以上)。
如果想用闪光动画,下载"范例工程",
范例工程的动画数据库里有 (动画的ID編號102)光点动画
直接复制到你的动画数据库里即可。
TERRAIN 为纪录点区域地形(地面)标志设置
TERRAIN=1則代表只要经过地形标志为1的地方,就可生成纪录点紅色区域
(4/20)V0.02版(更新):
大大感谢禾西修改更新脚本(1)突破 场所移动后记忆当前该张探索地图
(2)场所移动前不再需要每次调用$game_variables.ma.clear
(4/22)V0.05版(更新):
(4/24)V0.06版(无聊的更新):
(4/25)V0.07版(更新):(5)由 SW_NUMBER 方便控制是否生成方格图片
(4/26)V0.10版(更新):(6)不需要再并行处理 $game_variables.blue
(4/27)V0.20版(更新):
感谢禾西的循环动画的脚本提供参考(7)增加角色位置光点动画(如同 恶魔城-月下 角色位置光点效果)
(4/27)V0.21版(更新):(8)光点动画位置矫正误差
(9)简化Scene_Map追加定义
(5/1)V0.25版(更新):
(5/2)V0.26版(更新):
感谢禾西脚本效率化
(5/10)V0.28版(更新):(12)地图白色边缘拓展化,取消方格式图片地图拓展。
(5/18)V0.30版(更新):
把此脚本貼在Main前面
- #==============================================================================
- # ■ RPG恶魔城探索地图V0.30版 (By TERENCE龙皇)
- #------------------------------------------------------------------------------
- # 使用效果:
- # "該张地图"有地图恶魔城探索的效果
- #
- # 使用注意事项:
- # 地图的大小(高宽)设定时要按比例设定
- # 探索地图格数大小是 宽:64格;高:48格
- # 游戏基本地图单位大小是 宽:20 ;高:15
- # 地图的大小(高宽)高宽设定范例 :
- # 宽:40 => 20*2(倍)
- # 高:30 => 15*2(倍)
- # 宽:80 => 20*4(倍)
- # 高:30 => 15*2(倍)
- #
- # 探索地图名字取決于"该地图ID***的名称"
- # 查看探索地图时,要调用 $scene = Castlevania_Map.new
- #
- # 建议:
- # 纪录点最好设置在地图通道的端側 (不要放在路叉口处),要不然看起来怪怪的= =。
- # 通道与通道之间最好不要设置的太靠近
- # (X方向最好相差20格以上;Y方向最好相差15格以上)。
- #==============================================================================
- MAX_BLOCK = 126 #全部地图之探索的总和最大格数 (地图显示百分比使用)
- SW_MAXBLOCK = true #控制是否生显示百分比 (true代表显示 / false代表不显示)
- STAR_X = 21 #探索该张地图左上起始X座标格
- STAR_Y = 15 #探索该张地图左上起始Y座标格
- WHITE_BOTTOM = "Graphics/Pictures/White" #白底边图片
- BLUE_PLACE = "Graphics/Pictures/Blue" #经过区域图片
- RED_PLACE = "Graphics/Pictures/Red" #纪录点区域图片
- RED_POINT = "Graphics/Pictures/Point" #角色红点图片
- SQUARE = "Graphics/Pictures/未命名1" #方格(OR背景)图片
- Castlename_X = 380 #探索该张地图名称矩形左上顶点X座标
- Castlename_Y = 20 #探索该张地图名称矩形左上顶点Y座标
- Castlename_W = 220 #探索该张地图名称矩形宽
- Castlename_H = 60 #探索该张地图名称矩形高
- Castle_OPACITY_1 = 244 #边框透明度
- Castle_OPACITY_2 = 144 #背景透明度
- Castle_OPACITY_3 = 255 #文字透明度
- # 地图名字的颜色
- Castle_TEXTCOLOR = Color.new(255, 255, 255, 255)
- SW_NUMBER = false # 控制是否生成方格图片(true代表生成 / false代表不生成)
- SW_Animation = true # 控制角色位置点表现方式(true代表闪光动画 / false代表红点)
- ID_Animation = 102 # 如果SW_Animation设为true,动画的ID編號在这里设置
- TERRAIN = 1 # 纪录点区域地形(地面)标志设置
- #==============================================================================
- # ■ Sprite_Animation
- #------------------------------------------------------------------------------
- # 循环动画 (角色位置闪光点)。(By 禾西)
- #==============================================================================
- class Sprite_Animation < RPG::Sprite
- #--------------------------------------------------------------------------
- # ● 取得动画ID
- #--------------------------------------------------------------------------
- attr_accessor :id
- attr_accessor :pause
- attr_accessor :visible
- #--------------------------------------------------------------------------
- # ● 初始化物件
- # viewport : 显示连接埠
- #--------------------------------------------------------------------------
- def initialize(x=0,y=0,z=1000)
- @viewport = Viewport.new(0, 0, 640, 480)
- super(@viewport)
- self.id = 0
- self.pause = false
- self.visible = true
- # 设定活动区块的座标
- self.x = x
- self.y = y
- self.z = z
- update
- end
- #--------------------------------------------------------------------------
- # ● 更新画面
- #--------------------------------------------------------------------------
- def update
- return unless self.id > 0
- if self.visible
- return if self.pause
- animation = $data_animations[self.id]
- loop_animation(animation) unless animation == nil
- else
- dispose_loop_animation
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- (self.bitmap.dispose) unless (self.bitmap == nil)
- @viewport.dispose
- super
- end
- end
- #==============================================================================
- # ■ Game_Variables
- #------------------------------------------------------------------------------
- # 处理变数的类别。(追加定义)
- #==============================================================================
- class Game_Variables
- attr_accessor:location
- attr_accessor:savelocate
- #--------------------------------------------------------------------------
- # ● 初始化
- #--------------------------------------------------------------------------
- def initialize
- @data = []
- @location = []
- @savelocate = []
- @cvpoint_x = STAR_X
- @cvpoint_y = STAR_Y
- end
- def blue(map_id=$game_map.map_id)
- # 规划探索地图方格及角色红点位置
- save_x=(@cvpoint_x+$game_player.x*32/640)*10
- save_y=(@cvpoint_y+$game_player.y*32/480)*10
-
- # 数组中是否有当前座标,没有则把座标推到数组中
- @location[map_id]||=[]
- unless @location[map_id].include?([save_x,save_y])
- @location[map_id].push([save_x,save_y])
- end
-
- # 数组中是否有当前"纪录点"座标,没有则把座标推到数组中
- @savelocate[map_id]||=[]
- unless (@savelocate[map_id].include?([save_x,save_y])) or
- ($game_map.terrain_tag($game_player.x, $game_player.y) != TERRAIN)
- @savelocate[map_id].push([save_x,save_y])
- end
- end
- end
- #==============================================================================
- # ■ Castlevania_Map
- #------------------------------------------------------------------------------
- # 处理探索地图画面的类别。
- #==============================================================================
- class Castlevania_Map
- #--------------------------------------------------------------------------
- # ● 初始化标志
- #--------------------------------------------------------------------------
- def initialize
- @cvpoint_x = STAR_X
- @cvpoint_y = STAR_Y
- end
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- blueback = []
- whiteback = []
- # 获取地图ID
- id = $game_map.map_id
-
- # 生成方格(OR背景)图片
- if SW_NUMBER
- black = Sprite.new
- black.bitmap = Bitmap.new(SQUARE)
- black.x = 0
- black.y = 0
- end
- x = (@cvpoint_x+$game_player.x*32/640)*10
- y = (@cvpoint_y+$game_player.y*32/480)*10
- $game_variables.location[id]||=[[x,y]]
- $game_variables.savelocate[id]||=[]
-
- # 生成白底边图片
- $game_variables.location[id].each do |loc|
- whiteback << Sprite.new
- whiteback[-1].bitmap = Bitmap.new(WHITE_BOTTOM)
- whiteback[-1].x = loc[0]-1
- whiteback[-1].y = loc[1]-1
- end
- # 生成蓝色到过的区域图片
- $game_variables.location[id].each do |loc|
- blueback << Sprite.new
- # 判断该区是否是纪录点区域,改变生成紅色到过的区域图片
- if $game_variables.savelocate[id].include?(loc)
- blueback[-1].bitmap = Bitmap.new(RED_PLACE)
- else
- blueback[-1].bitmap = Bitmap.new(BLUE_PLACE)
- end
- blueback[-1].x = loc[0]
- blueback[-1].y = loc[1]
- end
- if SW_Animation
- # 生成角色闪光点循环动画
- @point = Sprite_Animation.new
- @point.id = ID_Animation
- @point.x = 4 + x
- @point.y = 3 + y
- else
- # 生成角色红点图片
- @point = Sprite.new
- @point.bitmap = Bitmap.new(RED_POINT)
- @point.x = x
- @point.y = y
- end
- # 生成探索区域地图名称视窗
- cvname = Castlevania_Mapname.new
- cvname.narrate
-
- if SW_MAXBLOCK
- # 生成探索地图百分比
- cvpercent = Castlevania_Percentage.new
- cvpercent.recount
- end
- Graphics.transition
- # 主循环
- loop do
- # 更新游戏画面
- Graphics.update
- # 更新输入讯息
- Input.update
- # 更新画面
- update
- # 如果切换画面就中断循环
- break if $scene != self
- end
- # 准备过渡
- Graphics.freeze
- @point.bitmap.dispose unless SW_Animation
- @point.dispose
- cvname.dispose
-
- # 释放探索地图百分比
- cvpercent.dispose if SW_MAXBLOCK
-
- # 释放方格(OR背景)图片
- if SW_NUMBER
- black.bitmap.dispose
- black.dispose
- end
-
- blueback.each{|one|one.dispose;
- one.bitmap.dispose}
- whiteback.each{|one|one.dispose;
- one.bitmap.dispose}
- end
- #--------------------------------------------------------------------------
- # ● 更新画面
- #--------------------------------------------------------------------------
- def update
- @point.update if SW_Animation
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 切换的地图画面
- $scene = Scene_Map.new
- # 释放标志图形
- return
- end
- end
- end
- #==============================================================================
- # ■ Castlevania_Mapname
- #------------------------------------------------------------------------------
- # 显示该张探索地图名字(该地图ID的名称)的窗口。
- #==============================================================================
- class Castlevania_Mapname < Window_Base
- def initialize
- super(Castlename_X , Castlename_Y, Castlename_W, Castlename_H)
- # 初始化窗口透明度
- self.opacity = Castle_OPACITY_1
- self.back_opacity = Castle_OPACITY_2
- self.contents_opacity = Castle_OPACITY_3
- self.contents = Bitmap.new(width - 32, height - 32)
- end
- def narrate
- # 获取地图ID
- id = $game_map.map_id
- self.contents.clear
- self.contents.font.color = Castle_TEXTCOLOR
- # 描绘地图名
- self.contents.draw_text(4, 0 , width - 40, 32, $data_mapinfos[id].name, 1)
- end
- end
- #==============================================================================
- # ■ Castlevania_Percentage
- #------------------------------------------------------------------------------
- # 探索地图百分比的窗口。
- #==============================================================================
- class Castlevania_Percentage < Window_Base
- def initialize
- super(-70 , -5, 220, 60)
- # 初始化窗口透明度
- self.opacity = 0
- self.back_opacity = 0
- self.contents_opacity = 255
- self.contents = Bitmap.new(width - 32, height - 32)
- end
- def recount
-
- # 运算探索过的格数
- block=0
- for i in 2..$game_variables.location.size
- block+=$game_variables.location[i-1].size
- end
-
- # 百分比运算
- percent = block*100/MAX_BLOCK
-
- self.contents.clear
- self.contents.font.color =Color.new(255, 255, 255, 255)
- # 描绘地图名
- self.contents.draw_text(4, 0 , width - 40, 32, percent.to_s+"%", 1)
- end
- end
- #==============================================================================
- # ■ Scene_Title
- #------------------------------------------------------------------------------
- # 处理标题画面的类别。(追加定义)
- #==============================================================================
- class Scene_Title
- alias smn_main main
- def main
- # 获取地图信息文件
- $data_mapinfos = load_data("Data/MapInfos.rxdata")
- smn_main
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #------------------------------------------------------------------------------
- # 处理地图画面的类别。(追加定义)
- #==============================================================================
- class Scene_Map
- alias ori_up update
- def update
- # 追加处理 $game_variables.blue
- $game_variables.blue if $game_player.moving?
- ori_up
- end
- end
复制代码
范例工程:
http://rpg.blue/UP_PIC/200801/� ... �图系统V0.30.rar
恶魔城探索地图素材包:
http://rpg.blue/UP_PIC/200801/恶魔城探索地图素材包.rar
{/gg}我忘了说明了~~索地图素材图片有更改,使用前请下载更新。 |
|