
自己比较喜欢流星的,所以想到了制作一个这样的开场动画。完全自己的创意,自己的制作。所以希望不要未经许可随意取用,十分感谢大家(编按:换言之,就是如果使用的话,希望能给作者发个论坛短信告知,便于统计使用次数什么的)。
有什么好的建议的,或者想在自己作品中加入这个开场动画的,请根据我的联系方式联系我,我会及时给予答复的。
使用的时候需要更改Scene_Title,Main脚本块,所以暂时没办法写清楚用法,以后有空在我自己的BLOG空间贴出来吧……暂时给出脚本块GPRA_Scene_Star内容。
以下是脚本块GPRA_Scene_Star全部内容:
#=========================================================
# ◎ Scene_Star
#----------------------------------------------------------------------
# ◎ 流星流过刷出图片
#--------------------------------------------------------------------
# 制作者:绿梨子红苹果
# 个人主页:vbgm.9126.com
# E-Mail:xhy.01@163.com
# QQ:42378361
#==========================================================
class Scene_Star
#------------------------------------------------------------
# ● 主处理
#-----------------------------------------------------------
def main
# 战斗测试的情况下
if $BTEST
battle_test
return
end
# 载入数据库
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# 生成系统对像
$game_system = Game_System.new
# 生成显示 标题 图片用的Sprite
@SurTitle = Sprite.new
@SurTitle.bitmap = Bitmap.new("Graphics/Titles/" + $data_system.title_name)
# 生成 VB Game Maker 背景图形Sprite
@SurVBGM = Sprite.new
@SurVBGM.bitmap = Bitmap.new("Graphics/Titles/vbgm.png")
# 实现擦除的关键,将待擦除的背景混合方式改为减法
@SurVBGM.blend_type =2
# 载入 流星 位图
@SurStar = Bitmap.new("Graphics/Titles/star.png")
# 生成星星Sprite,星星同时最多出现8个
@star=[nil,nil,nil,nil,nil,nil,nil,nil]
for i in 0..7
@star[i] = Sprite.new
@star[i].bitmap = Bitmap.new(32,32)
@star[i].x=-32 # 这两步设定初始值
@star[i].y=-32 # 防止星星错误的出现在屏幕中央
@star[i].blend_type =1 # 星星混合方式为加法
@star[i].visible =false # 一开始不显示星星
@star[i].bitmap.blt(0,0,@SurStar,Rect.new(0,32,32,32))
end
# 星星出现的顺序,当然不嫌麻烦的话,这里应该做成随机的
@star_turn=
[
20,31,36,24,18,40,27,38,34,47,
13,19,11,5,46,14,16,2,37,44,
39,6,12,25,8,17,35,1,10,42,
21,15,4,22,9,43,26,29,45,23,
33,3,32,41,30,7,28,0
]
# 记录星星出现的数量
@star_num=0
# 记录星星状态的矩形
# 注:这个矩形是记录应该显示星星的哪个状态的,实在不懂的话不必追究
@star_rect=[nil,nil,nil,nil,nil,nil,nil,nil]
# 执行过渡
Graphics.transition
# 定义计数器,这里计数器是控制星星转动的
@i=0
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面被切换就中断循环
if $scene != self
break
end
# 计数器自增
@i+=1
end
# 准备过渡
Graphics.freeze
# 释放图形
@SurTitle.bitmap.dispose
@SurTitle.dispose
@SurVBGM.bitmap.dispose
@SurVBGM.dispose
for i in 0..7
@star[i].bitmap.dispose
@star[i].dispose
end
end
#-----------------------------------------------------
# ● 刷新画面
#-------------------------------------------------
def update
# 在星星数量小于8时是随机让星星出现的
if @star_num < 8
# 随机出现星星,1/10概率
if rand(10)==1
# 取得应该出现的星星的序号
t=@star_turn[@star_num]
# 计算星星的开始坐标
if t<28
@star[@star_num].x=t * 24
@star[@star_num].y=-32
else
@star[@star_num].x=640
@star[@star_num].y=(t-28)*24
end
# 初始化星星的状态矩形,绘制它的起始图片以及设定它可见
@star_rect[@star_num]=Rect.new(0,0,32,32)
@star[@star_num].visible = true
# 已出现的星星数目自增1
@star_num+=1
end
end
# 这段用于擦除背景
for i in 0..7
# 当星星的可视状态为真时
if @star[i].visible == true
# 将星星流过的位置背景图片擦成黑色,减法运算的时候就是透明的了
@SurVBGM.bitmap.blt(@star[i].x,@star[i].y,@SurStar,@star_rect[i])
# 将矩形位置移动到下一行,就是准备显示真实的黄色星星了
@star_rect[i].y=32
end
end
# 这一步显示金色的流星
for i in 0..7
# 当星星的可视状态为真时
if @star[i].visible==true
# 这里是每3帧将星星的状态转移到下一步
if @i%3==0
@star[i].bitmap.blt(0,0,@SurStar,@star_rect[i])
@star_rect[i].x+=32
@star_rect[i].x%=160
end
# 星星的坐标移动,让星星从右上至左下流动
@star[i].x-=2
@star[i].y+=2
# 改变矩形,为了下一次的擦除背景做准备
@star_rect[i].y=0
# 这里是当星星流出屏幕后进行的处理
if @star[i].x<=-32 or @star[i].y>=480
# 当星星没有擦除屏幕完成时,47才表示48颗星星擦除完毕了
if @star_num < 47 then
# 这里进行的操作就和前面的添加星星的操作一样了,省略注释
t=@star_turn[@star_num]
if t<28
@star[i].x=t * 24
@star[i].y=-32
else
@star[i].x=640
@star[i].y=(t-28)*24
end
@star_rect[i]=Rect.new(0,0,32,32)
@star_num+=1
# 这里是当所有星星出现完后
else
# 将此流出屏幕的星星可视状态设为否
@star[i].visible=false
end
end
end
end
# 按下 C 键的情况下,进入标题画面
if Input.trigger?(Input::C)
$scene = Scene_Title.new
end
end
#--------------------------------------------------
# ● 战斗测试
#----------------------------------------------
def battle_test
# 载入数据库 (战斗测试用)
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
# 重置测量游戏时间用的画面计数器
Graphics.frame_count = 0
# 生成各种游戏对像
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# 设置战斗测试用同伴
$game_party.setup_battle_test_members
# 设置队伍 ID、可以逃走标志、战斗背景
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# 演奏战斗开始 BGM
$game_system.se_play($data_system.battle_start_se)
# 演奏战斗 BGM
$game_system.bgm_play($game_system.battle_bgm)
# 切换到战斗画面
$scene = Scene_Battle.new
end
end

