设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1801|回复: 6
打印 上一主题 下一主题

[已经解决] 如何取得事件/角色的精灵

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1140
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

跳转到指定楼层
1
发表于 2011-7-6 20:19:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
如何装载事件/角色在地图上行走图的的精灵?

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2011-7-6 20:21:25 | 只看该作者
装载?不明白意思 嗯 具体是在Game_Player下面那个脚本(我忘记名字了XD)里加载角色图片的

点评

Sprite_Character?  发表于 2011-7-6 20:31

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

3
发表于 2011-7-6 20:33:12 | 只看该作者
  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]
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1140
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

4
 楼主| 发表于 2011-7-7 10:32:33 | 只看该作者
恩。。。我就是说,图片不都是用精灵显示吗。。我想用角色和事件的精灵的bitmap的一些方法,但是我不知道默认是怎么定义的


piaoy于2011-7-7 10:44补充以下内容:
补充:我是想读取角色、事件的宽、高,昨天想了个笨办法,显示一个完全透明的角色图,用bitmap读取宽、高,但是此方法要大量运用会很麻烦,所以我想既然角色图在游戏中有显示,是不是可以直接使用它这个精灵的bitmap。所以如果有可以直接读取游戏文件夹里某图片的属性而且不显示的方法,我也认可。- -|||

点评

脚本编辑中  发表于 2011-7-7 12:06
回复 支持 反对

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
5
发表于 2011-7-7 12:51:34 | 只看该作者
  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)

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1140
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

6
 楼主| 发表于 2011-7-7 19:36:59 | 只看该作者
Wind2010 发表于 2011-7-7 12:51
如上,读取地图某事件的Sprite(不是Bitmap)

哇,感动啊,这该不会是你现写的吧,认可


piaoy于2011-7-7 19:39补充以下内容:
咳咳。。。认可按钮和手动贴怎么都找不到了- -

点评

本来是用在pudding的工程用来改良提取放置的- -稍作修改就能丢出来了  发表于 2011-7-7 20:06
肯定是……  发表于 2011-7-7 19:39
回复 支持 反对

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
7
发表于 2011-7-8 11:30:02 | 只看该作者
啊对了忘记了有一个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
复制代码

评分

参与人数 1星屑 +400 梦石 +2 收起 理由
「旅」 + 400 + 2

查看全部评分


http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-26 10:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表