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

Project1

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

[已经过期] 求VA的路牌指示制作方法

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
23 小时
注册时间
2012-6-27
帖子
7
跳转到指定楼层
1
发表于 2012-9-11 19:39:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
用搜索查找过,不过找到的都是VX的,链接如下:http://rpg.blue/thread-105429-1-1.html

01.#==============================================================================
02.# 路牌提示系统 by 沉影不器
03.#------------------------------------------------------------------------------
04.# 功能说明:
05.# 仿照《黑暗圣剑传说2 序章》(柳柳)的介绍里提到的效果写的,据说是空之轨迹里的效果
06.# 原游戏的实现方式是公共事件播放动画, 以下引用原描述:
07.# "方便玩家的路牌设计, 当靠近路牌的时候, 路牌就会指引玩家的方向"
08.#------------------------------------------------------------------------------
09.# 使用说明(详见范例工程):
10.# ① 制作路牌皮肤文件, 包含三个文件(64×64的窗体和两个箭头标志)
11.# ② 在地图上创建路牌事件, 并在事件中用注释写上指路内容, 允许多项
12.# ③ 指路内容格式为(忽略空格): 方向代号 = 该方向所指向的名称
13.# 其中方向代号为: 2 4 6 8
14.# 例: 2 = 悦来客栈 显示"↓ 悦来客栈"
15.# ④ 创建与路牌事件同名的区域, 表示玩家进入该区域时激活相应路牌
16.#==============================================================================
17.# □ Spriteset_Roadsign
18.#==============================================================================
19.class Spriteset_Roadsign
20.#--------------------------------------------------------------------------
21.# ○ 参数设定
22.#--------------------------------------------------------------------------
23.WIDTH_MIN = 96 # 窗体最小宽度
24.SHOW_TIME = 60 # 窗体显示时间
25.
26.FONT = "宋体" # 字体
27.FONT_SIZE = 14 # 字体大小
28.FONT_SHADOW = false # 字体阴影
29.FONT_COLOR = Color.new(0,0,0) # 字体颜色
30.
31.SIGN_SKIN = "Roadsign" # 路牌皮肤
32.SKIN_SIZE = 8 # 皮肤厚度(边框)
33.SIGN_OPACITY = 192 # 路牌不透明度
34.
35.X_ADJ = 0 # 路牌箭头坐标微调
36.Y_ADJ = 0
37.#--------------------------------------------------------------------------
38.# ○ 初始化对象
39.# event : 事件
40.#--------------------------------------------------------------------------
41.def initialize(event)
42.@event = event
43.# 显示控制符
44.@show = true
45.# 显示时间计数
46.@show_count = 0
47.# 相对定位
48.@x_plus = 0
49.@y_plus = 0
50.# 描绘内容
51.@texts = get_texts
52.# 主'窗体'
53.@base_sprite = Sprite.new
54.@base_sprite.z = 999
55.@base_sprite.opacity = 0
56.# 大小和尺寸
57.set_size
58.get_pos
59.reset_pos
60.# 描绘皮肤
61.draw_skin
62.refresh
63.end
64.#--------------------------------------------------------------------------
65.# ○ 释放
66.#--------------------------------------------------------------------------
67.def dispose
68.@base_sprite.bitmap.dispose
69.@base_sprite.dispose
70.@arrow_sprite.bitmap.dispose
71.@arrow_sprite.dispose
72.end
73.#--------------------------------------------------------------------------
74.# ○ 是否释放
75.#--------------------------------------------------------------------------
76.def disposed?
77.return @base_sprite.disposed?
78.end
79.#--------------------------------------------------------------------------
80.# ○ 更新画面
81.#--------------------------------------------------------------------------
82.def update
83.# 跟随路牌
84.reset_pos
85.# 显示期
86.if @show_count > 0
87.@show_count -= 1
88.return
89.end
90.# 开始显示期
91.if @base_sprite.opacity >= 255
92.@show_count = SHOW_TIME
93.@show = false
94.end
95.# 显示中或隐藏中
96.if @show
97.@base_sprite.opacity += 8 if @base_sprite.opacity < 255
98.else
99.@base_sprite.opacity -= 8 if @base_sprite.opacity > 0
100.end
101.@arrow_sprite.opacity = @base_sprite.opacity
102.# 自释放
103.self.dispose if !@show and @base_sprite.opacity <= 0
104.end
105.#--------------------------------------------------------------------------
106.# ○ 获取描绘文本
107.#--------------------------------------------------------------------------
108.def get_texts
109.down = @event.read_roadsign("2")
110.left = @event.read_roadsign("4")
111.right = @event.read_roadsign("6")
112.up = @event.read_roadsign("8")
113.texts = []
114.texts.push("↓ " + down) if down != ""
115.texts.push("← " + left) if left != ""
116.texts.push("→ " + right) if right != ""
117.texts.push("↑ " + up) if up != ""
118.return texts
119.end
120.#--------------------------------------------------------------------------
121.# ○ 创建位图
122.#--------------------------------------------------------------------------
123.def create_bitmap(width, height)
124.@base_sprite.bitmap = Bitmap.new(width, height)
125.# 字体设定
126.@base_sprite.bitmap.font = Font.new(FONT, FONT_SIZE)
127.@base_sprite.bitmap.font.shadow = FONT_SHADOW
128.@base_sprite.bitmap.font.color = FONT_COLOR
129.end
130.#--------------------------------------------------------------------------
131.# ○ 设定尺寸
132.#--------------------------------------------------------------------------
133.def set_size
134.# 最小宽度
135.width = WIDTH_MIN
136.# 测试宽度的临时位图
137.test_bitmap = Bitmap.new(1, 1)
138.test_bitmap.font = Font.new(FONT, FONT_SIZE)
139.for text in @texts
140.c_width = test_bitmap.text_size(text).width
141.width = c_width if c_width > width
142.end
143.height = @texts.size * line_height
144.create_bitmap(width+SKIN_SIZE*2, height+SKIN_SIZE*2)
145.# 释放临时位图
146.test_bitmap.dispose
147.end
148.#--------------------------------------------------------------------------
149.# ○ 获取坐标
150.#--------------------------------------------------------------------------
151.def get_pos
152.x = @event.screen_x - width/2
153.if @event.screen_y > height
154.y = @event.screen_y - height - 32
155.# 箭头类型标志
156.up = true
157.else
158.y = @event.screen_y
159.# 箭头类型标志
160.up = false
161.end
162.# 相对定位
163.@x_plus = x - @event.screen_x
164.@y_plus = y - @event.screen_y
165.set_arrow_sprite(up)
166.end
167.#--------------------------------------------------------------------------
168.# ○ 重设坐标
169.#--------------------------------------------------------------------------
170.def reset_pos
171.# 相对定位
172.@base_sprite.x = @event.screen_x + @x_plus
173.@base_sprite.y = @event.screen_y + @y_plus
174.@arrow_sprite.x = @event.screen_x - 16 + X_ADJ
175.@arrow_sprite.y = @event.screen_y - 32 + Y_ADJ
176.end
177.#--------------------------------------------------------------------------
178.# ○ 设定箭头
179.#--------------------------------------------------------------------------
180.def set_arrow_sprite(up = true)
181.@arrow_sprite = Sprite.new
182.@arrow_sprite.opacity = 0
183.# 上下两套箭头
184.case up
185.when true
186.bitmap = Cache.system(SIGN_SKIN + "_arrow_up")
187.rect = Rect.new(0, 0, bitmap.width, bitmap.height)
188.@arrow_sprite.bitmap = Bitmap.new(rect.width, rect.height)
189.@arrow_sprite.bitmap.blt(0, 0, bitmap, rect, SIGN_OPACITY)
190.when false
191.bitmap = Cache.system(SIGN_SKIN + "_arrow_down")
192.rect = Rect.new(0, 0, bitmap.width, bitmap.height)
193.@arrow_sprite.bitmap = Bitmap.new(rect.width, rect.height)
194.@arrow_sprite.bitmap.blt(0, 0, bitmap, rect, SIGN_OPACITY)
195.end
196.bitmap.dispose
197.end
198.#--------------------------------------------------------------------------
199.# ○ 获取宽度
200.#--------------------------------------------------------------------------
201.def width
202.return @base_sprite.width
203.end
204.#--------------------------------------------------------------------------
205.# ○ 获取高度
206.#--------------------------------------------------------------------------
207.def height
208.return @base_sprite.height
209.end
210.#--------------------------------------------------------------------------
211.# ○ 获取行高
212.#--------------------------------------------------------------------------
213.def line_height
214.return FONT_SIZE + 2
215.end
216.#--------------------------------------------------------------------------
217.# ○ 描绘皮肤
218.#--------------------------------------------------------------------------
219.def draw_skin
220.# 皮肤文件
221.skin = Cache.system(SIGN_SKIN)
222.@base_sprite.bitmap.clear
223.# 描绘角
224.src_rect = Rect.new(0,0,16,16)
225.@base_sprite.bitmap.blt(0, 0, skin, src_rect, SIGN_OPACITY)
226.src_rect = Rect.new(48,0,16,16)
227.@base_sprite.bitmap.blt(width-16, 0, skin, src_rect, SIGN_OPACITY)
228.src_rect = Rect.new(0,48,16,16)
229.@base_sprite.bitmap.blt(0, height-16, skin, src_rect, SIGN_OPACITY)
230.src_rect = Rect.new(48,48,16,16)
231.@base_sprite.bitmap.blt(width-16, height-16, skin, src_rect, SIGN_OPACITY)
232.# 描绘边
233.dest_rect = Rect.new(16,0,width-32,16)
234.src_rect = Rect.new(16,0,32,16)
235.@base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
236.dest_rect = Rect.new(16,height-16,width-32,16)
237.src_rect = Rect.new(16,48,32,16)
238.@base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
239.dest_rect = Rect.new(0,16,16,height-32)
240.src_rect = Rect.new(0,16,16,32)
241.@base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
242.dest_rect = Rect.new(width-16,16,16,height-32)
243.src_rect = Rect.new(48,16,16,32)
244.@base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
245.# 描绘底
246.dest_rect = Rect.new(16,16,width-32,height-32)
247.src_rect = Rect.new(16,16,32,32)
248.@base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
249.# 释放皮肤文件
250.skin.dispose
251.end
252.#--------------------------------------------------------------------------
253.# ○ 刷新
254.#--------------------------------------------------------------------------
255.def refresh
256.# 逐行
257.for i in [email protected]
258.rect = Rect.new(SKIN_SIZE, i*line_height+SKIN_SIZE, @base_sprite.width, line_height)
259.text = @texts
260.@base_sprite.bitmap.draw_text(rect, text)
261.end
262.end
263.end
264.
265.#==============================================================================
266.# ■ Game_Event
267.#==============================================================================
268.class Game_Event < Game_Character
269.#--------------------------------------------------------------------------
270.# ◎ 定义实例变量
271.#--------------------------------------------------------------------------
272.attr_reader :name # 事件名称
273.attr_accessor :roadsign # 路牌标志
274.#--------------------------------------------------------------------------
275.# ◎ 刷新
276.#--------------------------------------------------------------------------
277.alias old_refresh refresh
278.def refresh
279.# 事件名称
280.@name = @event.name
281.# 路牌
282.@roadsign = ''
283.old_refresh
284.end
285.#-------------------------------------------------------------------------
286.# ○ 读取路牌指定字段
287.# section : 字段名
288.# ignore_caps : 忽略大小写(仅字段名)
289.#-------------------------------------------------------------------------
290.def read_roadsign(section, ignore_caps = false)
291.result = ''
292.# 忽略大小写时,全部转大写
293.section.upcase! if ignore_caps
294.# 转symbol方便比较
295.s = section.to_sym
[email protected]_line{|line|
297.temp = line.split(/=/)
298.# 去掉干扰字符
299.temp.each {|i| i.strip!}
300.temp[0].upcase! if ignore_caps
301.if temp[0].to_sym == s
302.unless temp[1] == nil
303.result = temp[1]
304.end
305.# 如果希望同名字段值覆盖前面的字段,去掉下一行
306.break
307.end
308.}
309.return result
310.end
311.end
312.
313.#==============================================================================
314.# ■ Game_Player
315.#==============================================================================
316.class Game_Player < Game_Character
317.#--------------------------------------------------------------------------
318.# ◎ 刷新画面
319.#--------------------------------------------------------------------------
320.alias old_update update
321.def update
322.old_update
323.# 路牌窗体刷新
324.unless @roadsign_sprite == nil or @roadsign_sprite.disposed?
325.@roadsign_sprite.update
326.end
327.end
328.#--------------------------------------------------------------------------
329.# ◎ 增加步数
330.#--------------------------------------------------------------------------
331.alias old_increase_steps increase_steps
332.def increase_steps
333.old_increase_steps
334.# 路牌操作
335.setup_roadsign_spriteset
336.end
337.#--------------------------------------------------------------------------
338.# ○ 显示路牌
339.#--------------------------------------------------------------------------
340.def setup_roadsign_spriteset
341.name = roadsign_name
342.return if name == "" or name == @old_name
343.@old_name = name
344.event = get_event(name)
345.return if event == nil
346.roadsign_event = setup_roadsign_event(event)
347.return if roadsign_event == nil
348.# 生成路牌窗体
349.if @roadsign_sprite == nil or @roadsign_sprite.disposed?
350.@roadsign_sprite = Spriteset_Roadsign.new(roadsign_event)
351.end
352.end
353.#--------------------------------------------------------------------------
354.# ○ 设置路牌
355.# event : 事件(Game_Map内部)
356.#--------------------------------------------------------------------------
357.def setup_roadsign_event(event)
358.return if event.list == nil
359.for line in event.list
360.if line.code == 108 or 408
361.unless line.parameters.empty?
362.event.roadsign += line.parameters.to_s + "\r\n"
363.end
364.end
365.end
366.return event
367.end
368.#--------------------------------------------------------------------------
369.# ○ 查找路牌名称
370.#--------------------------------------------------------------------------
371.def roadsign_name
372.for area in $data_areas.values
373.return area.name if $game_player.in_area?(area)
374.end
375.@old_name = ""
376.return @old_name
377.end
378.#--------------------------------------------------------------------------
379.# ○ 获取事件
380.# event_name : 事件名
381.#--------------------------------------------------------------------------
382.def get_event(event_name)
383.$game_map.events.each_value {|event|
384.return event if event.name == event_name}
385.return nil
386.end
387.end



使用过后代码一直出错
似乎主要是使用说明中的第4条“创建与路牌事件同名的区域, 表示玩家进入该区域时激活相应路牌

在VX版本中有专门的区域设置,但是在VA中没有看到啊,还是这个脚本对于VA根本就不能用,那么哪位大侠能否提供解决方案呢?拜托了!!

Lv3.寻梦者

Assassin-K

梦石
0
星屑
3483
在线时间
2281 小时
注册时间
2012-5-23
帖子
4065

贵宾

2
发表于 2012-9-11 22:46:03 | 只看该作者
其实用得着用脚本么?
在路口交接转换的地方设置事件不就完了么?
以踩雷的方式,踩中了就显示图片-->等待-->消除图片的事件应该没有难度吧。

◆ROZONE◆
>洛子又要去流浪地球了……
>如果你看到我在线,又没动静,那只能说明我在挂机……
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
743
在线时间
2064 小时
注册时间
2011-10-3
帖子
1686
3
发表于 2012-9-11 23:04:09 | 只看该作者
不过对于地图多的来说图片会很多吧

点评

是有点多,但因为显示的都是文字类图片,也不会很大的说,最重要是图片比较自由嘛!爱什么字就什么字还能上图。。。  发表于 2012-9-11 23:50
回复 支持 反对

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4557
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

4
发表于 2012-9-12 09:35:37 | 只看该作者
在路牌上用显示文章配上Fuki对话框(站内早出了)脚本不行吗?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
23 小时
注册时间
2012-6-27
帖子
7
5
 楼主| 发表于 2012-9-13 11:08:39 | 只看该作者
hcm 发表于 2012-9-12 09:35
在路牌上用显示文章配上Fuki对话框(站内早出了)脚本不行吗?

Fuki对话框不是XP系统的吗?我说的是VA,版本兼容吗?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4557
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

6
发表于 2012-9-13 12:22:02 | 只看该作者
rikijone 发表于 2012-9-13 11:08
Fuki对话框不是XP系统的吗?我说的是VA,版本兼容吗?

VA不是也出了吗?
虽然不是正式的那种。
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-11 01:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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