Project1
标题:
如何取得事件/角色的精灵
[打印本页]
作者:
piaoy
时间:
2011-7-6 20:19
标题:
如何取得事件/角色的精灵
如何装载事件/角色在地图上行走图的的精灵?
作者:
Wind2010
时间:
2011-7-6 20:21
装载?不明白意思 嗯 具体是在Game_Player下面那个脚本(我忘记名字了XD)里加载角色图片的
作者:
忧雪の伤
时间:
2011-7-6 20:33
class Spriteset_Map
attr_reader(:character_sprites)
end
class Scene_Map
attr_reader(:spriteset)
end
# => $scene.spriteset.character_sprites[nth]
复制代码
作者:
piaoy
时间:
2011-7-7 10:32
恩。。。我就是说,图片不都是用精灵显示吗。。我想用角色和事件的精灵的bitmap的一些方法,但是我不知道默认是怎么定义的
piaoy于2011-7-7 10:44补充以下内容:
补充:我是想读取角色、事件的宽、高,昨天想了个笨办法,显示一个完全透明的角色图,用bitmap读取宽、高,但是此方法要大量运用会很麻烦,所以我想既然角色图在游戏中有显示,是不是可以直接使用它这个精灵的bitmap。所以如果有可以直接读取游戏文件夹里某图片的属性而且不显示的方法,我也认可。- -|||
作者:
Wind2010
时间:
2011-7-7 12:51
=begin
脚本说明:
$scene.spriteset.read_actor(id)
读取id号事件(id为0时为角色)的Sprite
$scene.spriteset.add_actor(id)
描绘id号事件(可以用来修改提取放置物的脚本,原脚本的更新方法太耗内存了- -)
$scene.spriteset.dispose_actor(id)
释放id号事件的Sprite
注:以上指令均要在场景为Scene_Map时才能使用,不然会报错。
=end
class Scene_Map
attr_accessor :spriteset
end
class Spriteset_Map
def initialize
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@viewport3.z = 5000
@tilemap = Tilemap.new(@viewport1)
@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
autotile_name = $game_map.autotile_names[i]
@tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
end
@tilemap.map_data = $game_map.data
@tilemap.priorities = $game_map.priorities
@panorama = Plane.new(@viewport1)
@panorama.z = -1000
@fog = Plane.new(@viewport1)
@fog.z = 3000
@character_sprites = []
@actor_array = []
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
@actor_array[0] = 0
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(sprite)
@actor_array[i] = @character_sprites.size - 1
end
@weather = RPG::Weather.new(@viewport1)
@picture_sprites = []
for i in 1..50
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures[i]))
end
@timer_sprite = Sprite_Timer.new
update
end
def read_actor(id)
return @character_sprites[@actor_array[id]]
end
def add_actor(id)
sprite = Sprite_Character.new(@viewport1, $game_map.events[id])
@character_sprites.push(sprite)
@actor_array[id] = @character_sprites.size - 1
end
def dispose_actor(id)
return if @character_sprites[@actor_array[id]].nil?
@character_sprites[@actor_array[id]].bitmap.dispose
@character_sprites[@actor_array[id]].dispose
@character_sprites[@actor_array[id]] = nil
end
def dispose
@tilemap.tileset.dispose
for i in 0..6
@tilemap.autotiles[i].dispose
end
@tilemap.dispose
@panorama.dispose
@fog.dispose
for sprite in @character_sprites
sprite.dispose unless sprite.nil?
end
@weather.dispose
for sprite in @picture_sprites
sprite.dispose
end
@timer_sprite.dispose
@viewport1.dispose
@viewport2.dispose
@viewport3.dispose
end
end
复制代码
如上,读取地图某事件的Sprite(不是Bitmap)
作者:
piaoy
时间:
2011-7-7 19:36
Wind2010 发表于 2011-7-7 12:51
如上,读取地图某事件的Sprite(不是Bitmap)
哇,感动啊,这该不会是你现写的吧,认可
piaoy于2011-7-7 19:39补充以下内容:
咳咳。。。认可按钮和手动贴怎么都找不到了- -
作者:
Wind2010
时间:
2011-7-8 11:30
啊对了忘记了有一个Bug
Spriteset_Map的update中:
# 刷新角色活动块
for sprite in @character_sprites
sprite.update
end
复制代码
改成
# 刷新角色活动块
for sprite in @character_sprites
sprite.update unless sprite.nil?
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1