Project1
标题:
全局CP脚本的问题
[打印本页]
作者:
玄月
时间:
2009-1-23 17:34
标题:
全局CP脚本的问题
# ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
# by 桜雅 在土
#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class XRXS65A
#--------------------------------------------------------------------------
# 「アイコン設定」
#--------------------------------------------------------------------------
DEFAULT = "046-Skill03" # ディフォルトアイコン
# アイコンハッシュ 記述方式 : アクターID=>アイコン名
ICONS = {
1=>"主角头",
2=>"香头",
3=>"奶妈头",
4=>"剪影头",
5=>"力头",
6=>"cr头",
7=>"姑头",
8=>"心灵头",
9=>"蓝雪头",
10=>"酷头",
11=>"兽头",
12=>"安吉头",
13=>"唯头",
14=>"SM头",
15=>"天朗头",
16=>"敌头",
17=>"牛妞头"
}
# アイコンハッシュE 記述方式 : エネミーID=>アイコン名
ICONE = {
1=>"敌头",
2=>"敌头",
3=>"敌头",
4=>"敌头",
5=>"敌头",
6=>"敌头",
7=>"敌头",
8=>"敌头"
}
#--------------------------------------------------------------------------
# 「シンセ・ゲージ」
#--------------------------------------------------------------------------
SKIN = "GTCP" # スキン
X = 49 # X 座標
Y = 64 # Y 座標
end
#==============================================================================
# --- CP メーターをまとめて管理するクラス、表示関係はすべてココ --- [再定義]
#==============================================================================
class CP_Meters
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# シンセゲージの生成
@base = Sprite.new
@base.bitmap = RPG::Cache.windowskin(XRXS65A::SKIN).dup
@base.x = XRXS65A::X
@base.y = XRXS65A::Y
@base.z = XRXS65A::X
@width = @base.bitmap.width
@height = @base.bitmap.height
@icon_set = []
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
# 生成すべきバトラーの取得
need_initializes = []
for battler in $game_party.actors + $game_troop.enemies
exist = false
for set in @icon_set
exist |= (set[1] == battler)
end
need_initializes.push(battler) unless exist
end
for battler in need_initializes
iconname = nil
if battler.is_a?(Game_Actor)
iconname = XRXS65A::ICONS[battler.id]
else
iconname = XRXS65A::ICONE[battler.id]
end
if iconname == nil
iconname = XRXS65A::DEFAULT
end
sprite = Sprite.new
sprite.bitmap = RPG::Cache.icon(iconname).dup
sprite.y = XRXS65A::Y + @height / 2 - 12
@icon_set.push([sprite, battler])
end
# 更新
for set in @icon_set
set[0].x = XRXS65A::X + @width * set[1].cp / set[1].max_cp - 12
set[0].z = set[0].x
set[0].visible = false if set[1].dead? or !set[1].exist?
end
end
#--------------------------------------------------------------------------
# ○ 可視状態
#--------------------------------------------------------------------------
def visible=(b)
@base.visible = b
@icon_set.each{|set| set[0].visible = b }
end
#--------------------------------------------------------------------------
# ○ 解放
#--------------------------------------------------------------------------
def dispose
@base.dispose
@icon_set.each{|set| set[0].dispose }
end
end
复制代码
不知道为什么我战斗之前用脚本remove了两个角色,可是这里还是照常显示
这个脚本是随手贴别人的。
工程如下。。。
http://rpg.blue/upload_program/d ... ��统_113148580.rar
[LINE]1,#dddddd[/LINE]
版务信息:本贴由楼主自主结贴~
作者:
玄月
时间:
2009-1-23 18:19
自顶
作者:
缺牙de兔子
时间:
2009-1-23 18:33
这个类只做了显示方面的处理
你可以 看看有没有Game_Platy类嵌在其他脚本
作者:
玄月
时间:
2009-1-23 22:27
麻烦继续说下去。。。
因为注释是日文所以我也不知道哪一块是干嘛的
作者:
缺牙de兔子
时间:
2009-1-23 23:31
角色离队后并没发生这样的情况啊
# ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
# by 桜雅 在土
#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class XRXS65A
#--------------------------------------------------------------------------
# 「アイコン設定」
#--------------------------------------------------------------------------
DEFAULT = "head-test" # ディフォルトアイコン
# アイコンハッシュ 記述方式 : アクターID=>アイコン名
ICONS = {
1=>"head-1",
2=>"head-2",
7=>"head-3",
8=>"head-3"
}
# アイコンハッシュE 記述方式 : エネミーID=>アイコン名
ICONE = {
1=>"head-0",
2=>"head-0",
}
#--------------------------------------------------------------------------
# 「シンセ・ゲージ」
#--------------------------------------------------------------------------
SKIN = "cp2" # スキン
X = 0 # X 座標
Y = 45 # Y 座標
end
#==============================================================================
# --- CP メーターをまとめて管理するクラス、表示関係はすべてココ --- [再定義]
#==============================================================================
class CP_Meters
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# シンセゲージの生成
@base = Sprite.new
@base.bitmap = RPG::Cache.windowskin(XRXS65A::SKIN).dup
@base.x = XRXS65A::X
@base.y = XRXS65A::Y
@base.z = XRXS65A::X
@width = 288#@base.bitmap.width
@height = @base.bitmap.height
@icon_set = []
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
# 生成すべきバトラーの取得
need_initializes = []
for battler in $game_party.actors + $game_troop.enemies
exist = false
for set in @icon_set
exist |= (set[1] == battler)
end
need_initializes.push(battler) unless exist
end
for battler in need_initializes
iconname = nil
if battler.is_a?(Game_Actor)
iconname = XRXS65A::ICONS[battler.id]
else
iconname = XRXS65A::ICONE[battler.id]
end
if iconname == nil
iconname = XRXS65A::DEFAULT
end
sprite = Sprite.new
sprite.bitmap = RPG::Cache.icon(iconname).dup
sprite.y = XRXS65A::Y + @height / 2 - 32
@icon_set.push([sprite, battler])
end
# 更新
for set in @icon_set
set[0].x = XRXS65A::X + @width * set[1].cp / set[1].max_cp + 160
set[0].z = set[0].x
if set[1].dead? or !set[1].exist?
set[0].visible = false
else
set[0].visible = true
end
end
end
#--------------------------------------------------------------------------
# ○ 可視状態
#--------------------------------------------------------------------------
def visible=(b)
@base.visible = b
@icon_set.each{|set| set[0].visible = b }
end
#--------------------------------------------------------------------------
# ○ 解放
#--------------------------------------------------------------------------
def dispose
@base.dispose
@icon_set.each{|set| set[0].dispose }
end
end
复制代码
你说的是设置不参战时头像仍然显示吧
这个我有注意到
因为根本就不是完全沾边的两个脚本... [LINE]1,#dddddd[/LINE]
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者:
玄月
时间:
2009-1-24 00:00
是的……工程的话在另一个帖子那里,需要的话我贴来这里
CP脚本可能在Scene_Battle1执行之前就执行了,所以就会显示他吧…………
我试试吧判定式写在CP脚本上面。。。话说我家茅坑塞了1天终于修好了。
作者:
缺牙de兔子
时间:
2009-1-24 00:07
for battler in $game_party.actors + $game_troop.enemies
exist = false
for set in @icon_set
exist |= (set[1] == battler)
end
need_initializes.push(battler) unless exist
end
复制代码
56行这里判断了$game_party.actors队伍的人数
你找一下参战的人数替换成队伍的人数看看
作者:
玄月
时间:
2009-1-24 00:31
谢谢,不过我用其他方法解决了。
#判定是否全员不参战,如是则将顺位HP不等于零的强制加入战斗。
if $gengetu + $gengetu1 + $gengetu2 + $gengetu3 + $gengetu4 + $gengetu5 == 0
if $game_party.actors[0].hp > 0
$gengetu = 1
elsif $game_party.actors[1].hp > 0
$gengetu1 = 1
elsif $game_party.actors[2].hp > 0
$gengetu2 = 1
elsif $game_party.actors[3].hp > 0
$gengetu3 = 1
elsif $game_party.actors[4].hp > 0
$gengetu4 = 1
elsif $game_party.actors[5].hp > 0
$gengetu5 = 1
end
end
#给角色赋值
$party = $game_party.actors[0].id
$party1 = $game_party.actors[1].id
$party2 = $game_party.actors[2].id
$party3 = $game_party.actors[3].id
$party4 = $game_party.actors[4].id
$party5 = $game_party.actors[5].id
#设置战斗角色
if $gengetu == 0
$game_party.remove_actor($party)
end
if $gengetu1 == 0
$game_party.remove_actor($party1)
end
if $gengetu2 == 0
$game_party.remove_actor($party2)
end
if $gengetu3 == 0
$game_party.remove_actor($party3)
end
if $gengetu4 == 0
$game_party.remove_actor($party4)
end
if $gengetu5 == 0
$game_party.remove_actor($party5)
end
复制代码
我把这个塞进CP脚本的class Scene_Battle的def mian之后,就好了。
他果然是先执行CP脚本,然后详细的定义再读取原来的脚本。
不过还是认可你吧。
作者:
缺牙de兔子
时间:
2009-1-24 00:36
●Scene_Map●这个是角色参战的判断
在类名下面添加一个全局变量
$actos_count = 0
然后在下面给他累加
#-----------------------------------------------------------------
# 主循环
loop do
#-------------------------------------
# 当指定开关打开则角色必须加入战斗
#-------------------------------------
if $game_switches[$swiches1] == true
$actos_count+=1
$gengetu = 1
end
if $game_switches[$swiches2] == true
$actos_count+=1
$gengetu1 = 1
end
if $game_switches[$swiches3] == true
$actos_count+=1
$gengetu2 = 1
end
if $game_switches[$swiches4] == true
$actos_count+=1
$gengetu3 = 1
end
if $game_switches[$swiches5] == true
$actos_count+=1
$gengetu4 = 1
end
if $game_switches[$swiches6] == true
$actos_count+=1
$gengetu5 = 1
end
复制代码
之后在for battler in $actos_count + $game_troop.enemies
改成
for battler in $actos_count+ $game_troop.enemies
试试
总之我的方法是在参战判断时给全局变量+1
然后在战斗处理时直接拿出战的人数做判断
不知道行不行...
作者:
玄月
时间:
2009-1-24 02:35
我说…………已经解决了……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1