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

Project1

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

[已经过期] 求影子系统

 关闭 [复制链接]

Lv3.寻梦者

梦石
3
星屑
50
在线时间
762 小时
注册时间
2010-8-17
帖子
681
跳转到指定楼层
1
发表于 2011-8-15 19:27:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
逼人跪求在人物下方加一个大小形状相同的影子的方法。就是《仙剑时空传二》的那种效果。以前有人给了个“太阳精灵”脚本,不过用起来太麻烦,加了这个脚本后游戏卡的跟那什么似的。现在再次发帖求助。
《仙剑忆痕录 迟暮的九黎》貌似盗版了《时空传》,也有影子系统,但是实在不知道怎么用。求教。

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60890
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

2
发表于 2011-8-15 19:34:07 | 只看该作者
去改角色行走图不就可以了……
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
50
在线时间
762 小时
注册时间
2010-8-17
帖子
681
3
 楼主| 发表于 2011-8-15 19:50:02 | 只看该作者
orzfly 发表于 2011-8-15 19:34
去改角色行走图不就可以了……

工程太浩大了,最好是脚本。
P.S.要不你帮我改?(玩笑)
回复

使用道具 举报

Lv2.观梦者

虚構歪曲

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

贵宾

4
发表于 2011-8-15 20:46:43 | 只看该作者
本帖最后由 忧雪の伤 于 2011-8-15 20:48 编辑
  1. #A shadow is created when an opaque object is near a light source,
  2. #so in the event that is the light source (example:fire)
  3. #put a comment (on page 1) and simlpy write 's' (without the apostraphys)

  4. #Insert a new class called Character_Shadow above MAIN  

  5. #==============================================================================
  6. # 仭 Sprite_Shadow (Sprite_Ombre )
  7. # Based on Genzai Kawakami's shadows, dynamisme&features by Rataime, extra features Boushy
  8. #==============================================================================

  9. CATERPILLAR_COMPATIBLE = true

  10. class Game_Party
  11. attr_reader :characters
  12. end

  13. class Sprite_Shadow < RPG::Sprite

  14. attr_accessor :character

  15. def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0)
  16.    super(viewport)
  17.    @anglemin=anglemin.to_f
  18.    @anglemax=anglemax.to_f
  19.    @distancemax=distancemax.to_f
  20.    @character = character
  21.    @source = source
  22.    update
  23. end

  24. def update
  25.    super
  26.    
  27.    if @tile_id != @character.tile_id or
  28.       @character_name != @character.character_name or
  29.       @character_hue != @character.character_hue
  30.      @tile_id = @character.tile_id
  31.      @character_name = @character.character_name
  32.      @character_hue = @character.character_hue
  33.      if @tile_id >= 384
  34.        self.bitmap = RPG::Cache.tile($game_map.tileset_name,
  35.          @tile_id, @character.character_hue)
  36.        self.src_rect.set(0, 0, 32, 32)
  37.        self.ox = 16
  38.        self.oy = 32
  39.      else
  40.        self.bitmap = RPG::Cache.character(@character.character_name,
  41.          @character.character_hue)
  42.        @cw = bitmap.width / 4
  43.        @ch = bitmap.height / 4
  44.        self.ox = @cw / 2
  45.        self.oy = @ch
  46.      end
  47.    end
  48.    self.visible = (not @character.transparent)
  49.    if @tile_id == 0
  50.      sx = @character.pattern * @cw
  51.      sy = (@character.direction - 2) / 2 * @ch
  52.      if self.angle>90 or angle<-90
  53.        if @character.direction== 6
  54.               sy = ( 4- 2) / 2 * @ch
  55.        end
  56.        if @character.direction== 4
  57.               sy = ( 6- 2) / 2 * @ch
  58.        end
  59.        if @character.direction== 2
  60.               sy = ( 8- 2) / 2 * @ch
  61.        end
  62.        if @character.direction== 8
  63.               sy = ( 2- 2) / 2 * @ch
  64.        end
  65.      end
  66.      self.src_rect.set(sx, sy, @cw, @ch)
  67.    end
  68.    self.x = @character.screen_x
  69.    self.y = @character.screen_y-5
  70.    self.z = @character.screen_z(@ch)-1
  71.    self.opacity = @character.opacity
  72.    self.blend_type = @character.blend_type
  73.    self.bush_depth = @character.bush_depth
  74.    if @character.animation_id != 0
  75.      animation = $data_animations[@character.animation_id]
  76.      animation(animation, true)
  77.      @character.animation_id = 0
  78.    end
  79.    @[email protected]
  80.    @deltay= @source.y-self.y
  81.    self.angle = 57.3*Math.atan2(@deltax, @deltay )
  82.    @angle_trigo=self.angle+90
  83.    if @angle_trigo<0
  84.      @angle_trigo=360+@angle_trigo
  85.    end
  86.    self.color = Color.new(0, 0, 0)
  87.    @distance = ((@deltax ** 2) + (@deltay ** 2))
  88.    if$game_map.shadows==-1
  89.      self.opacity = 0
  90.    else
  91.      self.opacity = 1200000/(@distance+6000)   
  92.    end
  93.    @distance = @distance ** 0.5
  94.    if @distancemax !=0 and @distance>=@distancemax
  95.      self.opacity=0
  96.    end
  97.    if @anglemin !=0 or @anglemax !=0
  98.       if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and @anglemin<@anglemax
  99.         self.opacity=0
  100.       end
  101.       if (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and @anglemin>@anglemax
  102.         self.opacity=0
  103.       end     
  104.    end
  105. end
  106. end

  107. #===================================================
  108. # 仴 CLASS Sprite_Character edit
  109. #===================================================

  110. class Sprite_Character < RPG::Sprite
  111. alias shadow_initialize initialize

  112. def initialize(viewport, character = nil)
  113.    @character = character
  114.    super(viewport)
  115.    @ombrelist=[]
  116.    if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"])
  117.      if (character.list[1]!=nil and character.list[1].code == 108)
  118.        @anglemin=character.list[1].parameters[0]
  119.      end
  120.      if (character.list[2]!=nil and character.list[2].code == 108)
  121.        @anglemax=character.list[2].parameters[0]
  122.      end
  123.      if (character.list[3]!=nil and character.list[3].code == 108)
  124.        @distancemax=character.list[3].parameters[0]
  125.      end  
  126.     for i in $game_map.events.keys.sort
  127.      if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["o"])
  128.        @ombrelist[i+1] = Sprite_Shadow.new(viewport, $game_map.events[i],self,@anglemin,@anglemax,@distancemax)
  129.      end
  130.     end
  131.     @ombrelist[1] = Sprite_Shadow.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax)
  132. #===================================================
  133. # 仠 Compatibility with fukuyama's caterpillar script
  134. #===================================================
  135. if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil

  136. for member in $game_party.characters
  137.    @ombrelist.push(Sprite_Shadow.new(viewport, member,self,@anglemin,@anglemax,@distancemax))
  138. end

  139. end
  140. #===================================================
  141. # 仠 End of the compatibility
  142. #===================================================
  143.    end
  144.    shadow_initialize(viewport, @character)
  145. end

  146. alias shadow_update update

  147. def update
  148.    shadow_update
  149.    if @ombrelist!=[]
  150.      for i in [email protected]
  151.        if @ombrelist[i]!=nil
  152.          @ombrelist[i].update
  153.        end
  154.      end
  155.    end
  156. end  

  157. end

  158. #===================================================
  159. # 仴 CLASS Scene_Save edit
  160. #===================================================
  161. class Scene_Save < Scene_File

  162. alias shadows_write_save_data write_save_data

  163. def write_save_data(file)
  164.    $game_map.shadows = nil
  165.    shadows_write_save_data(file)
  166. end
  167. end

  168. #===================================================
  169. # 仴 CLASS Game_Map edit
  170. #===================================================
  171. class Game_Map
  172. attr_accessor :shadows
  173. end
复制代码
使用方法是在充当光源的事件上加上注释:s。
回复

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
50
在线时间
762 小时
注册时间
2010-8-17
帖子
681
5
 楼主| 发表于 2011-8-16 11:19:05 | 只看该作者
本帖最后由 嚴子 于 2011-8-16 11:23 编辑
忧雪の伤 发表于 2011-8-15 20:46
使用方法是在充当光源的事件上加上注释:s。


还好,不过不透明度浅了点,在哪里改?麻烦说一下。
还有为什么只有主角有影子?我要求的是所有人物。
回复

使用道具 举报

Lv2.观梦者

虚構歪曲

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

贵宾

6
发表于 2011-8-16 12:07:45 | 只看该作者
本帖最后由 忧雪の伤 于 2011-8-16 12:11 编辑
嚴子 发表于 2011-8-16 11:19
还好,不过不透明度浅了点,在哪里改?麻烦说一下。
还有为什么只有主角有影子?我要求的是所有人物。 ...


事件需要添加影子请加上注释:o。
  1. self.opacity = 1200000/(@distance+6000)
复制代码
脚本中搜查到这句,将 1200000 提高即可。
回复

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
50
在线时间
762 小时
注册时间
2010-8-17
帖子
681
7
 楼主| 发表于 2011-8-16 12:11:25 | 只看该作者
本帖最后由 嚴子 于 2011-8-16 12:24 编辑
忧雪の伤 发表于 2011-8-16 12:07
事件需要添加影子请加上注释:o。


好的谢谢。那不透明度怎么改?



嚴子于2011-8-16 12:24补充以下内容:
苦笑。靠近太阳的时候会有神奇的事情发生。这样做还是有点麻烦,《仙剑时空传二》里貌似一个脚本就搞定了。继续等待。提高悬赏求《时空传二》里的影子系统。不过还是谢谢忧雪 伤前辈。

点评

靠近太阳影子会消失= =bbb,是吧,这个脚本我用了几秒就扔了,不过你又不要太阳精灵……  发表于 2011-8-16 12:40
LS 回帖已更新。  发表于 2011-8-16 12:12
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-21 07:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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