Project1

标题: 如何取得事件/角色的精灵 [打印本页]

作者: piaoy    时间: 2011-7-6 20:19
标题: 如何取得事件/角色的精灵
如何装载事件/角色在地图上行走图的的精灵?
作者: Wind2010    时间: 2011-7-6 20:21
装载?不明白意思 嗯 具体是在Game_Player下面那个脚本(我忘记名字了XD)里加载角色图片的
作者: 忧雪の伤    时间: 2011-7-6 20:33
  1. class Spriteset_Map
  2.   attr_reader(:character_sprites)
  3. end
  4. class Scene_Map
  5.   attr_reader(:spriteset)
  6. end

  7. # => $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
  1. =begin
  2. 脚本说明:
  3. $scene.spriteset.read_actor(id)
  4. 读取id号事件(id为0时为角色)的Sprite
  5. $scene.spriteset.add_actor(id)
  6. 描绘id号事件(可以用来修改提取放置物的脚本,原脚本的更新方法太耗内存了- -)
  7. $scene.spriteset.dispose_actor(id)
  8. 释放id号事件的Sprite

  9. 注:以上指令均要在场景为Scene_Map时才能使用,不然会报错。
  10. =end

  11. class Scene_Map
  12.   attr_accessor :spriteset
  13. end
  14. class Spriteset_Map
  15.   def initialize
  16.     @viewport1 = Viewport.new(0, 0, 640, 480)
  17.     @viewport2 = Viewport.new(0, 0, 640, 480)
  18.     @viewport3 = Viewport.new(0, 0, 640, 480)
  19.     @viewport2.z = 200
  20.     @viewport3.z = 5000
  21.     @tilemap = Tilemap.new(@viewport1)
  22.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  23.     for i in 0..6
  24.       autotile_name = $game_map.autotile_names[i]
  25.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  26.     end
  27.     @tilemap.map_data = $game_map.data
  28.     @tilemap.priorities = $game_map.priorities
  29.     @panorama = Plane.new(@viewport1)
  30.     @panorama.z = -1000
  31.     @fog = Plane.new(@viewport1)
  32.     @fog.z = 3000
  33.     @character_sprites = []
  34.     @actor_array = []
  35.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  36.     @actor_array[0] = 0
  37.     for i in $game_map.events.keys.sort
  38.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  39.       @character_sprites.push(sprite)
  40.       @actor_array[i] = @character_sprites.size - 1
  41.     end
  42.     @weather = RPG::Weather.new(@viewport1)
  43.     @picture_sprites = []
  44.     for i in 1..50
  45.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  46.         $game_screen.pictures[i]))
  47.     end
  48.     @timer_sprite = Sprite_Timer.new
  49.     update
  50.   end
  51.   def read_actor(id)
  52.     return @character_sprites[@actor_array[id]]
  53.   end
  54.   def add_actor(id)
  55.     sprite = Sprite_Character.new(@viewport1, $game_map.events[id])
  56.     @character_sprites.push(sprite)
  57.     @actor_array[id] = @character_sprites.size - 1
  58.   end
  59.   def dispose_actor(id)
  60.     return if @character_sprites[@actor_array[id]].nil?
  61.     @character_sprites[@actor_array[id]].bitmap.dispose
  62.     @character_sprites[@actor_array[id]].dispose
  63.     @character_sprites[@actor_array[id]] = nil
  64.   end
  65.   def dispose
  66.     @tilemap.tileset.dispose
  67.     for i in 0..6
  68.       @tilemap.autotiles[i].dispose
  69.     end
  70.     @tilemap.dispose
  71.     @panorama.dispose
  72.     @fog.dispose
  73.     for sprite in @character_sprites
  74.       sprite.dispose unless sprite.nil?
  75.     end
  76.     @weather.dispose
  77.     for sprite in @picture_sprites
  78.       sprite.dispose
  79.     end
  80.     @timer_sprite.dispose
  81.     @viewport1.dispose
  82.     @viewport2.dispose
  83.     @viewport3.dispose
  84.   end
  85. 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中:
  1.     # 刷新角色活动块
  2.     for sprite in @character_sprites
  3.       sprite.update
  4.     end
复制代码
改成
  1.     # 刷新角色活动块
  2.     for sprite in @character_sprites
  3.       sprite.update unless sprite.nil?
  4.     end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1