Project1
标题:
获取图标的问题
[打印本页]
作者:
9244579
时间:
2008-3-7 02:02
标题:
获取图标的问题
在窗口内,如何获取某技能的图标?
如:我在地图上弄了个窗口A
然后在菜单中选中技能B(图标一把剑)
按完后怎么样才能将在其图标自动放置图标A
且,若在选次技能C,按下后又换成图标B [LINE]1,#dddddd[/LINE]
此贴于 2008-3-11 11:49:43 被版主水迭澜提醒,请楼主看到后对本贴做出回应。
[LINE]1,#dddddd[/LINE]
----------------版务----------------
如果问题未解决,请继续提问
如果问题已解决,请结贴
若到末贴发贴时间后一周仍未结贴
管理员会自动为你过期帖子、结贴或强行认可答案(好人卡-1)
[LINE]1,#dddddd[/LINE]
版务信息:本贴由楼主自主结贴~
作者:
Iselia雪
时间:
2008-3-7 04:11
提示:
作者被禁止或删除 内容自动屏蔽
作者:
美兽
时间:
2008-3-7 05:34
一曲一行吟,一路一风尘。
作者:
水迭澜
时间:
2008-3-7 05:43
……= =完全不明白LZ的意思……到底是按下什么显示什么?
另菜单技能那地方的技能貌似是数组吧……
LS明显跑题,PIA飞
作者:
美兽
时间:
2008-3-7 05:46
以下引用
水迭澜于2008-3-6 21:43:56
的发言:
……= =完全不明白LZ的意思……到底是按下什么显示什么?
另菜单技能那地方的技能貌似是数组吧……
LS明显跑题,PIA飞
— —
我没看内容,直接根据标题写的,屏蔽好了……
作者:
9244579
时间:
2008-3-7 06:12
我昏,在地图中弄好了,4个窗口
。就是在技能菜单里,按下十字斩这个技能,然后返回到地图
选择4个窗口中的某一个
我选中了第一个,那么十字斩这个技能的图标就在窗口1中出现
作者:
水迭澜
时间:
2008-3-7 06:35
这么说吧,你还不如直接重写一个scene= =因为scene_skill和scene_map的数据判断完全不在一个地方= =|||这个的技术难度不高,而主要是刷新判断……
作者:
9244579
时间:
2008-3-7 21:28
如何做````{/hx}{/hx}我愚
作者:
9244579
时间:
2008-3-8 03:41
谢了 急求
我加红!!!
效果。
已经在Scene_Map里生成好5个窗口
然后在游戏中按技能选单,选择某技能后,
切换到5个窗口的选择里。
就是光标在5个窗口里选择
选择第一个窗口,就将此技能图标放到了第一个窗口
即 技能放置快捷键效果了
五个窗口的快截键
A S D F G
如果放到第一个窗口
那么在游戏中按A,此技能生效!
作者:
水迭澜
时间:
2008-3-8 03:44
直接从我自己的工程里翻出来给你……
class Game_Actor
attr_accessor :set_skills # 名称
alias new_initialize initialize
def initialize(actor_id)
@set_skills = []
for i in 0...5
@set_skills.push(0)
end
new_initialize(actor_id)
end
end
#==============================================================================
# ■ Window_SetupSkill
#==============================================================================
class Window_SetupSkill < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
# actor : 角色
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 352, 640, 128)
@set_skills = actor.set_skills#[57,35,67,13,60]
@actor = actor
@column_max = 5
@item_max = 5
refresh
self.index = 0
# 战斗中的情况下将窗口移至中央并将其半透明化
if $game_temp.in_battle
self.y = 64
self.height = 256
self.back_opacity = 160
end
end
#--------------------------------------------------------------------------
# ● 获取特技
#--------------------------------------------------------------------------
# def skill
# return @data[self.index]
# end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
# 如果项目数不是 0 就生成位图、重新描绘全部项目
self.contents = Bitmap.new(width - 32, height- 32)
self.contents.font.size = 16
if @set_skills != nil
for i in 0...@set_skills.size
draw_skill(i)
end
end
end
def draw_skill(i)
unless @set_skills[i] == 0
skill = $data_skills[@set_skills[i]]
if $game_party.actors[0].skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 8 + 128 * i
y = 0
rect = Rect.new(x, y, 24, 24)
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x + 8, y + 24, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x, y, 204, 32, skill.name, 0)
end
self.contents.font.color = normal_color
self.contents.draw_text(12 + 128 * i, 32, 72, 24, KEY_NAME[i])
end
def update_cursor_rect
# 光标位置不满 0 的情况下
if @index < 0
self.cursor_rect.empty
return
end
# 获取当前的行
row = @index / @column_max
# 当前行被显示开头行前面的情况下
if row < self.top_row
# 从当前行向开头行滚动
self.top_row = row
end
# 当前行被显示末尾行之后的情况下
if row > self.top_row + (self.page_row_max - 1)
# 从当前行向末尾滚动
self.top_row = row - (self.page_row_max - 1)
end
# 计算光标的宽
cursor_width = self.width / @column_max - 32
# 计算光标坐标
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 32 - self.oy
# 更新国标矩形
self.cursor_rect.set(x, y, cursor_width, 64)
end
end
复制代码
#==============================================================================
# ■ Window_Skill
#------------------------------------------------------------------------------
# 特技画面、战斗画面、显示可以使用的特技浏览的窗口。
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
# actor : 角色
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 128, 640, 224)
@actor = actor
@column_max = 2
refresh
self.index = 0
# 战斗中的情况下将窗口移至中央并将其半透明化
end
#--------------------------------------------------------------------------
# ● 获取特技
#--------------------------------------------------------------------------
def skill
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in
[email protected]
skill = $data_skills[@actor.skills[i]]
if skill != nil
@data.push(skill)
end
end
# 如果项目数不是 0 就生成位图、重新描绘全部项目
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
end
#--------------------------------------------------------------------------
# ● 刷新帮助文本
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.skill == nil ? "" : self.skill.description)
end
end
复制代码
#==============================================================================
# ■ Scene_Skill
#------------------------------------------------------------------------------
# 处理特技画面的类。
#==============================================================================
class Scene_Skill
#--------------------------------------------------------------------------
# ● 初始化对像
# actor_index : 角色索引
#--------------------------------------------------------------------------
def initialize(actor_index = 0, equip_index = 0)
@actor_index = actor_index
end
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
# 获取角色
@actor = $game_party.actors[@actor_index]
# 生成帮助窗口、状态窗口、特技窗口
@help_window = Window_Help.new
@status_window = Window_SkillStatus.new(@actor)
@skill_window = Window_Skill.new(@actor)
# 关联帮助窗口
@skill_window.help_window = @help_window
# 生成目标窗口 (设置为不可见・不活动)
@target_window = Window_SetupSkill.new(@actor)
@target_window.visible = false
@target_window.active = false
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
@help_window.dispose
@status_window.dispose
@skill_window.dispose
@target_window.dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 刷新窗口
@help_window.update
@status_window.update
@skill_window.update
@target_window.update
# 特技窗口被激活的情况下: 调用 update_skill
if @skill_window.active
update_skill
return
end
# 目标窗口被激活的情况下: 调用 update_target
if @target_window.active
update_target
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (特技窗口被激活的情况下)
#--------------------------------------------------------------------------
def update_skill
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换到菜单画面
$scene = Scene_Menu.new(1)
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 获取特技窗口现在选择的特技的数据
@skill = @skill_window.skill
# 不能使用的情况下
if @skill == nil
# 演奏冻结 SE
$game_system.se_play($data_system.buzzer_se)
return
end
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 效果范围是我方的情况下
# 激活目标窗口
@skill_window.active = false
@target_window.visible = true
@target_window.active = true
# 设置效果范围 (单体/全体) 的对应光标位置
return
end
# 按下 R 键的情况下
if Input.trigger?(Input::R)
# 演奏光标 SE
$game_system.se_play($data_system.cursor_se)
# 移至下一位角色
@actor_index += 1
@actor_index %= $game_party.actors.size
# 切换到别的特技画面
$scene = Scene_Skill.new(@actor_index)
return
end
# 按下 L 键的情况下
if Input.trigger?(Input::L)
# 演奏光标 SE
$game_system.se_play($data_system.cursor_se)
# 移至上一位角色
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
# 切换到别的特技画面
$scene = Scene_Skill.new(@actor_index)
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (目标窗口被激活的情况下)
#--------------------------------------------------------------------------
def update_target
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 删除目标窗口
@skill_window.active = true
@target_window.visible = false
@target_window.active = false
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 因为 SP 不足而无法使用的情况下
$game_system.se_play($data_system.decision_se)
@actor.set_skills[@target_window.index] = @skill.id
@target_window.refresh
return
end
end
end
复制代码
[LINE]1,#dddddd[/LINE]
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者:
9244579
时间:
2008-3-8 03:48
让我试试,若成功,加赏~
作者:
9244579
时间:
2008-3-8 05:19
# self.contents.draw_text(12 + 128 * i, 32, 72, 24, KEY_NAME
)
你这是写什么的?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1