Project1
标题:
可不可以让角色行走后面有脚印呢?
[打印本页]
作者:
花开荼蘼
时间:
2012-8-3 22:18
标题:
可不可以让角色行走后面有脚印呢?
翻过置顶帖也搜索过相关问题,只找到XP版的
效果真好,NPC也可以有脚印~~不过VX的没找到……
如果谁知道VX的可不可以帮忙贴上来?^^
PS:可以的话……希望可以只是在特定图块里才有脚印这样……谢谢 dsu_plus_rewardpost_czw
作者:
创造达人
时间:
2012-8-3 23:01
事件搞定
在后面放置脚印的行走图
好吧,无视我
作者:
八宝粥先生
时间:
2012-8-4 09:15
事件党路过:
为了防止地图脚印过多,多加点开关应该可以吧....
首先加10个脚印事件(不透明度0),出现条件为开关1-10
PS①:防止事件过多卡机,脚印事件可以设置为并行处理,内容为60帧后更改本事件不透明度为0,并关闭对应开关。
事件脚本分歧判定当角色移动时,判定角色的朝向,(当为上时,设置脚印事件为角色的X Y-1坐标)
(当为下时,设置脚印事件为角色的X Y+1坐标),(当为左时,设置脚印事件为角色的X+1 Y坐标)
,(当为右时,设置脚印事件为角色的X-1 Y坐标)具体设置哪个脚印事件则可以用条件分歧判定1-10
开关是否打开..优先选择数值低的开关打开,再更改对应脚印事件的不透明度为255,测试成功...
能看懂吧......
PS:你的追加效果可以用地形标志实现(我没试过)
作者:
花开荼蘼
时间:
2012-8-4 18:21
嗯……
事件的话有想过,但是太麻烦了,每个NPC和怪什么的都要用,而且并行事件太多会很卡吧?
还是比较想用脚本……
作者:
devilg
时间:
2012-8-5 01:54
事件想得出来,那么脚本完全可以做得到的
请注意刚写的这个还是处于大部分完成阶段
测试时就是脚印位置错位,在下我实在是不想拿出标尺一pix一pix的量了/找xp的脚本了
哪位网友能帮忙修复一下在下十分感谢。
请直接无视f***等字样。
=begin
用于vx的脚印系统
copywrong DevilG 版权没有 翻版。。翻吧。
※※※※※※※BUG WARNING※※※※※※※
由于在下我对任何图形/动画类脚本都不擅长,目前脚印的出现位置错位
(具体表现时地图最上一行是显示不出脚印的,左边第一行一半也没有)
如果您愿意修复这个bug,在下我十分感谢。
目前调整位置的地点是第106行。
使用方法:
将脚印图块按照下面的格式放置在游戏中。
格式-脚步图块:
最好与图块大小相同。(默认32*32)
放置于graphics/footstep文件夹内
文件名格式:人物图名_人物图位_方向(比如people1_3_2)
请注意方向的定位是2↓4←6→8↑.
扩展功能:
1秒脚印自动消失。(line93)
不同图块显示不同脚印。(line53)
不同人物显示不同脚印。(line58)
特殊情况不显示脚印。(line48)
需要更多扩展功能请pm我。
技术支持:
新建类似于sprite_character的类(sprite_footstep,实际上是直接copy过来的)
在人物移动时(通过increase_step增加判定开关)向后显示一个sprite_footstep.
兼容性技术支持:
对大规模更改表示界面的系统可能不支持。
=end
module Cache
def self.footstep(name)#增加了获取脚步图片的call。
load_bitmap("Graphics/Footstep/", name)
end
end
class Scene_Map < Scene_Base
attr_accessor:spriteset#好像没有用
end
class Game_System
attr_accessor :no_footstep#不显示脚印的开关。
#打开方式:$game_system.no_footstep=true 关闭:换成false
def Footstepfilename(x,y,name,index,facing)
#获取脚步图块的call。
#facing:2↓4←6→8↑
case $game_map.data[x,y,0]#different footstep pattern casing tileID
#不同圖塊的腳步更新,因為data的Table格式還不清楚這裡不作處理
when 1
type = 1
end
return "test_"+ facing.to_s#测试语句,使用时请删除
return name.to_s + "_"+index.to_s + "_" + facing.to_s
end
alias initialize01 initialize#初始化无脚印开关的语句。
def initialize
initialize01
@no_footstep = false
end
end
class Game_Character
attr_accessor:shadowfuck#人物是否移动的boolean开关。
alias increase_steps01 increase_steps
def increase_steps#移动时打开显示脚印开关。
increase_steps01
@shadowfuck=true
end
end
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
alias initialize01 initialize
def initialize#初始化包含脚印sprite的hash表。
@footstep = {}#hash list
initialize01
#hash表索引格式:key format: [x,y] content:sprite_footstep
end
alias update01 update
def update
update01
#update_footstep #将此项前面的"#"删除打开1秒脚印消失的功能。
end
def update_footstep #用于1秒脚印消失的call。如果1秒已过则删除脚印
for shit in @footstep.values
if shit.update
shit.dispose
shit = nil
end
end
end
def push_step(x,y,type)#添加脚印的call。如果当前x,y有脚印且脚印类一样则不更新,否则更新脚印
=begin
下面的语句用于调整脚印位置。
以下调整不能用:
y-=32
type的格式是:"name_index_direction"
direction信息可以通过删除两次"_"(type1 = type[type.index("_")+1,type.size-1]#这个语句可以删除一次"_")并to_i获得。
或者可以从源头添加direction信息。
参考预想的调整方式:
对direction不同进行x,y调整。(case direction并做处理)
=end
y-=32#仅供测试使用,调整完毕请删除此行
if @footstep[[x,y]]!=nil#如果当前x,y有脚印
if @footstep[[x,y]].name != type#脚印类不一样则清除当前脚印
@footstep[[x,y]].dispose
@footstep[[x,y]]=nil
else#且脚印类一样则不更新
return
end
end
@footstep[[x,y]]=Sprite_Footstep.new(x,y,type,@viewport1)#更新脚印
end
def update_characters#若角色移动则提交更新脚印
for sprite in @character_sprites
shit = sprite.update
if shit != nil
push_step(shit[0],shit[1],shit[2])
end
end
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# 角色显示用脚本。监视 Game_Character 类的实例、自动变化脚本状态。
#==============================================================================
class Sprite_Footstep < Sprite_Base#脚印的sprite类。
attr_accessor :name
#--------------------------------------------------------------------------
# ● 初始化对像
# viewport : 显示端口
# character : 角色 (Game_Character)
#--------------------------------------------------------------------------
def initialize(x,y,fileName,viewport)
super(viewport)
@name = fileName
self.x = x
self.y = y
#self.z = 0
@duracell = 60#脚印的持续时间。每秒为60帧,目前设置为60帧
self.bitmap = Cache.footstep(fileName)
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update#对持续时间的更新。返回true时由源头call解放sprite
if @duracell <= 0
return true
else
@duracell -= 1
return false
end
end
end
class Sprite_Character < Sprite_Base
alias update01 update
def update#如果角色移动过并显示脚步开关打开,则返回x,y,名称语句进行更新
shit = nil
shit = [self.x,self.y,$game_system.Footstepfilename(self.x,self.y,@character.character_name,@character.character_index,@character.direction)] if showFootstep?
update01
return shit
end
def showFootstep?#判定是否显示脚步的boolean call。
return false if @character.character_name == ""
return false if $game_system.no_footstep
if @character.shadowfuck!=nil
@character.shadowfuck=nil
return true
end
return false
end
end
复制代码
作者:
devilg
时间:
2012-8-5 01:59
本帖最后由 devilg 于 2012-8-5 02:18 编辑
忘了加了测试效果和脚印图片。
P.S.我开始做时竟然还把类似画图的功能做出来了,不算太卡。没用shadowfuck开关,直接x,y更新,玩家就像一个笔刷刷过画面。
真正做出画图也是可以的,毕竟图块也是可以做出1*1pix大小,这样橡皮擦也能做了。。。(真无聊)
P.S2测试文件test_2,4,6,8都要放的
如果想做批量处理,在cache.footstep那里处理就可以了
test_2.png
(3.3 KB, 下载次数: 31)
下载附件
保存到相册
2012-8-5 01:59 上传
Untitled.png
(104.54 KB, 下载次数: 27)
下载附件
保存到相册
2012-8-5 01:59 上传
作者:
candy2266
时间:
2012-8-7 21:40
本帖最后由 candy2266 于 2012-8-7 21:42 编辑
可惜没的加分 很不错的想法 还有很不错的脚本。
我想到的是 在行走图中制作脚印 不过这样貌似不能产生透明度发生变化 直到消失的效果
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1